通过错误检查获取 Scanner 输入的更简洁的方法?
More succinct way to get Scanner input with error checking?
只是想知道是否有更好的方法来做这件事,因为它写了很多。
boolean isInputValid = false;
do {
System.out.print("Input: ");
final String input = sc.nextLine();
try {
age = Integer.parseInt(input);
} catch (NumberFormatException e) {
System.out.println("Invalid input. Try again");
continue;
}
if (input < 0 || 10 < input) {
System.out.println("Number outside of range.");
} else {
isInputValid = true;
}
} while (!isInputValid);
好吧,有些东西乍一看可以省略,但没有太多要删除的。
- 减少单行中的整数解析并删除
input
变量。
- 将
isInputValid
更改为其否定 isInputInvalid
以删除 while
子句中的 else 、布尔赋值和否定。
- 将
if
移到 try
子句中以增加冗余并删除 continue
语句。
boolean isInputInvalid = true;
do {
System.out.print("Input: ");
try {
age = Integer.parseInt( sc.nextLine());
isInputInvalid = input < 0 || 10 < input;
if (isInputInvalid) {
System.out.println("Number outside of range.");
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Try again");
}
} while (isInputInvalid);
好吧,乍一看,我可以看出您正在将不正确的字符串变量类型与整数(您的输入变量)进行比较,我假设您是想比较年龄。您还应该将 if 语句放在 try/catch 中,以确保按预期进行处理(如果抛出 NFE,将它放在 try/catch 之外也没有意义,它不会得到 运行 无论如何)。
boolean isInputValid = true;
do {
System.out.print("Input: ");
final String input = sc.nextLine();
try {
age = Integer.parseInt(input);
if (age < 0 || 10 < age) {
System.out.println("Number outside of range.");
isInputValid = false;
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Try again");
continue;
}
} while (isInputValid);
只是想知道是否有更好的方法来做这件事,因为它写了很多。
boolean isInputValid = false;
do {
System.out.print("Input: ");
final String input = sc.nextLine();
try {
age = Integer.parseInt(input);
} catch (NumberFormatException e) {
System.out.println("Invalid input. Try again");
continue;
}
if (input < 0 || 10 < input) {
System.out.println("Number outside of range.");
} else {
isInputValid = true;
}
} while (!isInputValid);
好吧,有些东西乍一看可以省略,但没有太多要删除的。
- 减少单行中的整数解析并删除
input
变量。 - 将
isInputValid
更改为其否定isInputInvalid
以删除while
子句中的 else 、布尔赋值和否定。 - 将
if
移到try
子句中以增加冗余并删除continue
语句。
boolean isInputInvalid = true;
do {
System.out.print("Input: ");
try {
age = Integer.parseInt( sc.nextLine());
isInputInvalid = input < 0 || 10 < input;
if (isInputInvalid) {
System.out.println("Number outside of range.");
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Try again");
}
} while (isInputInvalid);
好吧,乍一看,我可以看出您正在将不正确的字符串变量类型与整数(您的输入变量)进行比较,我假设您是想比较年龄。您还应该将 if 语句放在 try/catch 中,以确保按预期进行处理(如果抛出 NFE,将它放在 try/catch 之外也没有意义,它不会得到 运行 无论如何)。
boolean isInputValid = true;
do {
System.out.print("Input: ");
final String input = sc.nextLine();
try {
age = Integer.parseInt(input);
if (age < 0 || 10 < age) {
System.out.println("Number outside of range.");
isInputValid = false;
}
} catch (NumberFormatException e) {
System.out.println("Invalid input. Try again");
continue;
}
} while (isInputValid);