【问题标题】:How to terminate do while loop in main method?如何在main方法中终止do while循环?
【发布时间】:2016-07-23 22:47:05
【问题描述】:

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

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"));
}
}

【问题讨论】:

  • 请提供Clinic.details(String)的代码。注意details方法和details字段不是一回事。
  • 请提供可编译的代码(此代码末尾有不平衡括号)。
  • 我建议编写不依赖于 Clinic 类中隐藏细节的代码。代码可能有效,但很难维护。

标签: java


【解决方案1】:

我会尝试回答您的问题,但您确实没有提供足够详细的代码让我确保我的回答会对您有所帮助。

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

public class Clinic {
    public String details;

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

我注意到的第一件事是,您对JOptionPane.showInputDialog 的调用似乎没有按照您的意愿进行。同样,我只是根据提供的少量信息猜测您想要什么。我想你想要一个对话框,询问用户两个输入之一 - P 表示“继续”或 D 表示“完成”。如果您查看 JoptionPane 的 Javadoc,您将看到您的代码正在调用 this method,这导致您的对话框如下所示:

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

如果你把调用details方法的那行改成这样:

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

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

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

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

  1. JOptionPane.showInputDialog 的调用返回用户输入的文本。如果用户按下 Cancel,当循环尝试访问 c.details 时,您将收到 java.lang.NullPointerException(再次假设 Clinic 按我上面概述的方式工作)
  2. 一般来说,您应该始终使用常量第一个和变量第二个来编写equals 比较,以避免出现任何 NullPointerException 的可能性。例如在您的代码中:}while(!c.details.equals("D")); 将更改为 }while(!"D".equals(c.details));
  3. 您通常不应该公开类的字段。直接访问对象的内部数据会使您的代码更难维护(如 cmets 中提到的@Roland)。而是使用 getter 和 setter 方法。对this question 的接受回答更详细地解释了这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2020-02-10
    相关资源
    最近更新 更多