为什么我的循环不能满足特定条件?

时间:2015-08-26 13:54:50

标签: java loops

问题:

每当我使用while循环向用户询问input n次时,它会超过该条件,忽略它,然后循环一段时间。

例如,如果我希望我的while循环执行5次,它将执行6次。

它目前的作用:它首先要求: 输入数字0:直到它达到输入数字4.然而,它不是在数字4结束,而是继续要求数字5.总共有6个数字,从数字0到数字5。

我还应该补充一点:您可以输入@@来停止输入数字,然后它将退出该循环并对这些数字执行某些操作。

Launcher.java

/* Global Variables */
static final int MAXTIMESTOLOOP = 5;
static LinkedList<String> numberList = new LinkedList<String>();
static int totalNumbers = 0;

public static void main(String[] args) {
       Scanner input = new Scanner(System.in);
       String numberInput;

       System.out.print("Enter number " + totalNumbers + ". Type @@ to stop.");
       numberInput = input.next();

       while(!numberInput.equals("@@") && totalNumbers < MAXTIMESTOLOOP) {
             /* Add number to numberList */
             numberList.add(numberInput);
             totalNumbers++;
             System.out.print("Enter number " + totalNumbers + ". Type @@ to stop.");
             numberInput = input.next();

       }
}

意外输出

Enter number 0. Type @@ to stop. 5
Enter number 1. Type @@ to stop. 8
[..]
Enter number 4. Type @@ to stop. 12
Enter number 5. Type @@ to stop. 14

相反,我希望它停在第4位,因为那时它应该终止。

预期输出

Enter number 0. Type @@ to stop. 12
Enter number 1. Type @@ to stop. 4
[...]
Enter number 4. Type @@ to stop. 1

我希望它停在第4位,而不是继续排在第5位。但我似乎无法确定原因是什么原因。

可疑原因

调试代码后,我发现变量totalNumbers增加到5然后循环回来。我不明白为什么会这样,因为我有条件:totalNumbers < MAXTIMESTOLOOPwhile(0 < 5)

相同

2 个答案:

答案 0 :(得分:2)

在while循环之前输入第一个数字,但不会增加TOTALNUMBERS。在你的循环中,TOTALNUMBERS的持续条件&lt;当TOTALNUMBERS = 4时满足MAXTIMESTOLOOP,但在循环内增加,显示第5个条目提示。

我会修改循环以将测试条件移动到最后,并消除无关的输入。

   do {
         /* Add number to numberList */
          System.out.print("Enter number " + TOTALNUMBERS + ". Type @@ to stop.");
         numberInput = input.next();
         if (!numberInput.equals("@@")){
             numberList.add(numberInput);
             TOTALNUMBERS++;
         }
   }
   while (!numberInput.equals("@@") && TOTALNUMBERS < MAXTIMESTOLOOP);

答案 1 :(得分:2)

您可以尝试使用do-while循环,如下所示:

static final int MAXTIMESTOLOOP = 5;
static LinkedList<String> numberList = new LinkedList<String>();
static int TOTALNUMBERS = 0;

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String numberInput;

    do{
        System.out.print("Enter number " + TOTALNUMBERS + ". Type @@ to stop.");
        numberInput = input.next();

        /* Add number to numberList */
        numberList.add(numberInput);
        TOTALNUMBERS++;
    }
    while (!numberInput.equals("@@") && TOTALNUMBERS < MAXTIMESTOLOOP);
}