求助大神,菜鸟卡一晚上了!

Yys959 2018-07-07 11:08:33
利用方法输入一数组,找出数组中只出现过一次的数字,我这个为什么最后会多一个重复的?求大神帮我解答,谢谢!
...全文
453 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2018-07-10
  • 打赏
  • 举报
回复
直接用jdk的hash算法更方便
import java.util.HashSet;
import java.util.Set;

public class Test38 {

public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 3, 4, 4};
suan(arr);
}

public static void suan(int[] arr){
Set<Integer> s1 = new HashSet(arr.length);
Set<Integer> s2 = new HashSet(arr.length);

for(int i : arr)
if(!s1.add(i))
s2.add(i);

System.out.println(s2);

}

}
wangkewens 2018-07-09
  • 打赏
  • 举报
回复
因为2是第十个元素,和前面9个都不相等,if(count2==9)里面的语句在j=9和j=10的时候执行了2次
楓VS痕 2018-07-09
  • 打赏
  • 举报
回复
上面代码写错了,修改一下
public static void suan(int[] arr) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[i] == arr[j] && i != j) {
break;
}
if (j == arr.length - 1) {
list.add(arr[i]);
}
}
}
System.out.println("出现一次的数字有:");
System.out.println(list);
}
楓VS痕 2018-07-09
  • 打赏
  • 举报
回复
当 i=9, j=8 时,count2=9,符合if(count2==9) 的条件,执行list.add(arr[i]),然后循环继续,i=9,j=9时,a[i] == a[j],count2不会自增 ,此时 count2=9,符合if(count2==9) 的条件,执行list.add(arr[i])。


不重复用如下算法会更简单
public static void suan(int[] arr) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length; j++) {
if (arr[i] == arr[j]) {
break;
}
}
list.add(arr[i]);
}
System.out.println();
System.out.println("出现一次的数字有:");
System.out.println(list);
}
遇见1995 2018-07-08
  • 打赏
  • 举报
回复
貌似if()count2==9)哪里
把数组最后一个数,再加入list了.

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧