4 回答
TA贡献1830条经验 获得超9个赞
返回 -32560 的原因是因为您尝试使用运算符比较数字对象 ( Integer
) !=
,这几乎总是返回 true (因此返回最终值),因为数组中的所有整数在技术上并不相等(他们的对象引用会不同)。
您可以通过更改行来解决此问题:
if((arr[j-1]!=arr[j]) && (arr[j]!=arr[j+1]))
到
if(!(arr[j-1].equals(arr[j])) && !(arr[j].equals(arr[j+1])))
或者您可以将数组更改为原始数组int
而不是数字类Integer
Integer[] arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};
到
int[] arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};
两种方法都可以 - 希望这会有所帮助!
TA贡献1825条经验 获得超6个赞
这里的问题是您正在比较 Integer 对象实例的相等性而不是值。只需获取您的代码,我就会在 IDE 中针对您正在使用的比较发出警告。如果您想与原始值进行比较,最简单的更改是将数组的声明更改为
int[] arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};
这样做会产生预期的结果-32700
如果您想让数组保留 Integer 对象,另一种解决方案是按照 Michael Michailidis 的建议进行操作,并在比较中使用 equals。
TA贡献1821条经验 获得超4个赞
运算符对 int 类型 (x==y) 或 Integer 类 (x.equals(y)) 执行的操作不同,以修复使用适当的整数运算符:
public class Example {
public static void main(String[] args) {
int[] arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};
for(int j=1; j<arr.length-1; j++)
if((arr[j-1]!=arr[j]) && (arr[j]!=arr[j+1]))
System.out.println("int>"+arr[j]);
Integer[] I_arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};
for(int j=1; j<I_arr.length-1; j++)
if((!I_arr[j-1].equals(I_arr[j])) && (!I_arr[j].equals(I_arr[j+1])))
System.out.println("Interger>"+I_arr[j]);
}
}
TA贡献1803条经验 获得超3个赞
Integer[] arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};
int n = arr.length;
//to store repeating element
int[] temp = new int[1];
//if only one element return it
if (arr.length == 1) {
System.out.println(arr[0]);
} else {
for (int j = 1; j < n - 1; j++) { //compare current element with it's previous and subsequent
if ((!arr[j - 1].equals(arr[j])) && (!arr[j].equals(arr[j + 1]))) {
temp[0] = arr[j];
}
}
System.out.println(temp[0]);
}
您的代码现在正在运行。问题在于您进行的对象比较。Integer是一个对象(包装器),而int是一个基元。==和=!在基元上效果很好,但在对象上效果不佳
添加回答
举报