当前位置:编程学习 > JAVA >>

java技术难题解答

public static void same(){//方法目的:将1000个数据赋值为1~999,只有一对数值是重复的,找出来?
Integer[] arr=new Integer[1000];//设置一个长度为1000的数组,值从1~1000
for(int i=0;i<arr.length-1;i++){
arr[i]=i+1;
}
arr[arr.length-1]=(int)(Math.random()*1000)+1;//把最后一个元素(即值为1000的数)改成随机值
System.out.println(Arrays.toString(arr));//可以看到最后一个随机数
Arrays.sort(arr);//递增排序
System.out.println(Arrays.toString(arr));//可以看到排序后随机数排到了合理的位置
for(int i=1;i<arr.length-1;i++){
System.out.println("i="+i+", arr[i]="+arr[i]+", arr[i-1]="+arr[i-1]);
int t=arr[i-1];
if((arr[i])==(arr[i+1])){//我的问题是就在这一行?????????????????
//为什么这里这样写就得不到正确的结果,而用t代换一下就可以得到正确结果?????????????
//为什么把==换成>=也就对了????????????????
//当然我知道把(arr[i+1])换成 i 是更高效也正确的,也知道别的方法
System.out.println(arr[i]);
break;
}
}
} --------------------编程问答-------------------- 我感觉应该从Integer与int之间的区别入手,对吗? --------------------编程问答--------------------
引用 1 楼 Mingmingshiriyue 的回复:
我感觉应该从Integer与int之间的区别入手,对吗?


你说的没错,把Integer[] arr=new Integer[1000];换成
int[] arr=new int[1000]; 也能正确,应该是自动打包自动解包不支持==吧
毕竟 t=arr[i]会自动解包Integer成int
arr[i] >= arr[i-1]由于存在比较 > 符号,所以也会自动解包
但是 == 只是简单判断两边是否相等,由于是Integer对象,所以不可能相等 --------------------编程问答-------------------- ==比较两个对象时是比较两个对象的引用是否相等,即是比较两个引用是否指向一个对象。
至于关于Integer之间的>和<比较,都会自动解包的 --------------------编程问答-------------------- 具体可以看看这个
http://stackoverflow.com/questions/1514910/when-comparing-two-integers-in-java-does-auto-unboxing-occur --------------------编程问答-------------------- 这题不需要排序的

数组的和 - (1+...+999) = 你要的答案 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 两个Integer数据 判断相等 用equals
按照你填加数据做法先将1-999添加进去 添加一个随机数,把随机数取出来不久知道是那个数据重复了? --------------------编程问答-------------------- 恩,1楼正解。Integer是构建的是对象,两个对象比较用==则比较的是地址,所以你将
if((arr[i])==(arr[i+1])){//我的问题是就在这一行?????????????????
改成equals去比较。if(arr[i].equals(arr[i+1])) --------------------编程问答-------------------- 既然用了Integer,就用它写好的方法比较大小,integer.compareTo()
--------------------编程问答-------------------- 2楼讲的很到位。 --------------------编程问答-------------------- 有种数据结果叫为图。。统计这种重复不重复的东西最好用的说。
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,