为什么while循环保持循环

时间:2015-09-27 00:25:45

标签: java loops

当我声明标志为false时,为什么while循环会保持循环? 输入正确的输入后,程序应该结束。 任何帮助将不胜感激。 Java新手。 非常感谢大家!

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


public class Project1Chang
{
public static void main(String[] args)
{
    String name;
    String sex;
    int height;
    boolean flag = true;

    JOptionPane.showMessageDialog (null, "This program calculates tidal volume.", "Tidal Volume Calculator", JOptionPane.INFORMATION_MESSAGE);

    name = JOptionPane.showInputDialog("What is your name?");
    sex = JOptionPane.showInputDialog("What is your sex?");

    while (flag = true)
    {
        height = Integer.parseInt (JOptionPane.showInputDialog("What is your height? (48-84 inches or 114-213 centimeters) \nEnter whole numbers only."));

        if (height <= 84 && height >= 48)
        {
            if (sex.equalsIgnoreCase("male") || sex.equalsIgnoreCase("m"))
            {
                double malePbwInch = 50 + 2.3 * (height - 60);
                JOptionPane.showMessageDialog(null, malePbwInch);
                flag = false;
            }
        }
        else if (height <= 213 && height >= 114)
        {
            if (sex.equalsIgnoreCase("male") || sex.equalsIgnoreCase("m"))
            {
                double malePbwCm = 50 + .91 * (height - 152.4);
                JOptionPane.showMessageDialog(null, malePbwCm);
                flag = false;
            }
        }
        else
        {
            JOptionPane.showMessageDialog(null, "This is an invalid input. Try again.");
        }
    }
}

}

5 个答案:

答案 0 :(得分:2)

即使是有经验的程序员也会不时犯这样的错误: 您将true指定为flag,因此条件始终为true。 你需要双等于比较运算符

while (flag == true)

或者真的只是

while (flag)

答案 1 :(得分:1)

您正在flag = true而不是flag == true

答案 2 :(得分:1)

正如前面提到的海报一样,您必须使用==代替=

但更优雅的做法是写while(flag)

如果您在循环中只有一个布尔值,则不必检查它是==true还是==false,因为布尔值本身包含值truefalse

答案 3 :(得分:0)

flag = true应为flag == true

flag = true将true赋给flag并将true返回到while循环

答案 4 :(得分:0)

=运算符为变量赋值。          ==运算符测试变量是否与另一个值相等。

while循环永远不会停止循环,因为循环中的条件始终为true。这是因为您将flag的值赋值为true。

要允许终止循环,请将while (flag = true)更改为while (flag == true)