Мне необходимо написать программу, в которой число рейсов в расписании читается как целое число, за которым следует список рейсов, прибывающих в этот день.
Программа выведет
- Количество круизов
- Количество больших круизов
- Количество необходимых погрузчиков
- Необходимое количество переработанных погрузчиков
- График распределения погрузчиков
- График распределения переработанных погрузчиков.
В данной ситуации большие круизы начинаются ссимвол «B» в начале, например, B111, в то время как регулярные круизы могут начинаться с любых других символов.Большие круизы требуют 60 минут и 2 погрузчика, чтобы закончить загрузку, в то время как регулярные круизы требуют 30 минут и 1 погрузчик, чтобы закончить загрузку.
С учетом этого ввода:
6
A1111 0900
B1112 0901
B1113 0940
C2030 1000
B1115 1030
D1115 1130
Я должен достичь этого результата:
Loader 1 serves:
A1111@0900
B1113@0940
D1115@1130
Loader 2 serves:
B1112@0901
B1115@1030
Loader 3 serves:
B1112@0901
B1115@1030
Loader 4 serves:
B1113@0940
Loader 5 serves:
C2030@1000
Однако мой код выводит только
Loader 1 serves:
A111@0900
B1113@0940
D1115@1130
Loader 2 serves:
B1112@0901
B1115@1030
Loader 3 serves:
C2030@1000
Могу ли я узнать, как его улучшить?
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class Main {
public static void main(String[] args){
SimpleDateFormat format = new SimpleDateFormat("HHmm");
Date lastTimingL1 = Calendar.getInstance().getTime();
Date lastTimingL2 = Calendar.getInstance().getTime();
Date nextTiming = Calendar.getInstance().getTime();
Boolean isBig = false;
Boolean debug = false;
int numOfCruises;
Scanner sc = new Scanner(System.in);
numOfCruises = sc.nextInt();
Cruise[] cruises = new Cruise[numOfCruises]; //creates array of cruises
ArrayList<Loader> loaders = new ArrayList<Loader>();
//Add all cruises to list
for (int i = 0; i < numOfCruises; i++) {
String cruiseName = sc.next();
try{
String cruiseTimeString = sc.next();
if (cruiseTimeString.equals("0")) cruiseTimeString = "0000";
Date cruiseTime = format.parse(cruiseTimeString);
cruises[i] = new Cruise(cruiseName, cruiseTime);
} catch (ParseException ex) {
System.out.println("Please enter the cruise time in the correct format HHmm!");
}
}
if (debug) System.out.println("Number of cruises added = " +
cruises.length);
for (int i = 0; i < cruises.length; i++) {
if (cruises[i].getName().charAt(0) == 'B') {
isBig = true;
}
if (debug) System.out.println("currently at cruise " + cruises[i].getName() + " of arrivalTime " + format.format(cruises[i].getArrivalTime()));
if (i == 0) {
Loader loader = new Loader();
loader.getCruises().add(cruises[i]);
loader.setLastTiming(cruises[i].getArrivalTime());
loaders.add(loader);
if (isBig) {
Loader secondLoader = new Loader();
secondLoader.getCruises().add(cruises[i]);
secondLoader.setLastTiming(cruises[i].getArrivalTime());
loaders.add(secondLoader);
isBig = false;
}
//if (debug) System.out.println("lastTiming for loader " + loaders.size() + " = " + format.format(loaders.get(0).getLastTiming()));
}
if (i + 1 < cruises.length) {
nextTiming = cruises[i+1].getArrivalTime();
//if (debug) System.out.println("new nextTime retrieved from cruise " + (i+1));
}
if (i + 1 == cruises.length) {
nextTiming = cruises[i].getArrivalTime();
break;
}
for (int j = 0; j < loaders.size(); j++) {
if (isBig) {
if (loaders.get(j).getCruises().get(loaders.get(j).getCruises().size() - 1).getName().charAt(0) == 'B') {
if ((nextTiming.getTime() - loaders.get(j).getLastTiming().getTime()) / (1000 * 60) > 60) {
loaders.get(j).getCruises().add(cruises[i+1]);
loaders.get(j).setLastTiming(cruises[i+1].getArrivalTime());
break;
} else if (j + 1 == loaders.size()) {
Loader nextLoader = new Loader();
nextLoader.getCruises().add(cruises[i+1]);
nextLoader.setLastTiming(cruises[i+1].getArrivalTime());
loaders.add(nextLoader);
if (debug) System.out.println("There are now " + loaders.size() + " loaders.");
break;
} else {
continue;
}
} else if ((nextTiming.getTime() - loaders.get(j).getLastTiming().getTime()) / (1000 * 60) > 30) {
loaders.get(j).getCruises().add(cruises[i+1]);
loaders.get(j).setLastTiming(cruises[i+1].getArrivalTime());
break;
} else if (j + 1 == loaders.size()) {
Loader nextLoader = new Loader();
nextLoader.getCruises().add(cruises[i+1]);
nextLoader.setLastTiming(cruises[i+1].getArrivalTime());
loaders.add(nextLoader);
if (debug) System.out.println("There are now " + loaders.size() + " loaders.");
break;
}
}
if ((nextTiming.getTime() - loaders.get(j).getLastTiming().getTime()) / (1000 * 60) > 30) {
loaders.get(j).getCruises().add(cruises[i+1]);
loaders.get(j).setLastTiming(cruises[i+1].getArrivalTime());
break;
} else if (j + 1 == loaders.size()) {
Loader nextLoader = new Loader();
nextLoader.getCruises().add(cruises[i+1]);
nextLoader.setLastTiming(cruises[i+1].getArrivalTime());
loaders.add(nextLoader);
if (debug) System.out.println("There are now " + loaders.size() + " loaders.");
break;
}
}
}
for (int i = 0; i < loaders.size(); i++) {
System.out.println("Loader " + (i+1) + " serves:");
for (int j = 0; j < loaders.get(i).getCruises().size(); j++) {
System.out.println(" " +
loaders.get(i).getCruises().get(j).getName() + "@" +
format.format(loaders.get(i).getCruises().get(j).getArrivalTime()));
}
}
}
}