2016-12-07 17 views
3

文字列配列と比較しようとしていると、文字列が等しいかどうかの戻り値がtrueまたはfalseです。一番上でfinalAnswerを初期化しましたが、値を返そうとすると、初期化されていないというエラーが表示されます。私は初期化されていると思われる変数は、初期化されていないエラーを送信します

public static boolean equals(String[] array1, String[] array2) { 
    boolean finalAnswer; 
    if (array1.length == array2.length) { 
        finalAnswer = false; 
    } 
    else { 
     for (int i = 0; i > array1.length; i++) { 
            if (array1[i] == array2[i]) { 
                finalAnswer = true; 
            } 
            else { 
                finalAnswer = false; 
            } 
        } 
    } 
    return finalAnswer; 
} 
+0

2行目は 'boolean finalAnswer;'です。それを正しく読めば、初期化されていないことがわかります。初期化は次のようになります: 'boolean finalAnswer = false;' – XtremeBaumer

答えて

1

あなたのロジック多くのエラーを持っており、あなたのコンパイル・エラーの原因となる変数を排除することにより、簡素化することができます:私はあなたとも呼ばれる(クラスのメンバ変数とローカル変数を混乱していると思います

public static boolean equals(String[] array1, String[] array2) { 
    if (array1.length != array2.length) { 
     return false; // you should return false if the lengths are NOT equal 
    } 
    else { 
     for (int i = 0; i < array1.length; i++) { // was > 
      if (!array1[i].equals(array2[i])) { // don't compare Strings with == 
       return false; // return immediately if the Strings don't match 
      } 
     } 
    } 
    return true; 
} 
+0

単純な解決策ですが、私はインラインリターンの非常に大きなファンではありません。その代わりに、変数をロジックに流して戻ります。 – Sid

1

フィールド)。メソッド内にfinalAnswerが宣言されているので、それはローカル変数であり、boolean finalAnswer;のブール型の変数を宣言するだけでは初期化されません。メンバ変数として宣言した場合、クラスのオブジェクトを作成するときにデフォルト値(ブール変数の場合はfalse)で初期化されます。 boolean finalAnswer = false;

他のいくつかの注意事項::

1

あなたは、このように明示的に変数を初期化する必要が

  • array1[i] == array2[i] - >あなたは参照の等価をテストする場合を除き、文字列がequals()を使用して比較する必要があります
  • i > array1.lengthこれは常に偽です

それは非常に単純化することができる。

public static boolean equals(String[] array1, String[] array2) { 
    return Arrays.equals(array1, array2); 
} 

あなたはインスピレーションのためのArrays.equals()の実装を見てすることができます。

関連する問題