gpt4 book ai didi

java - 如何在使用扫描仪收集输入时验证用户输入

转载 作者:行者123 更新时间:2023-11-29 06:36:18 26 4
gpt4 key购买 nike

描述

我的目标是要求用户仅对那些触发异常的条目提供输入,不包括那些令人满意的输入请求

例子

注意:inputScanner

的实例
public Fluid addFluid() {
do{
try{
System.out.println("Please enter fluids ID: ");
f.setFluidID(input.next());
System.out.println("Please enter fluids molecular weight: ");
f.setMolecularWeight(input.nextDouble());
System.out.println("Please enter fluids temperature: ");
f.setTemperature(input.nextDouble());
error = false;
}
catch(InputMismatchException e){
System.out.println("Error! Please provide the right input.");
// if exception happens on input for setMolecularWeight(input.nextDouble()); skip print statement for fluids ID and f.setFluidID(input.next());
}
}
while(error != false);
getFluid().add(f);
System.out.println(getFluid());
return f;
}

输出

Please enter fluids ID: 
propane
Please enter fluids molecular weight:
a
Error! Please provide the right input.
Please enter fluids ID: // how to exclude this print statement
Please enter fluids molecular weight:

有没有一种方法可以使用 if/else 结构来做到这一点。我想避免对每个输入运算符执行 try/catch 操作。非常感谢。

最佳答案

简答:

在调用 nextDouble() 后,您需要清除扫描器上的缓冲区,因为您的 InputStream 将包含换行符 \n.

input.next();input.nextLine(); 添加到 catch block 的末尾应该可以工作跳过额外的 \n

(参见 java.util.Scanner : why my nextDouble() does not prompt?)

说明:

  • 尽管 nextDouble 会在用户输入换行符 \n 之前阻止执行,但它只会从 Scanner 的缓冲区返回有效的字符字符(将正确解析为 double 的字符)。这意味着
  • 如果您输入的内容未解析为 double,那些无效字符仍会保留在缓冲区中。当您尝试再次读取 nextDouble 时,它只会对现有输入重复相同的过程,从而导致无限循环。
  • 因此,您需要在继续之前“清除”缓冲区。由于似乎没有这种方法,您只需要将 Scanner 推进到缓冲区的末尾。在这种情况下,input.next(); 就足够了。

(感谢用户 jonhopkins 我无耻地从 his answer 获取的代码)

System.out.println("Please enter fluids ID: ");
while (true) {
try {
f.setFluidID(input.next());
break; // break out of the current loop
} catch (InputMismatchException e) {
System.out.println("Error! Please provide the right input.");
input.next();
}
}

System.out.println("Please enter fluids molecular weight: ");
while (true) {
try {
f.setMolecularWeight(input.nextDouble());
break; // break out of the current loop
} catch (InputMismatchException e) {
System.out.println("Error! Please provide the right input.");
input.next();
}
}

System.out.println("Please enter fluids temperature: ");
while (true) {
try {
f.setTemperature(input.nextDouble());
break; // break out of the current loop
} catch (InputMismatchException e) {
System.out.println("Error! Please provide the right input.");
input.next();
}
}

注意:在读取第二个和第三个输入之前,您甚至可能需要额外的 input.next() 调用(我没有对此进行测试)。

关于java - 如何在使用扫描仪收集输入时验证用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146084/

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