我正在尝试与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;
}
答案 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()
的实施情况。