如何修改此代码,以便仅在遍历整个列表后才打印出无效消息。我当前的问题是,每当没有匹配项时,它就会打印出这些消息。这不是我打算要做的。
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.
答案 0 :(得分:1)
在for循环的顶部,您可以执行以下操作以确定是否有任何工作计划包含输入的客户。随后,您可以将 PipelineOptions po = ???
List<Configuration> configs = ???
HadoopFileSystemOptions options = po.as(HadoopFileSystemOptions.class);
options.setHdfsConfiguration(configs);
org.apache.beam.sdk.io.FileSystems.setDefaultPipelineOptions(options);
替换为clientSchedules并删除条件depotName.getWorkSchedules()
,因为我们知道它们都是同一客户的日程表。
请注意,该问题未包含完整的SSCCE,缺少许多需要编译的基本类,因此可能会出现意外的编译错误。
if (client.equals(ws.getClient()))
答案 1 :(得分:1)
消息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);
}
答案 2 :(得分:0)
在循环外声明一个布尔值,并将其设置为else if条件,并在else中检查此布尔值,例如
else if (condition && !booleanVariable) {
System.out.printf("%nPlease enter a valid client.%n");
booleanVariable = true;
}