在评估ELSE之前重复

时间:2014-09-19 01:13:58

标签: java

我在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。它回归了我的期望,但我相信我从根本上误解了一些东西。

3 个答案:

答案 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。每当ifConditiontrue时,if内的操作都将被执行,否则else内的操作将被执行。

回到你的问题:

你的

System.out.println(enterNumber);

位于while的开头。因此,在代码进入if之前,控制台上会显示enterNumber的内容。之后,您的if会被评估,如果您输入,请说出22,if的条件为falseelse的内容块将被评估。

答案 2 :(得分:0)

在else body中添加此语句:

numberOk=false;