理由はわかりませんが、do whileループで終了を選択するたびに終了しません。mainメソッドでdo whileループを終了するには?
-2
A
答えて
1
私はあなたの質問に答えようとしますが、私の答えがあなたに役立つことを確かめるためにあなたのコードについての十分な詳細を提供していません。
私の最高の推測では、あなたのClinic
クラスは、このようなものに見えるということです。
public class Clinic {
public String details;
public void details(String input) {
details = input;
}
}
を私が最初に気づくのはJOptionPane.showInputDialog
へのお電話は、あなたが望むものをやっているようには見えないということです。繰り返しますが、私はちょっとした情報が提供されていることに基づいて、あなたが望むものだけを推測しています。私はあなたが2つの入力のうちの1つを求めるダイアログを望んでいると思っています--Pは "Proceed"、Dは "Done"です。あなたはJoptionPane
のJavadocを見れば、あなたはあなたのコードは次のように表示されるように、あなたのダイアログを引き起こしているthis methodを呼び出していることがわかります。
を今、あなたは、単にこのダイアログとあなたのClinic
クラスに、[OK]をクリックした場合上に示したものと似ていれば、details
フィールドは "[D] one"に設定されています。明らかに "D"と等しくないので、ループは終了しません。
あなたはこれにdetails
メソッドを呼び出す行に変更した場合:
c.details(JOptionPane.showInputDialog("[P]roceed\n[D]one","D"));
をあなたが望む結果を得るでしょう - プロンプトは次のようになります。
とOKを押すとループが終了します。
あなたのコードについて考慮すべきいくつかの点:
- コール
JOptionPane.showInputDialog
には、ユーザーが入力したテキストを返します。ユーザがキャンセルを押すと、ループがc.detailsにアクセスしようとするとjava.lang.NullPointerExceptionが返されます(上記で概説した通りClinic
が動作すると仮定します) - 一般に、
equals
の比較は、変数secondは、NullPointerExceptionの可能性を避けるために使用します。たとえば、コード内では}while(!c.details.equals("D"));
は}while(!"D".equals(c.details));
- に変更されます。一般に、クラスのフィールドは公開しないでください。オブジェクトの内部データに直接アクセスすると、コードを難しくすることがあります(@Rolandはコメントに記載されています)。代わりに、getterメソッドとsetterメソッドを使用します。 this questionへの受け入れられた答えは、これをより詳細に説明しています。
関連する問題
- 1. do-whileループを終了する
- 2. vba do whileループは終了ループを終了しません
- 3. Scala Do Whileループが終了しない
- 4. 終了プログラムdo-whileループin java
- 5. C++のDo Whileループを偽の値で終了する
- 6. VBAでdo whileループを終了する方法
- 7. do-whileループはC言語で終了しません
- 8. Do-Whileループが途中で終了しています
- 9. 正規表現でdo-whileループを終了しない
- 10. Do Whileループは常に最初のループの後に終了します
- 11. VBA内のNest Do Whileループが終了しない
- 12. Javaでwhileループを終了する
- 13. whileループ、cinを終了します。 C++
- 14. do/whileループは条件がfalseを返すときに終了しません
- 15. Do-While、メニュー選択を正しく終了するには
- 16. whileループで入力を終了する
- 17. Whileループでプログラムを終了する
- 18. whileループはゼロで終了します
- 19. whileループを終了させる方法
- 20. Do Whileループでストリームリーダー?
- 21. C do-whileループ
- 22. C++ do-whileループ
- 23. whileループcは終了しません
- 24. whileループ終了条件
- 25. whileループの終了条件
- 26. Enterキーを押してdo-whileループを終了できません
- 27. 無限のwhileループを終了する
- 28. PHP Infinite Whileループを終了する
- 29. whileループが終了しないC++
- 30. VBS/VBAでwhileループを終了
「Clinic.details(String)」のコードを入力してください。 'details'メソッドと' details'フィールドは同じものではないことに注意してください。 –
コンパイルするコードを提供してください(最後にアンバランスなカッコがあります)。 – dasblinkenlight
Clinicクラスの隠された詳細に依存しないコードを書くことをお勧めします。コードは機能するかもしれませんが、維持するのは難しいでしょう。 – Roland