亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復以下問題,使其只能返回數組中不重復的值?

如何修復以下問題,使其只能返回數組中不重復的值?

繁花不似錦 2023-09-20 15:34:14
我有一個排序的整數數組,其中一些值重復,但我想返回不重復的值。例如,我有這個:Integer[] arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};它應該返回值-32700。但是,結果給了我 -32560 。我的方法可能有什么問題?這是我的代碼:    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]!=arr[j]) && (arr[j]!=arr[j+1]))            {                temp[0] = arr[j];            }        }    System.out.println(temp[0]);    }
查看完整描述

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};

兩種方法都可以 - 希望這會有所幫助!


查看完整回答
反對 回復 2023-09-20
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

這里的問題是您正在比較 Integer 對象實例的相等性而不是值。只需獲取您的代碼,我就會在 IDE 中針對您正在使用的比較發出警告。如果您想與原始值進行比較,最簡單的更改是將數組的聲明更改為

int[] arr = {-32735, -32735, -32700, -32645, -32645, -32560, -32560};

這樣做會產生預期的結果-32700

如果您想讓數組保留 Integer 對象,另一種解決方案是按照 Michael Michailidis 的建議進行操作,并在比較中使用 equals。


查看完整回答
反對 回復 2023-09-20
?
收到一只叮咚

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]);

    }



}


查看完整回答
反對 回復 2023-09-20
?
繁星點點滴滴

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是一個基元。==和=!在基元上效果很好,但在對象上效果不佳


查看完整回答
反對 回復 2023-09-20
  • 4 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號