Как исправить вывод так, что большие круизы делегируются 2 грузчикам? - PullRequest
0 голосов
/ 16 февраля 2019

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

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

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

В данной ситуации большие круизы начинаются ссимвол «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()));
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...