- ベストアンサー
ループが機能しない理由
- Javaのソースコードを使って、ループが機能しない理由について説明します。
- 例外処理もなくエラーも返ってこないため、一度しか学生名が出力されない現象が発生します。
- 問題の原因は、ループ内でkeyとIDの比較が誤って行われていることです。正しい比較を行うように修正する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 補足ありがとうございました。 要するに何回も学生番号を入力できてその番号の学生名を出力したいということでしょうか。 まず何回も入力させるのであればScanner sc = new Scanner(System.in);を繰り返す必要があります。 その辺は難しいこと無いですので作ってみてください。 IDに該当する学生名を出すところですが元々の条件式ですと結果は正しく出ると思いますが、いかんせん汎用性がありませんしIDの個数が今より増えたときとてつもない条件式になります。 せっかくforを思いついたのであれば for ( int A = 0; A < ID.length; A ++ ) { if ( ID[A] == key ) { System.out.println ( name[A] ); break; } } これでどう動くか、実際にコンパイルする前に頭の中で動かしてみてください。 キー入力を何度も行わせるためのループとIDの配列の中に該当するIDがあるか調べるためのループがあります。
その他の回答 (1)
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 何をどうしようとしている仕様が明確にわからないので何ともいえませんが、 forで配列要素分のループをしている中でkeyとID配列の中身が一致した際に文字出力後breakをしています。 それではその場でループが終了します。 また現状の条件式ですと一つのキーにしか合致しないことになります。 >nameに入っている名前を出力しないといけないですよね。 これは作る人が決めることですのでわからないです。 具体的に実現したい動作ってどんな動きでしょうか。 例えば、入力された学生番号に合致する人の名前を出す 入力が23の場合は荒川
お礼
有難うございます したいことはint型配列23とキーボード入力で23で比較して同じならString型に入っている配列[0]を"荒川"を出力したいです 同様にIDの45とキーボード入力の数字45を比較して同じならString[1]に入っている"神田"を出力です 後は以下略で、全員分のIDとキーボード入力を比較して同じなら出力したいです。 言葉足らずですみません。 まだプログラミングの初心者で説明しづらいです 後break文なんですが外すのもためしたんですが続けて入力できずこうコンソールに出力されました 荒川 荒川 荒川 荒川 荒川 だから結局break文に戻っているんですが・・・ 何故でしょうか? あともう少し解決できそうな気がするんですが・・・
お礼
たびたびありがとうございます まだコンパイル動かしていません。 ネット上なので信用しづらいとおもいますが・・・」 ↓これは思いつかなかったです。 for ( int A = 0; A < ID.length; A ++ ) { if ( ID[A] == key ) { System.out.println ( name[A] ); break; } } この文まだイメージつかないというか説明しづらいです。 後はキーボード入力の繰り返しが書いていないということですね? 考えて試してみます