gpt4 book ai didi

java - 使用 Scanner 时确保用户输入是单个整数

转载 作者:行者123 更新时间:2023-11-30 02:39:37 25 4
gpt4 key购买 nike

期望的结果:

  • 接受用户输入
  • 确保用户一次仅输入 1 个整数值
  • 将该整数存储在变量中

我尝试通过执行以下操作来实现此目的:

  • 将用户输入存储在变量中
  • 计算变量中的标记数量
  • 如果没有一个 token ,则拒绝输入
  • 如果输入不是数据类型 int ,拒绝输入

代码:

    Scanner scan = new Scanner(System.in);

System.out.println("Enter an integer:");
String myString = scan.nextLine();
int tokens = new StringTokenizer(myString, " ").countTokens();

while (tokens != 1 && !scan.hasNextInt()) {
System.out.println("Enter a single integer");
myString = scanner.nextLine();
tokens = new StringTokenizer(myString, " ").countTokens();
}

int number = scanner.nextInt();
System.out.println(number);

这段代码充满了漏洞。输出不一致且不受欢迎。它通常以抛出 java.util.InputMismatchException 结束。错误,表明它尝试存储的值不是 int 。我经历过在一个循环后和多个循环后发生此错误,即使输入类型和数量相同(例如 2 个字符串)也是如此。

我应该继续使用这段代码,还是应该尝试从不同的角度解决这个问题?

最佳答案

我对你的程序做了一些修改。我的方法是接受一行输入。如果输入包含多个标记,请要求用户重新输入。如果只有一个输入,则检查输入是否为整数,如果不是,则用户重新输入。

似乎对我有用:

    Scanner scanner = new Scanner(System.in);

String myString;
int tokens;
int number;

do {
System.out.println("Enter a single integer");
myString = scanner.nextLine();
tokens = new StringTokenizer(myString, " ").countTokens();
try {
number = Integer.parseInt(myString);
} catch(NumberFormatException e) {
tokens = 0;
number = -1;
}
}while (tokens != 1);
scanner.close();

System.out.println(number);
<小时/>

Update: Alternate approach without using StringTokenizer

    Scanner scanner = new Scanner(System.in);

String myString;
boolean validInput;
int number;

do {
System.out.println("Enter a single integer");
myString = scanner.nextLine();
try {
number = Integer.parseInt(myString);
validInput = true;
} catch(NumberFormatException e) {
validInput = false;
number = -1;
}
}while (validInput == false);
scanner.close();

System.out.println(number);
<小时/>

Update 2: Another approach using regular expressions to validate input before accepting it.

Scanner 允许我们使用正则表达式来匹配输入。如果输入与模式匹配,则可以使用它来接受输入。否则,丢弃它并要求用户再次提供输入。

代码如下:

    Scanner scanner = new Scanner(System.in);
System.out.println("Enter a single integer");

String integerPattern = "[+-]?\\d+$"; // positive or negative and digits only

while(scanner.hasNext(integerPattern) == false) {
String x = scanner.nextLine();// capture and discard input.
System.out.println("Enter a single integer. '" + x + "' is an invalid input.");
}
int number = scanner.nextInt(); // capture input only if it matches pattern.
scanner.close();
System.out.println("number: " + number);
<小时/>

希望这有帮助!

关于java - 使用 Scanner 时确保用户输入是单个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42129169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com