0

以下では、特定の文字列の配列を検索してその位置を返すメソッドを作成しようとしています。存在しない場合は、-1 が返される数値になります。以下では、メソッドを使用して単語を検索すると、単語が配列内にある場合でも -1 が返されます。どうしてこれなの?

    String answer = "";

    System.out.println("Enter word to search within array");
    answer = in.next();


       public static int search(String[] theWords, String answer) {
         int a = -1;
         for(int i = 0; i < theWords.length; i++) {
             if (answer.equals(theWords[i])){
                 a = i;
                 break;
             }
         } 
         return a;
     }
4

2 に答える 2

4

コードに問題はありませんが、戻り値を保持するローカル変数を削除することをお勧めします。

 public static int Search(String[] thewords, String answer) {
     for (int i = 0; i < thewords.length; i++) {
         if (answer.equals(thewords[i])){
             return i;
         }
     } 
     return -1;
 }

この簡略化されたロジックでは、このコードにバグが存在する可能性はほとんどまたはまったくありません。


これはコースワークであり、ライブラリ メソッドの使用は許可されていないと思います。許可されていれば、メソッドは 1 行で済みます。

return Arrays.asList(theWords).indexOf(answer);
于 2013-04-17T13:57:18.540 に答える
1

メソッドのコンシューマーにとってソートは望ましくない可能性があるため、オプションで配列のコピーを作成できます。

public static int Search(String[] thewords, String answer) {  
     if(thewords == null) {  
        throw new NullPointerException();  
     }  
     String[] copy = new String[thewords.length];  
     System.arraycopy(thewords,0,copy,0,copy.length);  
     Arrays.sort(thewords);    
     return Arrays.binarySearch(thewords, answer);  
}  

注: 戻り-posません。-1

必要な場合-1:

public static int Search(String[] thewords, String answer) {  
     if(thewords == null) {  
        throw new NullPointerException();  
     }  
     String[] copy = new String[thewords.length];  
     System.arraycopy(thewords,0,copy,0,copy.length);  
     Arrays.sort(thewords);  
     int idx = Arrays.binarySearch(thewords, answer);  
     return idx < 0? -1:idx;  
}  

あなたのコードに関して:問題は大文字と小文字の間隔に関連していると思います:次の
ようなものに置き換えてください:if (answer.equalsIgnoreCase(theWords[i].trim())){

大きな配列の場合は、バイナリ検索を使用します。

于 2013-04-17T13:51:03.647 に答える