我會盡量回答你的問題,但你真的沒有提供足夠的關於你的代碼的細節,以確保我的答案能幫助你。
我最好的猜測是,你Clinic
類看起來是這樣的:
public class Clinic {
public String details;
public void details(String input) {
details = input;
}
}
我注意到的第一件事是,你要JOptionPane.showInputDialog
電話似乎並不做你想要什麼。再次,我只根據提供的信息猜測你想要什麼。我想你想要一個對話框,要求用戶輸入兩個輸入中的一個 - 要麼P代表「繼續」,要麼D代表「完成」。如果你看的Javadoc JoptionPane
你會看到你的代碼調用this method這是造成你的對話框出現這樣的:
現在,如果你只需點擊OK此對話框,您Clinic
類與上面顯示的類似,那麼details
字段設置爲「[D] 1」,顯然,它不等於「D」,因此您的循環永遠不會結束。
如果更改調用details
方法的行:
c.details(JOptionPane.showInputDialog("[P]roceed\n[D]one","D"));
你會得到你想要的東西 - 迅速將看起來像這樣:
和當你按下OK鍵時,循環結束。
有些事情要考慮關於你的代碼:
- 到
JOptionPane.showInputDialog
調用返回用戶輸入的文本。如果用戶按Cancel,當循環嘗試訪問c.details時(假設Clinic
按上述方式工作),將會得到一個java.lang.NullPointerException異常
- 一般來說,您應該始終使用常量優先級編寫您的
equals
比較和第二個變量,以避免任何NullPointerException的可能性。例如在您的代碼中:}while(!c.details.equals("D"));
將更改爲}while(!"D".equals(c.details));
- 您通常不應公開某個類的字段。直接訪問對象的內部數據可能會使代碼更難以維護(正如@Roland在評論中提到的那樣)。而是使用getter和setter方法。對this question的接受答案更詳細地解釋了這一點。
請提供'Clinic.details(String)'的代碼。請注意,「細節」方法和「細節」字段不是同一件事。 –
請提供編譯的代碼(最後有一個不平衡的括號)。 – dasblinkenlight
我會建議編寫不依賴於診所類中隱藏細節的代碼。代碼可能工作,但很難維護。 – Roland