为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复以下问题,使其只能返回数组中不重复的值?

如何修复以下问题,使其只能返回数组中不重复的值?

繁花不似锦 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条经验 获得超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]);

    }



}


查看完整回答
反对 回复 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 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信