在航空业中,航班起飞前需要进行严格的“配载”,即计算飞机的旅客、货物、行李的重量分布,计算出飞机的重心位置,以确保飞行安全。
设计一个基础的航班货运配载模块。系统需要记录航班的基本信息(航班号、最大起飞重量、最大业载重量)。地勤人员可以按照货物重量从高到低向该航班添加货物(货物名称、重量)。系统需要实时计算当前已装载的总重量,并判断是否超载。
【设计要求】
类设计必须符合单一职责原则(SRP),参考类图如下所示(仅作参考,可自行加工具类)。
注意:类设计如果违背了SRP,此题不得分。
image.png
输入格式:
第1行:输入航班号flightNo(字符串,例如CA1201)
第2行:输入该航班最大载重重量maxWeight(实型数,例如1200.0)
第3行:输入该航班要装载的货物件数n(整型数,例如10)
从第4行开始,循环输入要装载的货物的名称cargoName(字符串)和cargoWeight重量(实型数)
提示:在使用Scanner输入的时候,nextLine()方法会接受上一次输入的回车符号,因此,建议大家在nextLine()之前再加一个nextLine(),如下代码所示:
int a = scanner.nextInt();// 从键盘输入a的值后会回车
scanner.nextLine();//该行代码专门接收上一行代码的回车符号
String s = scanner.nextLine();//此时s才能接收输入的第二行数据
输入如下:
25 //a=25
abc //s="abc"
输出格式:
前n行按照装载顺序依次输出货物的信息,格式如下:
货物[名称 重量:重量值kg]
第n+1行输出装载的总重量以及该航班最大载重量,格式如下:
总重量: 重量值kg / 最大载重: 载重值kg
最后一行输出配载状态,如果没有超载,则输出配载状态:正常,如果超载则输出警告:严重超载
注意:输出的数值均保留1位小数。
这是题目
过不了的测试点:排序,超载测试
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//输入航班信息
Flight.flightNo = sc.nextLine();
Flight.maxWeight = sc.nextDouble();
Flight.n = sc.nextInt();
//输入货物信息
LoadManifest.cargoList = new Cargo[Flight.n];
for (int i = 0; i < Flight.n; i++) {
LoadManifest.cargoList[i] = new Cargo();
LoadManifest.cargoList[i].name = sc.next();
LoadManifest.cargoList[i].weight = sc.nextDouble();
}
CargoSorter.cargoSorter(LoadManifest.cargoList);
//计算总重量
double totalWeight = 0;
for(int i = 0; i < Flight.n; i++){
totalWeight += LoadManifest.cargoList[i].weight;
}
// int index = Flight.n - 1;
// if(totalWeight > Flight.maxWeight){
// while(totalWeight > Flight.maxWeight && index >= 0){
// totalWeight -= LoadManifest.cargoList[index].weight;
// index--;
// }
// }
//输出结果并且判断是否超重
for(int i = 0;i < Flight.n;i++){
System.out.println("货物[" + LoadManifest.cargoList[i].name + " " + "重量:" + LoadManifest.cargoList[i].weight + "kg]");
}
System.out.println("总重量: " + totalWeight + "kg / " + "最大载重: " + Flight.maxWeight + "kg");
if(totalWeight > Flight.maxWeight){
System.out.println("警告:严重超载");
} else{
System.out.println("配载状态:正常");
}
}
//货物
static class Cargo{
String name;
double weight;
}
//航班
class Flight{
static String flightNo;
static double maxWeight;
static int n;
}
//航班货物装载清单
class LoadManifest{
static Cargo[] cargoList;
}
//货物排序
static class CargoSorter{
public static void cargoSorter(Cargo[] cargoList){
Cargo cargoTerm = new Cargo();
for(int i = 0;i < cargoList.length;i++){
for(int j = 0;j < cargoList.length - 1 - i;j++){
if(cargoList[j].weight < cargoList[j + 1].weight){
cargoTerm = cargoList[j];
cargoList[j] = cargoList[j + 1];
cargoList[j + 1] = cargoTerm;
}
}
}
}
}
}