aymnkt
@aymnkt

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

breakを使用し、番号から名前を検索したい

解決したいこと

会員番号から会員名を検索し、表示したいです。
break;を使用し、
会員番号:1002
会員名 : 中田
のように表示したい。会員番号では無い番号の場合は、該当する会員は・・・と表示。

発生している問題・エラー

エラーは出ていませんが、結果が会員番号に何を入力しても該当なしと表示されます。
全てelse以下の処理になっていると思われます。

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

int[] number = {1001, 1002, 2010, 2015, 3011};
        String[] names = {"中田", "上原", "斎藤", "栗原", "前川"};
        int i;
        int accountNumber = 1001;
        for(i = 1 ; i <= 5 ; i++){
        	if(number[i] >= 1 || number[i] <= 5) {
        		break;
        	}
        
        }  
        if(number[i] == accountNumber) {
        	System.out.println("会員番号:" + accountNumber);
        	System.out.println("会員名:" +names[i]);
        } else {
        	System.out.println("会員番号:" + accountNumber);
        	System.out.println("該当する会員は存在しません");
        }
        
        }
}

自分で試したこと

フローチャートを書いてみたり、紙に書き出してしてみたり、ググったりして考えました。
for()の式が誤っているような気がしていますが、解決に至りませんでした。
どういったときに、どの変数を使用するかが結びつかずないのですが、経験値の問題でしょうか。

1

1Answer

想定通りの動作にならないのは if(number[i] == accountNumber) の部分に問題があるからだと思います。変数 i はfor文内で 1で初期化され、そのあとそのままbreakされるのでif(number[i] == accountNumber) に入るときには、変数 i は1のままです。つまりnumber[i] とは number[1] となります。

ここでjavaはリストの要素へのアクセスは0番スタートなので、number[1] というのはリストの二番目の要素を指定していることになります。なので、elseの分岐に入ってしまうということですね。

と、ここまでが、会員番号に何を入力しても該当なしと表示されます。 の原因だと思います。これらを踏まえて、ソースを見てこういう風に書きたいんだろうな、というものが伝わったので、すこしリファクタリングしてみました。

主な変更点は

  1. System.out.println("会員番号:" + accountNumber); の表示をfor文の前に置き、重複を削除
  2. for文内に会員番号についての条件付けを入れ込んだ
    1. 一致する場合breakではなくreturnで関数自体の処理を終わらせるようにした(breakだと、for文からは抜け出せるが最後のprint文まで出力されてしまう)
  3. for文内の条件に一致しなかった場合の出力を、for文の外に出す。
search.java
int[] number = {1001, 1002, 2010, 2015, 3011};
String[] names = {"中田", "上原", "斎藤", "栗原", "前川"};
int accountNumber = 1002;

System.out.println("会員番号:" + accountNumber);
for(int i = 0 ; i < 5 ; i++) {
    if(number[i] == accountNumber) {
        System.out.println("会員名:" + names[i]);
        return;
    }
}
System.out.println("該当する会員は存在しません");

どうしてもbreakを使用したいということであれば遠慮なく教えてください。

1Like

Comments

  1. @aymnkt

    Questioner

    @takahashi-ry ありがとうございます。
    配列指定の件、完全に抜けていました…。
    breakを使う勉強中のため、使用して書きたいのですがご教示お願いできますでしょうか。
    7/8追記。
    自分で解決できました。本当にありがとうございます。

Your answer might help someone💌