Вложенный для каждого l oop печать для каждого элемента в Arraylist - PullRequest
0 голосов
/ 22 апреля 2020

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

public void assignSchedule(Depot depotName) throws Exception {
        String client, driver;
        Boolean exit = false;

        do {
            System.out.printf("%-10s %-10s %10s %n", "Client", "Start Date", "End Date");
            depotName.listWorkSchedulue();
            System.out.print("Enter the client name for the schedule you wish to assign: ");
            client = DepotSystem.input.nextLine();

            for (WorkSchedule ws : depotName.getWorkSchedules())
            {
                if (client.equals(ws.getClient()))
                {
                    System.out.printf("%n%20s%n", "Drivers");
                    depotName.listDrivers();
                    System.out.print("Which Driver do you want to assign this to: ");
                    driver = DepotSystem.input.nextLine();

                    for (Driver drivers : depotName.getDrivers())
                    {
                        if (driver.equals(drivers.userName) && !drivers.assigned)
                        {
                            System.out.printf("%nThe work schedule for client %s is now assigned to %s%n ", client,
                                driver);
                            depotName.getDriver(driver).setSchedule(depotName.getWorkSchedule(client));
                            drivers.setAssigned(true);
                            exit = true;
                        } else if ((!driver.equals(drivers.userName) && drivers.assigned)) {
                            System.out.printf("%nEither not a valid driver or Driver is already assigned a Job.%n");
                        }
                    }
                } else if (!client.equals(ws.getClient())) {
                    System.out.printf("%nPlease enter a valid client.%n");
                }
            }
        } while (!exit);
    }

Текущий вывод этого сообщения, если я ввожу неверное имя, выглядит следующим образом

Client     Start Date   End Date 
Gary       2020-04-25   2020-04-27
Bob        2020-05-05   2020-05-06
Enter the client name for the schedule you wish to assign: f

Please enter a valid client.

Please enter a valid client.

Вот как я бы хотел, чтобы оно работало, когда я вводил неправильное имя.

Client     Start Date   End Date 
Gary       2020-04-25   2020-04-27
Bob        2020-05-05   2020-05-06
Enter the client name for the schedule you wish to assign: f

Please enter a valid client.

Ответы [ 3 ]

1 голос
/ 22 апреля 2020

В верхней части для l oop вы можете сделать следующее, чтобы определить, содержит ли какой-либо из рабочих графиков введенный клиент. Впоследствии вы можете заменить depotName.getWorkSchedules() на clientSchedules и удалить условие if (client.equals(ws.getClient())), поскольку мы знаем, что они все расписания с одним и тем же клиентом.

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

            List<WorkSchedule> clientSchedules = depotName.getWorkSchedules().stream()
                            .filter(schedule -> client.equals(schedule.getClient()))
                            .collect(Collectors.toList());

            if (clientSchedules.isEmpty()) {
                System.out.printf("%nPlease enter a valid client.%n");
                continue;
            }
1 голос
/ 22 апреля 2020

Сообщение Please enter a valid client должно быть напечатано за пределами for l oop. Сделайте это следующим образом:

public void assignSchedule(Depot depotName) throws Exception {
    String client, driver;
    Boolean exit = false, validClient;

    do {
        System.out.printf("%-10s %-10s %10s %n", "Client", "Start Date", "End Date");
        depotName.listWorkSchedulue();
        System.out.print("Enter the client name for the schedule you wish to assign: ");
        client = DepotSystem.input.nextLine();

        for (WorkSchedule ws : depotName.getWorkSchedules()) {
            if (client.equals(ws.getClient())) {
                validClient = true;
                System.out.printf("%n%20s%n", "Drivers");
                depotName.listDrivers();
                System.out.print("Which Driver do you want to assign this to: ");
                driver = DepotSystem.input.nextLine();

                for (Driver drivers : depotName.getDrivers()) {
                    if (driver.equals(drivers.userName) && !drivers.assigned) {
                        System.out.printf("%nThe work schedule for client %s is now assigned to %s%n ", client,
                                driver);
                        depotName.getDriver(driver).setSchedule(depotName.getWorkSchedule(client));
                        drivers.setAssigned(true);
                        exit = true;
                    } else if ((!driver.equals(drivers.userName) && drivers.assigned)) {
                        System.out.printf("%nEither not a valid driver or Driver is already assigned a Job.%n");
                    }
                }
            } else {
                validClient = false;
            }
        }
        if (!validClient) {
            System.out.printf("%nPlease enter a valid client.%n");
        }
    } while (!exit);
}
0 голосов
/ 22 апреля 2020

Объявите логическое значение вне l oop и установите его в else if условие, а также проверьте это логическое значение в else if, что-то вроде

 else if (condition && !booleanVariable) {
          System.out.printf("%nPlease enter a valid client.%n");
           booleanVariable = true;
           }
...