在Java中使用false boolean重新启动While循环

时间:2014-11-09 20:45:07

标签: java if-statement for-loop while-loop boolean-expression

我正在为学校做作业,要求我们找到最大的十个数字。数字在0-9之间。我相信我得到了那个部分。我的问题是我正在尝试添加分配不需要的额外功能。我试图在boolean语句为false后让循环完全重启并给出错误消息。在我输入无效值后,它会给出错误消息,但在我按下“确定”后,它会继续显示下一个数字。我希望它在循环开始时重新开始。

以下是代码:

package Largest;

import java.util.Scanner;
import javax.swing.JOptionPane;

public class LargestMain {

    public static void main(String[] args) {

    int number = 0;
    String numStr = "";
    int []myArray = new int[10];
    int count = 1;
    int largest = 0;
    boolean valid = false;

    while(valid == true); {  // Loop to check validity  

        for(int i = 0; i < myArray.length; i++) {

            myArray[i] = i + 1;
            numStr = JOptionPane.showInputDialog("Please enter number " + count++ + ":");
            number = Integer.parseInt(numStr); // Converts string value to integer  

            if(number >= largest) {
                largest = number;
            }

            // If-Else if statements checks if values entered are equal to 0-9
            if(number >= 0 && number <= 9) {
                valid = true;
            }

            else if ((!(number >= 0 && number <= 9))) {
                valid = false;
            }   

            if (valid == false) {
                JOptionPane.showMessageDialog(null, "INVALID INPUT...Try Again!!!", "Results", JOptionPane.YES_OPTION);
                continue;
            }
        }

        JOptionPane.showMessageDialog(null, "The Largest Number Is: " + largest, "Results", JOptionPane.PLAIN_MESSAGE);
    }           
    }
}

我可以通过添加return来结束循环:

if (valid == false) {
    JOptionPane.showMessageDialog(null, "INVALID INPUT...Try Again!!!", "Results", JOptionPane.YES_OPTION);
    return;
}

我真的想学习如何从头开始重启循环。我尝试搜索不同的主题,但没有人帮助我解决我的问题。感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

要重新启动循环,您可以使用continue关键字。 continue将跳到下一个循环迭代。

当使用while循环时,它只是重新启动循环,因为循环没有结束直到valid为真。当使用for循环时,它会跳到下一次迭代(所以如果你当前在索引5上并使用continue,它将转移到索引6而不是停留在5)。

对于嵌套循环,您可以标记循环以指定该语句的循环:

firstloop:
while(valid) {

    secondloop:
    while(true) {
         continue firstloop;
    }
}

此外,在检查布尔值时不需要== true。它可以表示为

while(valid) {

}

至于检查错误valid == false,您使用

while(!valid) {

}

答案 1 :(得分:1)

由于您是初学者并且正在尝试学习,因此我对您的代码进行了审核,并附上了一些可能对您有所帮助的评论。我在下面发布了更新的代码。

  1. 声明:您应该在最里面的闭包中声明一个需要它的变量。除largest以外,所有其他人都可以进入for

  2. 您的数组变量没有意义。因为你在去的时候跟踪最大的,而不是在最后找到它。

  3. 控制:您的/loop to check validity/需要严格遵循输入部分,而不是整个程序,因此您可以重复输入语句,直到您满意为止。

    public static void main(String[] args)
    {
        int largest = 0;
        for(int i = 1; i <= 10; i++)
        {
            boolean valid = false;      
            while (!valid)
            {
                String numStr = JOptionPane.showInputDialog("Please enter number " + i + ":");
                int number = Integer.parseInt(numStr);  //Converts string value to integer
    
                if (number >= 0 && number <= 9)
                {
                    valid = true;
                }
                else
                {
                    JOptionPane.showMessageDialog(null, "INVALID INPUT...Try Again!!!", "Results", JOptionPane.YES_OPTION);
                }           
            }
    
            if (number > largest)
            {
                largest = number;
            }
        }   
        JOptionPane.showMessageDialog(null, "The Largest Number Is: " + largest, "Results", JOptionPane.PLAIN_MESSAGE);
    }
    

答案 2 :(得分:0)

您可以使用带标签的继续:

firstloop:
while(valid){
  secondloop:
  for(int i=0; i<10; i++{
    //something
    if(something){
      continue firstloop;
    }
  }
}

有关详细信息,请参阅documentation

UPDATE:此外...您的if / else语句的else部分中不需要条件。只做一个else{ valid=false }就等于你现在正在做的事情。另一种选择是进一步简化它并完全跳过if / else部分并且只有:

valid = number >= 0 && number <= 9

答案 3 :(得分:0)

编写递归函数,即调用自身的函数。

public static void DoSomething()
{
  // optionally ask the user for input at this point before processing begins.

  while(yourCondition)
  {
    // do your stuff.
  }

  // when execution reaches here the condition is no longer valid; start over.
  if(conditionToStartOver)
      DoSomething();  // start again
}

答案 4 :(得分:0)

你的逻辑几乎是正确的但你不应该在外循环中循环valid。请记住,当输入无效时,您希望停止内部循环。通常情况下,外部循环会为用户提供退出程序的选项。

例如:

while(true) {
    boolean valid = true;

    for(...; ...; ...) {
        ...

        if(number < 0 || 9 < number) {
            valid = false;
            break;
        }
    }

    if(valid) {
        // show largest input dialog
    } else {
        // show invalid input dialog
    }

    // optionally ask the user if they want to exit
    // if so, break
}