捕获Java输入中的非双精度
我正在尝试验证学校作业的用户输入,其中负数或除double之外的任何数字都会导致循环重试。代码的其余部分对输入做了一些简单的运算,这些都是功能性的,所以我没有包括它,但这里是我到目前为止的输入验证。现在输入一个负数就是我想让它做的,但是输入一个不同的字符会导致无限循环 “无效 输入墙高度(英尺):“ 为什么这条路不通呢!scnr.hasNextDouble()异常抛出,当负数异常按预期工作时,为什么它会无限重复?我非常感谢你能为我提供的任何帮助,谢谢捕获Java输入中的非双精度,java,validation,try-catch,do-while,Java,Validation,Try Catch,Do While,我正在尝试验证学校作业的用户输入,其中负数或除double之外的任何数字都会导致循环重试。代码的其余部分对输入做了一些简单的运算,这些都是功能性的,所以我没有包括它,但这里是我到目前为止的输入验证。现在输入一个负数就是我想让它做的,但是输入一个不同的字符会导致无限循环 “无效 输入墙高度(英尺):“ 为什么这条路不通呢!scnr.hasNextDouble()异常抛出,当负数异常按预期工作时,为什么它会无限重复?我非常感谢你能为我提供的任何帮助,谢谢 public static void mai
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
double wallHeight = 0.0;
double wallWidth = 0.0;
double wallArea = 0.0;
double gallonsPaintNeeded = 0.0;
final double squareFeetPerGallons = 350.0;
// Implement a do-while loop to ensure input is valid
do {
try {
System.out.println("Enter wall height (feet): ");
wallHeight = scnr.nextDouble();
if (wallHeight <= 0) {
throw new Exception("Enter positive number");
}
else if (!scnr.hasNextDouble()) {
throw new Exception("Invalid input.");
}
}
catch(Exception excpt){
System.out.println(excpt.getMessage());
}
}while(wallHeight <= 0 || !scnr.hasNextDouble());
publicstaticvoidmain(字符串[]args){
扫描仪scnr=新扫描仪(System.in);
双壁高度=0.0;
双壁宽=0.0;
双瓦莱拉=0.0;
需要两加仑的油漆=0.0;
最终双平方英尺Pergallons=350.0;
//实现do-while循环以确保输入有效
做{
试一试{
System.out.println(“输入墙高(英尺):”;
墙高=scnr.nextDouble();
if(wallHeight您需要确保输入是双精度的,而不是字符串或整数。翻转if和else if的顺序,首先检查输入是否为双精度,然后才检查是否为负
或者,您可以使用验证输入。下面的正则表达式检查0到9之间的任何数字,后跟句点和0到9之间的另一个数字。请注意,它也适用于多个数字
^[0-9]+\.[0-9]+$
只需使用String.matches(regex)
验证您的输入
如果您想澄清每个符号的作用:
^
表示一行的开头,意思是前面没有任何内容。
同样地,$
表示一行的结束,这意味着后面不会有任何内容
[0-9]
是有效字符的范围,在本例中为0到9
+
表示这些字符中可以有多个(多个数字)
然后我们有句号,伴随着转义字符\
,因为在正则表达式中,
本身意味着“任何字符”,因此我们必须转义它
如果您想更多地玩和了解Regex,我建议您访问。欢迎来到Stack Overflow。在提出任何问题之前,您需要搜索已经存在的Q/a…like。另外请注意,这里的社区并没有取代其他优秀的在线资源,如教程。有关参考,请参阅。