0

ユーザーが犯罪を「犯罪データベース」に入力できるようにする小さなメソッドを作成しようとしています。それは、その犯罪を犯した犯罪者のみを表示します。

残念ながら、2D 配列を使用する必要があります。メソッドを作成しましたが、探している出力が得られません。

メソッドは次のとおりです。

    //method to search data
public static void searchData() throws IOException{

    int flag = 0;
    boolean found = false;

//input search key
    System.out.print("Which crime would you like to select? (arson, theft, assault) ");
    String searchKey = br.readLine();

    System.out.println("You searched for criminals with the offence of \"" + searchKey + "\".");    
    System.out.println("Name - Crime - Year of Conviction");

    for(int i = 0; i < criminals.length; i++){
        if(searchKey.compareTo(criminals[i][1]) == 0){
            flag = i;
            found = true;
        }
    }

    if(found == false){
        System.out.println("Error! Crime not found.");
    }else{
        System.out.println("Criminals found.");
        for(int i = 0; i < criminals.length; i++){
            System.out.println(criminals[flag][0] + " - " + criminals[flag][1] + " - " + criminals[flag][2]);
        }
    }
} 

私の入力はこれでした:

George - theft - 1999
Eddie - assault - 2003
Al - theft - 1999

テスト後の出力は次のとおりです。

Which crime would you like to select? (arson, theft, assault) theft
You searched for criminals with the offence of "theft".
Criminals found.
Al - theft - 1999
Al - theft - 1999
Al - theft - 1999

これの何が問題なのかを理解するのを手伝ってもらえますか? 前もって感謝します。:)

4

2 に答える 2

1

最後に見つかった犯罪者 (フラグ) を印刷しています。

for(int i = 0; i < criminals.length; i++){
    if(searchKey.compareTo(criminals[i][1]) == 0){
        if(!found) {
            found = true;
            System.out.println("Criminals found.");
        }
        System.out.println(criminals[i][0] + " - " + criminals[i][1] + " - " + criminals[i][2]);
    }
}

if(found == false){
    System.out.println("Error! Crime not found.");
}
于 2013-09-20T10:55:22.957 に答える
1

コードの再利用と保守性を向上させるための小さな追加 (必要な場合):

  • シンボル(自然言語)は通常、単純な数値よりもよく理解されるため、配列の使用は多くの現実のケースで最良の(=最も「読みやすい」)ソリューションではないことをすでに理解しています-編集:この場合は定数を使用しますすでにリテラル数値よりも優れている可能性があります
  • for可能な限り、明示的な要素のアドレス指定の代わりに拡張ループを使用してください: Java の拡張 for ループの構文は何ですか?
  • と比較する代わりに、演算子を使用してコードを読みやすくしfalseたい場合があります!
  • また、(少なくともこの場合).equalsよりも明確です.compareTo .. == 0
于 2013-09-20T11:18:52.890 に答える