我认为要初始化的变量会发送一个未初始化的错误

时间:2016-12-07 07:56:30

标签: java

我正在尝试与String数组进行比较,并且在字符串是否相等时返回值为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;
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

我认为你将局部变量与一个类的成员变量(也称为字段)混淆。正如您在方法中声明finalAnswer一样,它是一个局部变量,并且不会通过简单地在boolean finalAnswer;中声明类型为boolean的变量来初始化。如果您将其声明为成员变量,则在创建类的对象时,它将使用其默认值(在布尔变量的情况下为false)进行初始化。

答案 2 :(得分:1)

您需要显式初始化变量,如下所示: boolean finalAnswer = false;

其他几点说明:

  • array1[i] == array2[i] - &gt;应使用equals()比较字符串,除非您要测试引用相等性
  • i > array1.length这总是假的

可以大大简化为:

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

您可以查看Arrays.equals()的实施情况。