• 主页
  • Java SE
  • J2ME
  • Web开发
  • Java EE
  • Eclipse

哪位大神帮我看下这JAVA代码有什么问题?为什么后面的结果不正确?

qq_28484955 2019-09-06 03:43:27
import java.util.*; public class Main { public static void main(String[] args) { ArrayList<String> a=new ArrayList<>(); ArrayList<String> b=new ArrayList<>(); ArrayList<String> c=new ArrayList<>(); a.add("1,2,3,4,5,6,7"); a.add("1,3,9,4,5,6,8"); a.add("4,3,4,5,6,7,8"); a.add("1,2,3,4,7,8,9"); a.add("1,7,3,5,7,8,10"); a.add("1,2,3,4,6,7,8"); a.add("1,2,3,4,5,6,7"); a.add("11,12,13,14,15,16,17"); b.add("1,2"); b.add("5,6"); for (String s1 : b) { int cnt=0; List list1 = new ArrayList<String>(Arrays.asList(s1.split(","))); for (String s2 : a) { List list2 = new ArrayList<String>(Arrays.asList(s2.split(","))); list1.retainAll(list2); if(list1==null){ cnt++; } else{ cnt=0; } System.out.println(list1); System.out.println(list2); System.out.println(cnt); }} } }
...全文
85 点赞 收藏 8
写回复
8 条回复
qybao 2019年09月07日
这是我写的例子代码吧? 之前那个帖子的要求是什么来的? 我记得我不是取交集啊,而是list2.containsAll(list1)判断是否包含,即 if (list2.containsAll(list1)) cnt++; else cnt=0; 当然,取交集也可以,只是这样会改变集合的内容,而且即使没有交集,list1也不会变成null,只会是个空集(list1的size为0),所以cnt的累加也不正确 而且,这点很重要,list1.retainsAll(list2)以后,list1的内容就变了,所以list2的下一轮循坏(内层循坏),list1就不准确了(不是外层循环开始的值了),所以你打印的结果就不正确了 所以建议还是用containsAll,简单明了。如果非要用retainsAll,应该先保存list1的值,再做交集 即 List list3 = new ArrayList(list1); list3.retainsAll(list2); if (list3.size()==list1.size()) cnt++; //交集结果和原来一样,说明list2包含list1 esle cnt=0;
回复 点赞
qq_28484955 2019年09月07日
引用 5 楼 qybao的回复:
这是我写的例子代码吧? 之前那个帖子的要求是什么来的? 我记得我不是取交集啊,而是list2.containsAll(list1)判断是否包含,即 if (list2.containsAll(list1)) cnt++; else cnt=0; 当然,取交集也可以,只是这样会改变集合的内容,而且即使没有交集,list1也不会变成null,只会是个空集(list1的size为0),所以cnt的累加也不正确 而且,这点很重要,list1.retainsAll(list2)以后,list1的内容就变了,所以list2的下一轮循坏(内层循坏),list1就不准确了(不是外层循环开始的值了),所以你打印的结果就不正确了 所以建议还是用containsAll,简单明了。如果非要用retainsAll,应该先保存list1的值,再做交集 即 List list3 = new ArrayList(list1); list3.retainsAll(list2); if (list3.size()==list1.size()) cnt++; //交集结果和原来一样,说明list2包含list1 esle cnt=0;
现在出现新问题了,就是list 3连续为空cnt不累加。应该是连续为空累加,遇到不为空则归零!
回复 点赞
qq_28484955 2019年09月07日
引用 5 楼 qybao的回复:
这是我写的例子代码吧? 之前那个帖子的要求是什么来的? 我记得我不是取交集啊,而是list2.containsAll(list1)判断是否包含,即 if (list2.containsAll(list1)) cnt++; else cnt=0; 当然,取交集也可以,只是这样会改变集合的内容,而且即使没有交集,list1也不会变成null,只会是个空集(list1的size为0),所以cnt的累加也不正确 而且,这点很重要,list1.retainsAll(list2)以后,list1的内容就变了,所以list2的下一轮循坏(内层循坏),list1就不准确了(不是外层循环开始的值了),所以你打印的结果就不正确了 所以建议还是用containsAll,简单明了。如果非要用retainsAll,应该先保存list1的值,再做交集 即 List list3 = new ArrayList(list1); list3.retainsAll(list2); if (list3.size()==list1.size()) cnt++; //交集结果和原来一样,说明list2包含list1 esle cnt=0;
谢谢,我按照你说的new一个list3,就达到了想要的效果了。谢谢你! ArrayList<String> a=new ArrayList<>(); ArrayList<String> b=new ArrayList<>(); ArrayList<String> c=new ArrayList<>(); a.add("1,2,3,4,5,6,7"); a.add("1,3,9,4,5,6,8"); a.add("1,3,4,5,6,7,8"); a.add("1,2,3,4,7,8,9"); a.add("1,7,3,5,7,8,10"); a.add("1,2,3,4,6,7,8"); a.add("1,2,3,4,5,6,7"); a.add("11,12,13,14,15,16,17"); b.add("1,2"); b.add("5,6"); for (String s1 : b) { List list1 = new ArrayList<String>(Arrays.asList(s1.split(","))); for (String s2 : a) { int cnt=0; List list2 = new ArrayList<String>(Arrays.asList(s2.split(","))); List list3 = new ArrayList(list1); list3.retainAll(list2); if(list3.size()==0){ cnt++; } else{ cnt=0; } System.out.println(list1); System.out.println(list2); System.out.println(list3); System.out.println(cnt); }}
回复 点赞
qq_28484955 2019年09月07日
引用 5 楼 qybao的回复:
这是我写的例子代码吧? 之前那个帖子的要求是什么来的? 我记得我不是取交集啊,而是list2.containsAll(list1)判断是否包含,即 if (list2.containsAll(list1)) cnt++; else cnt=0; 当然,取交集也可以,只是这样会改变集合的内容,而且即使没有交集,list1也不会变成null,只会是个空集(list1的size为0),所以cnt的累加也不正确 而且,这点很重要,list1.retainsAll(list2)以后,list1的内容就变了,所以list2的下一轮循坏(内层循坏),list1就不准确了(不是外层循环开始的值了),所以你打印的结果就不正确了 所以建议还是用containsAll,简单明了。如果非要用retainsAll,应该先保存list1的值,再做交集 即 List list3 = new ArrayList(list1); list3.retainsAll(list2); if (list3.size()==list1.size()) cnt++; //交集结果和原来一样,说明list2包含list1 esle cnt=0;
谢谢你,看了你的回复我知道为什么了。我想做的是求两个集合的交集,如果没有交集。则cnt+1,如果有则记录交集元素!用containALL是所有包含,我不知道怎么求一个交集都没有的情况!
回复 点赞
qq_28484955 2019年09月06日
引用 1 楼 oh_Maxy的回复:
你预期结果是啥呢?
输出list1结果!
回复 点赞
qq_28484955 2019年09月06日
引用 2 楼 qq_28484955的回复:
[quote=引用 1 楼 oh_Maxy的回复:]你预期结果是啥呢?
运行结果到a集合第四条后面结果全跟第四条一样,本来应该每一条结果不一样的![/quote] 输出list 1结果!
回复 点赞
qq_28484955 2019年09月06日
引用 1 楼 oh_Maxy的回复:
你预期结果是啥呢?
运行结果到a集合第四条后面结果全跟第四条一样,本来应该每一条结果不一样的!
回复 点赞
oh_Maxy 2019年09月06日
你预期结果是啥呢?
回复 点赞
发动态
发帖子
Java
创建于2007-09-28

1.8w+

社区成员

8.1w+

社区内容

Java相关技术讨论
社区公告
暂无公告