带有arrayList bug java的循环
我不知道我为什么会遇到这个问题。但基本上我是在洗牌一个单词,我使用的是带循环的arrayList 这是我的代码,出于调试目的,我添加了几行代码带有arrayList bug java的循环,java,Java,我不知道我为什么会遇到这个问题。但基本上我是在洗牌一个单词,我使用的是带循环的arrayList 这是我的代码,出于调试目的,我添加了几行代码 //Declare and Initialize an arrayList for character checking ArrayList<Boolean> jumbleVerfiy = new ArrayList<Boolean>(); for(int x = 0; x < chosenWord.
//Declare and Initialize an arrayList for character checking
ArrayList<Boolean> jumbleVerfiy = new ArrayList<Boolean>();
for(int x = 0; x < chosenWord.length(); x++)
jumbleVerfiy.add(false);
while((chosenWord.length()) != (jumbledWord.length()))
{
//Generate random number for getting the random character
int verficationNumber = rnd.nextInt(chosenWord.length());
//Checks if the random number generated has been used before
if(jumbleVerfiy.get(verficationNumber) == false)
{
//Get the character from the randomly generated number and change the boolean array to keep track of
//letters used
jumbledWord += chosenWord.charAt(verficationNumber);
System.out.print(jumbleVerfiy.get(verficationNumber) + " " + verficationNumber);//debug
jumbleVerfiy.add(verficationNumber, true);
System.out.println(" " + jumbledWord + " " + jumbleVerfiy.get(verficationNumber));//debug
}
在这个输出中,4在第二次运行时被更改为true,但是当它循环时,由于某种原因被设置为false。所以我一直收到一封复信。我不确定是什么问题。我想了解一下
谢谢,在您的代码中,您需要使用
jumbleVerfiy.set(verficationNumber, true);
另外,它将被添加到您需要使用的代码中的arrayList中
jumbleVerfiy.set(verficationNumber, true);
其他,它只会添加到arrayList中您正在向列表中添加值,而不是设置值:
jumbleVerfiy.add(verficationNumber, true);
这意味着,例如,如果您先选择第二个字母,然后选择第二个字母,列表最终看起来就像(T,F,T,…)一样,就像您选择了第一个和第三个字母一样
您需要使用:
jumbleVerfiy.set(verficationNumber, true);
您正在向列表中添加值,而不是设置值:
jumbleVerfiy.add(verficationNumber, true);
这意味着,例如,如果您先选择第二个字母,然后选择第二个字母,列表最终看起来就像(T,F,T,…)一样,就像您选择了第一个和第三个字母一样
您需要使用:
jumbleVerfiy.set(verficationNumber, true);
因为您将新项设置为带有索引的arraylist(
add(index,value)
)。如果设置了索引3以外的项,则索引3旧项将变为索引4。因为您将新项设置为带有索引的arraylist(add(index,value)
)。如果设置项(例如索引3),则索引3旧项将变为索引4。在循环中,您在设置值时错误地向数组添加了新值。冒犯的界线是:
jumbleVerfiy.add(verficationNumber, true);
它应该调用set(index,value)
。这应该可以解决你的问题。您还可以考虑使用数组而不是ArrayList来避免与ArrayList相关联的开销,因为在ArrayList初始化后不需要展开
这将是:
boolean[] jumbleVerify = new boolean[chosenWord.length()];
在循环中,当您应该设置一个值时,您错误地向数组中添加了一个新值。冒犯的界线是:
jumbleVerfiy.add(verficationNumber, true);
它应该调用set(index,value)
。这应该可以解决你的问题。您还可以考虑使用数组而不是ArrayList来避免与ArrayList相关联的开销,因为在ArrayList初始化后不需要展开
这将是:
boolean[] jumbleVerify = new boolean[chosenWord.length()];
我认为您的问题在于您正在使用:
jumbleVerfiy.add(verficationNumber, true);
这增加了位置的价值。改为使用以下选项,并应起作用:
jumbleVerfiy.set(verficationNumber, true);
我认为您的问题在于您正在使用:
jumbleVerfiy.add(verficationNumber, true);
这增加了位置的价值。改为使用以下选项,并应起作用:
jumbleVerfiy.set(verficationNumber, true);
不,它不会被添加到结尾-它将被插入到指定位置。不,它不会被添加到结尾-它将被插入到指定位置。