質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

3回答

759閲覧

JAVAの練習問題 switch文とdo whileの使い方で躓いています

momohara

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2021/09/26 04:32

前提・実現したいこと

学生です。JAVAの練習問題でひっかかっています。
(1).[メニュー]を表示
(2).数字の入力を求める
(3).1〜4が入力された場合、対応するテキストを表示させ、(1)に戻る
(4).5が入力されたら「終了」と表示しswitch文を終了
(5).それ以外の数字が入力されたら「1〜5を入力して」と表示して(1)に戻る
※switch文、do while文を使うこと

発生している問題・エラーメッセージ

(3)以降が全く分からないです。1〜4を入力後、(1)の[メニュー]に戻れずそのまま終わります 5を入力するとループします。

該当のソースコード

java

1ublic class Main { 2 public static void main(String[] args) { 3 4 System.out.print ("[メニュー]1:検索 2:登録 3:削除 4:変更 5:終了 >"); 5 int selected = new java.util.Scanner(System.in).nextInt(); 6 7 do { 8 switch (selected) { 9 case 1: 10 System.out.print("検索します"); 11 break; 12 case 2: 13 System.out.print("登録します"); 14 break; 15 case 3: 16 System.out.print("削除します"); 17 break; 18 case 4: 19 System.out.print("変更します"); 20 break; 21 case 5: 22 System.out.print("終了します"); 23 break; 24 default : 25 System.out.print("1〜5を入力してください"); 26 break; 27 } 28 } while (selected == 5); 29 } 30}

試したこと

do whileとswitchの記述の順番を変えたり、selectedの宣言をdoの中に入れたりしましたが
うまくいきません。

補足情報(FW/ツールのバージョンなど)

MacOS、VSCode

初質問ですがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/09/26 08:46

do~whileとswitchを使わなければできるのでしょうか。whileとifに置き換えて、とか。それができない場合、基本的なロジックを組める力がまだ足りないと考えられます。 > do whileとswitchの記述の順番を変えたり、selectedの宣言をdoの中に入れたりしましたが うまくいきません。 コードをこねくり回しても決して完成しません。
guest

回答3

0

} while (selected == 5);

selected が5のときに繰り返す、となってます
あと、繰り返されたときになにがどうなるか、コードを追いかけてみよう

投稿2021/09/26 05:39

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momohara

2021/09/26 05:58

ありがとうございます。 まずやってみます!
guest

0

「入力を求める」「その入力値を得る」ところからwhileに入れる必要があるのでは。

あとwhileは「条件式がtrueになる間繰り返す」ので、5を選んだら繰り返します。
「5以外が選ばれたら」に変更しましょう。

投稿2021/09/26 04:53

編集2021/09/26 04:58
m.ts10806

総合スコア80861

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momohara

2021/09/26 05:59

ありがとうございます! whileに入れる文をみなおしてみます
m.ts10806

2021/09/26 06:11

初期値とスコープには注意してください。
guest

0

プログラミングっていうのは『こう書けばいい』というものではありません。
現実世界のシミュレーションです。

とりあえず、プログラミングは置いといて、現実世界で質問にあるものをやると考えてみてください。

おそらく、

1. { 1, 2, … 4 } のいずれかが入力されるまで繰り返す 2. 該当する文字列を表示する

的な感じになりますね。

その前に、ご自分のコードを読みましょう
コードを読むコツは『一行レベルで、何をしているかを考えながら読む』です。

public class Main { public static void main(String[] args) { // メニューを表示 System.out.print ("[メニュー]1:検索 2:登録 3:削除 4:変更 5:終了 >"); // ユーザ入力を受け付けてselectedに入れる int selected = new java.util.Scanner(System.in).nextInt(); // 少なくとも一回は以下を処理する do { // ユーザ入力が switch (selected) { // 1なら case 1: // 検索 System.out.print("検索します"); // switchの終了 break; // 2なら case 2: // 登録 System.out.print("登録します"); // switchを抜ける break; // ここも case 3: System.out.print("削除します"); break; case 4: System.out.print("変更します"); break; case 5: System.out.print("終了します"); break; default : System.out.print("1〜5を入力してください"); break; } // 2回目以降はselectedが5のときだけループ  } while (selected == 5); } }

これを擬似コードとして抜き出してみる。

1. メニュー表示 2. ユーザ入力を受け付けて、selectedとする 3. 少なくとも一回は以下を処理する 3.1. selectedが1なら 3.1.1. 『検索』 3.1.2. (4)へ 3.2. selectedが2なら 3.2.1. 『登録』 3.2.2. (4)へ … 4. selectedが5なら(3)へ

みたいな感じでしょうか。

これを現実世界でシミュレーションしてみてください。
上記擬似コードを作業手順として実際に計算するなり、作業してみてください。

実際にselectedに何かしらの数字を入れてみるとかですね。

たとえば、

selected = 1 のとき: (2)によって selected = 1となる。 (3)に入って(3.1)らへんで『検索』。 (3.1.2)によって(4)へ。 でもselecte == 5 は満たしません。 だって 1 == 5 だから。 よってここで終了。 selected = 2 のとき: (2)によって selected = 2となる。 (3)に入って(3.1)らへんで『登録』。 (3.1.2)によって(4)へ。 でもselecte == 5 は満たしません。 だって 2 == 5 だから。 よってここで終了。 … selected = 5 のとき: (2)によって selected = 5となる。 (3)に入って(3.1)らへんで『終了』。 (3.1.2)によって(4)へ。 しかし、selected == 5 を満たす。 だって 5 == 5 だから。 なので(3)へ。…しかし、selectedの値は書き換えられていないので、常に(4)でtrueとなり、無限ループ状態に。

というふうにやる感じですね。

さて、これでなんとなくわかったはずです。

1〜4なら常に聞きたいのですよね?

でも『数字を聞いているのは(2)のたった一回だけ』です。

それだと、selectedの値がまったく変わりません。

…というふうに考えてみてください。

それでもわからないなら、質問本文にもとのコード等を載せたままで、自分なりに修正したコードを載せてみてください。

投稿2021/09/26 08:32

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問