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條經驗 獲得超5個贊
運算符對 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是一個基元。==和=!在基元上效果很好,但在對象上效果不佳
添加回答
舉報