如何在main方法中终止while循环?

时间:2016-07-23 22:47:06

标签: java

我不知道为什么,但每当我在我的do while循环中选择完成时,它都不会终止。

public class testClinic{ 
      public static void main(String[]args){
        Clinic c=new Clinic();
        do{ 
            c.details(JOptionPane.showInputDialog("[P]roceed","\n[D]one"));
        }while(!c.details().equals("D"));
}
}

1 个答案:

答案 0 :(得分:1)

我会尝试回答您的问题,但您确实没有为我提供足够的代码详情,以确保我的回答能为您提供帮助。

我最好的猜测是你的Clinic课程看起来像这样:

public class Clinic {
    public String details;

    public void details(String input) {
        details = input;
    }
}

我注意到的第一件事是,您对JOptionPane.showInputDialog的呼叫似乎没有按照您的意愿行事。同样,我只是根据提供的信息来猜测你想要什么。我想你想要一个对话框,要求用户输入两个输入中的一个 - P为" Proceed"或D代表"完成"。如果您查看JoptionPane的Javadoc,您会看到您的代码正在调用this method,这会导致您的对话框显示如下:

enter image description here

现在,如果您只需单击“确定”进入此对话框,并且您的Clinic类与我上面显示的类相似,那么details字段将设置为" [d]一个"显然,这不等于" D"因此你的循环永远不会结束。

如果您将调用details方法的行更改为:

c.details(JOptionPane.showInputDialog("[P]roceed\n[D]one","D"));

你会得到你想要的 - 提示将如下所示:

enter image description here

当你按下OK时,循环将结束。

有关您的代码需要考虑的一些事项:

  1. JOptionPane.showInputDialog的调用将返回用户输入的文本。如果用户按下取消,当循环尝试访问c.details时,您将收到java.lang.NullPointerException(同样,假设Clinic按上述方式工作)
  2. 通常,您应该始终使用常量first和变量second编写equals比较,以避免出现NullPointerException的任何可能性。例如,在您的代码中:}while(!c.details.equals("D"));将更改为}while(!"D".equals(c.details));
  3. 你通常不应该公开课堂的领域。直接访问对象的内部数据可能会使您的代码难以维护(正如@Roland在评论中提到的那样)。而是使用getter和setter方法。 this question接受的答案更详细地解释了这一点。
相关问题