Java 为什么我的JOptionPane会从下面的代码中重复提示主要工作表状态

Java 为什么我的JOptionPane会从下面的代码中重复提示主要工作表状态,java,joptionpane,Java,Joptionpane,我有一个无限的while循环问题,无论我输入什么,即使它是“归档”或“不完整”,循环都会不断地重新提示,我不知道为什么 strMajorSheet = JOptionPane.showInputDialog(null,"What is the advisee's major sheet status? (Filed/Incomplete)", "Advisee's Major Sheet",3); if(strMajorSheet == "Filed" || s

我有一个无限的while循环问题,无论我输入什么,即使它是“归档”或“不完整”,循环都会不断地重新提示,我不知道为什么

strMajorSheet = JOptionPane.showInputDialog(null,"What is the advisee's major sheet status? (Filed/Incomplete)",
                "Advisee's Major Sheet",3);

if(strMajorSheet == "Filed" || strMajorSheet == "Incomplete")
                    {

                        switch(strMajorSheet)
                        {
                            case "Filed":
                                blnMajorSheet = true;
                            case "Incomplete":
                                blnMajorSheet = false;


                        }
                    }
                    else
                    {
                        while(strMajorSheet != "Filed" && strMajorSheet != "Incomplete")
                        {
                            strMajorSheet = JOptionPane.showInputDialog(null,"What is the advisee's major sheet status? (Filed/Incomplete)",
                                "Advisee's Major Sheet",3);


                        }

字符串比较Java必须使用
equals
equalsIgnoreCase
来完成。请不要使用
=
来比较字符串

换成

if(strMajorSheet.equals("Filed") || strMajorSheet.equals("Incomplete"))
......

while(!strMajorSheet.equals("Filed") && !strMajorSheet.equals("Incomplete"))
......

首先,
String
比较不是使用
=
完成的,它比较对象引用,对象引用不太可能是
真的
。相反,您需要使用
equals
equalsIgnoreCase
来比较两个
字符串的内容

话虽如此,我不知道您为什么要费心使用
if
语句,因为整个逻辑都可以使用
switch
语句来实现,例如

boolean gotInput = true;

do {
    String strMajorSheet = JOptionPane.showInputDialog(null, "What is the advisee's major sheet status? (Filed/Incomplete)",
                    "Advisee's Major Sheet", 3);

    gotInput = true;
    switch (strMajorSheet) {
        case "Filed":
            blnMajorSheet = true;
            break;
        case "Incomplete":
            blnMajorSheet = false;
            break;
        default:
            gotInput = false;
    }
} while (!gotInput);

现在,请注意,
switch(String)
与使用
String#equals
相同,这是区分大小写的比较。

为什么使用
if
语句和
case
语句?你可以用
案例
语句来完成整件事……哦,天哪,我完全搞错了。说到编程,我还是个初学者,非常感谢。