[英]Nested For-each loop printing for every item in Arraylist
如何修改此代碼,使其僅在首先遍歷整個列表后才打印出無效消息。 我目前的問題是每次沒有匹配時它都會打印出這些消息。 這不是我打算做的。
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);
}
當前的 output if I enter a Incorrect name 如下
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.
在 for 循環的頂部,您可以執行以下操作來確定是否有任何工作計划包含輸入的客戶。 您隨后可以用 clientSchedules 替換depotName.getWorkSchedules()
並刪除條件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;
}
消息, Please enter a valid client
應該打印在for
循環之外。 執行以下操作:
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);
}
在循環外聲明一個 boolean 並將其設置為 else if 條件,並在 else if 中檢查此 boolean,例如
else if (condition && !booleanVariable) {
System.out.printf("%nPlease enter a valid client.%n");
booleanVariable = true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.