我想知道如何以某种方式执行此操作,以便用户可以选择不输入整数,并且如果用户没有输入整数,它将捕获它并重新提示它们而不结束程序。我需要扫描程序接受int和string类型。有没有办法做到这一点?或者解决它?
/* The following method asks a user to input a series of integers.
* The user can stop at any time buy entering "quit"
*/
public static void readSeries()
{
int integer;
Scanner scan = new Scanner(System.in);
System.out.println("Please enter a series of integers. If you wish to stop, enter 'quit'. ");
System.out.println();
try{
while(true)
{
System.out.println("Enter an integer: "); // asks user to enter an integer
integer = scan.nextInt();
if(scan.equals (0)){break;} // allows user to stop entering numbers
}
} catch(NumberFormatException nfe){System.out.println("Invalid Entry!");}
}
}
答案 0 :(得分:3)
首先打破你的要求。
首先,您需要能够从用户读取文本和int
值。您需要能够这样做,因为您需要检查"退出"条件。因此,您应该使用Scanner#nextInt
代替Scanner#nextLine
,而不是使用String input = scan.nextLine();
。
int
接下来,您需要检查用户的输入,看看它是否符合"退出"是否有条件。如果没有,您需要尝试将输入转换为Integer value = null;
//...
if (escape.equalsIgnoreCase(input)) {
exit = true;
} else {
try {
value = Integer.parseInt(input);
} catch (NumberFormatException exp) {
System.out.println("!! " + input + " is not a valid int value");
}
}
值并处理可能发生的任何转换问题
do-while
好的,一旦你有了这个工作正常,你需要将它包装在一个循环的一边,现在,因为我们必须至少循环一次,Integer value = null;
boolean exit = false;
do {
System.out.print(prompt);
String input = scanner.nextLine();
if (escape.equalsIgnoreCase(input)) {
exit = true;
} else {
try {
value = Integer.parseInt(input);
} catch (NumberFormatException exp) {
System.out.println("!! " + input + " is not a valid int value");
}
}
} while (value == null && !exit);
是合适的(检查退出条件循环结束时循环而不是开始)
value
因此,当循环存在时,null
将是有效整数或null
。您可能在想为什么这很重要。 int
让我们知道他们不再是来自用户的有效值,否则您需要提出public Integer promptForInt(String prompt, Scanner scanner, String escape) {
Integer value = null;
boolean exit = false;
do {
System.out.print(prompt);
String input = scanner.nextLine();
if (escape.equalsIgnoreCase(input)) {
exit = true;
} else {
try {
value = Integer.parseInt(input);
} catch (NumberFormatException exp) {
System.out.println("!! " + input + " is not a valid int value");
}
}
} while (value == null && !exit);
return value;
}
退出值,但如果用户选择将该值用作他们的值,会发生什么输入
好的,现在,我们需要让用户多次这样做,所以,这需要一个方法!
List<Integer> values = new ArrayList<>(25);
Integer value = null;
do {
value = promptForInt("Please enter a series of integers. If you wish to stop, enter 'quit'. ", new Scanner(System.in), "quit");
if (value != null) {
values.add(value);
}
} while (value != null);
System.out.println("You have input " + values.size() + " valid integers");
现在,您只需使用另一个循环就可以根据需要多次调用该方法
/* Firefox still caches the manifest with these headers */
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");