Java Do..当循环不断重复时,扫描仪问题
您好,我是Java新手,我发现了一个自己无法解决的障碍 一切都很好,直到我输入一些字母而不是数字,然后这样做..而循环不断重复自己 经过一些搜索后,我想这可能是扫描仪缓冲区的问题,因为我应该在每次循环之前用Java Do..当循环不断重复时,扫描仪问题,java,loops,do-while,Java,Loops,Do While,您好,我是Java新手,我发现了一个自己无法解决的障碍 一切都很好,直到我输入一些字母而不是数字,然后这样做..而循环不断重复自己 经过一些搜索后,我想这可能是扫描仪缓冲区的问题,因为我应该在每次循环之前用input.nextLine()清除它,但我真的不知道应该把它放在代码中的什么位置 谢谢您的帮助。只有当输入.hasNextDouble()为真时,您才实际使用扫描仪中的数据 目前,如果A==0并且缓冲区中存在非数字数据,那么您确实会无限期地循环 您需要在所有控制路径上使用缓冲区中的数据。特别
input.nextLine()
清除它,但我真的不知道应该把它放在代码中的什么位置
谢谢您的帮助。只有当输入.hasNextDouble()
为真时,您才实际使用扫描仪中的数据
目前,如果A==0
并且缓冲区中存在非数字数据,那么您确实会无限期地循环
您需要在所有控制路径上使用缓冲区中的数据。特别是,如果缓冲区中有非数字的内容,则需要使用并立即丢弃它:input.next()
就足够了。似乎您只想得到A的值,它不应该等于0。阅读评论
do {
System.out.println("Set the A param: ");
if(input.hasNextDouble() == true) {
A = input.nextDouble();
if(A == 0) {
System.out.println("Param A cannot be a 0!");
}
} else if(input.hasNextDouble() == false) {
System.out.println("Param A must be a number!");
}
} while(A == 0 || input.hasNextDouble() == false);
首先,您不应该在中写入相反的检查,否则如果。只需使用else
。您不应该检查==true
,因为该值已经是布尔值
现在,对于无限循环问题,如果为false,则意味着用户输入了错误的内容(忽略潜在的流结束问题)。在这种情况下,您需要放弃错误的输入,最好通过调用
Java命名约定规定变量应该以小写字母开头,因此A
应该是A
然后,您的代码变成:
double A=0;
do {
System.out.println("Set the A param: ");
if(input.hasNextDouble() == true) { //check for valid value
A = input.nextDouble();
if(A == 0) {
System.out.println("Param A cannot be a 0!");
}
} else{ // no valid value found , print msg and jump over the previous input
input.nextLine();
System.out.println("Param A must be a number!");
}
} while(A == 0); // just check , if the desired value is received
// previously input.hasNextDouble() had no use cuz we already
// checked no double value found so will be false, don't use it
谢谢你的两个答案,在我写了这篇文章之后:
double a = 0;
do {
System.out.println("Set the A param: ");
if (input.hasNextDouble()) {
a = input.nextDouble();
if (a == 0) {
System.out.println("Param A cannot be a 0!");
}
} else {
input.nextLine(); // discard bad input
System.out.println("Param A must be a number!");
}
} while (a == 0);
这很有效,但多亏了第二个答案,我现在知道如何做得更好了
再次感谢你们两位。您想做什么?请描述我,然后我将帮助您在hastnextdouble()返回false时,不能使用nextDouble()
跳过错误输入。这只会抛出一个inputmaschException
。老兄,你不必发布你的答案,因为答案已经在这里了,所以只需点击答案旁边的勾号就可以接受你喜欢的答案。是的,但这仍然是一个答案。一个好的。我投了更高的票。这个答案也是高质量的。
do
{
System.out.println("Podaj wartość parametru A: ");
if(input.hasNextDouble() == true)
{
A = input.nextDouble();
if(A == 0)
{
System.out.println("Parametr A nie może być zerem!");
}
}
else if(input.hasNextDouble() == false)
{
System.out.println("Parametr A musi być liczbą!");
input.nextLine();
A = 0;
}
} while(A == 0);