带有arrayList bug java的循环

带有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.

我不知道我为什么会遇到这个问题。但基本上我是在洗牌一个单词,我使用的是带循环的arrayList

这是我的代码,出于调试目的,我添加了几行代码

//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);

不,它不会被添加到结尾-它将被插入到指定位置。不,它不会被添加到结尾-它将被插入到指定位置。