Как исправить вывод так, что большие круизы делегируются 2 грузчикам?

86
9

Я должен написать программу, в которой в качестве входных данных будет указано число круизов в виде целого числа, за которым следует список круизов, которые прибудут в этот день.

Программа выведет

    Количество круизов Количество больших круизов Количество необходимых погрузчиков Необходимое количество переработанных погрузчиков График размещения загрузчика График распределения переработанного погрузчика.

В данной ситуации большие круизы - это те, которые начинаются с символа "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()));
}
}
}
}

спросил(а) 2019-02-16T09:34:00+03:00 1 год, 4 месяца назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема