我在WHILE语句中嵌套了一个IF ELSE语句,但我很困惑为什么在ELSE之前解释WHILE(当IF失败时)。要求用户输入1-10(含)的数字。如果数字在该范围内,则程序结束。如果它超出该范围,我想显示错误,然后提示他们再次输入数字。
如果我把“提示”放在WHILE之前,它会很好用,但是我必须将它再次放在ELSE语句中,以便它再次出现。我找到了这个question,但它似乎没有回答我遇到的问题。我当然是Java新手,所以如果我遗漏了Java的一些基本方面,我会道歉。
import java.util.Scanner;
public class Rangecheck {
private static int userNumber; //Number input by user
private static boolean numberOK = false; //Final check if number is valid
//String that will be reused in the DO statement
private static String enterNumber = "Please enter a number from 1 to 10: ";
public static void main(String[] args) {
//Print string
while(!numberOK) // Repeat until the number is OK
{ System.out.println(enterNumber);
Scanner input_UserNumber = new Scanner(System.in); //input integer
userNumber = input_UserNumber.nextInt();
if (10>= userNumber && userNumber >= 1) //Check if 10>=input>=1
{
/*
** If number was valid, congratulate the user and mark numberOK true
*/
System.out.println("Good job! The number you entered is "+userNumber+".");
numberOK = true; // Congratulate user / exit loop if successful
}
else ; //if (10 < userNumber && userNumber < 1)
{
System.err.println("The number entered was not between 1 and 10!");
System.err.print(enterNumber); // Error; user retries until successful
}
}
}
}
我希望在System.err.println()
语句中评估else
,然后评估while
,以便返回:
The number entered was not between 1 and 10!
Please enter a number between 1 and 10:
我通过在while
之前放入enterNumber然后再放一秒来解决这个问题
紧接错误后的println
语句中的else
。它回归了我的期望,但我相信我从根本上误解了一些东西。
答案 0 :(得分:0)
在else
语句之前重复while
语句。但有时候Stream
会出现问题。 Stream
不一定立即打印数据。特别是在使用两个不同的流的情况下,打印输出数据的顺序可以是交错的。
您可以使用:
System.err.flush();
确保数据首先写入控制台。
答案 1 :(得分:0)
假设您有以下代码:
while (whileCondition) {
//Inside while, before if
if (ifCondition) {
//Inside if
} else {
//Inside else
}
}
此循环将重复执行,直到whileCondition
变为false
。每当ifCondition
为true
时,if
内的操作都将被执行,否则else
内的操作将被执行。
回到你的问题:
你的
行System.out.println(enterNumber);
位于while
的开头。因此,在代码进入if
之前,控制台上会显示enterNumber
的内容。之后,您的if
会被评估,如果您输入,请说出22,if
的条件为false
,else
的内容块将被评估。
答案 2 :(得分:0)
在else body中添加此语句:
numberOk=false;