gpt4 book ai didi

Java 程序无缘无故地无限循环

转载 作者:行者123 更新时间:2023-12-01 13:46:38 25 4
gpt4 key购买 nike

我有两个ArrayList<ArrayList<String>>的尺寸相同。下面的代码检查是否对应ArrayList s 具有任何相等的元素。如果它们这样做,它们都会被打乱,程序会重新检查并重复。

boolean b=true;
int counter=0;
while(b==true)
{
for(int i=0; i<arraylist1.size(); i++)
{
for(int j=0; j<arraylist2.size(); j++)
{
for(String s1: arraylist1.get(i))
{
for(String s2: arraylist2.get(j))
{
if(s1.equals(s2))
{
counter++;
}
}
}
}
}

if(counter==0)
{
b=false;
}
else
{
long random = System.nanoTime();
Collections.shuffle(arraylist1, new Random(random));

long random2 = System.nanoTime();
Collections.shuffle(arraylist2, new Random(random2));

counter=0;
}
}

据我所知,问题不是:我知道这两个 ArrayList 并不是这样的。 s 必须有对应的ArrayList具有相同元素的(即,对 ArrayList 进行了改组,使得所有相应的 ArrayList 都将具有不同的元素)。我也知道这不是计算时间。

我认为问题可能是什么:我认为我调用的洗牌方法本质上是“非随机”的,但老实说,我不知道为什么这不起作用。事实上,当我使用代码 b=false 执行此程序时最后(无论如何,让我脱离循环,看看arraylist1arraylist2如何比较)ArrayList大多数时候(相应地)是不同的!尽管如此,程序总是会陷入无限循环!

最佳答案

您似乎想要比较同等位置的字符串,而不是所有字符串 - 正如 Chris Hayes 所说,洗牌不会阻止 s1 和 s2 相等,它们只是处于不同的位置。听起来你需要做这样的事情:

for (int i = 0; i < arraylist1.size(); i++) {
List<String> list1 = arraylist1.get(i);
List<String> list2 = arraylist2.get(i);

// Check if the two lists have any elements in common
for (String s1 : list1) {
if (list2.contains(s1)) {
counter++;
}
}
}

关于Java 程序无缘无故地无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com