【问题标题】:problem with random number generation随机数生成问题
【发布时间】:2023-04-02 21:28:01
【问题描述】:
ArrayList <String> fil = new ArrayList<String>(); 
ArrayList <String> lif = new ArrayList<String>();

int x=0;
long tim = System.currentTimeMillis(); 
Random random = new Random(tim); 
for(int i=0;i<fil.size();i++)
{
 x =random.nextInt(fil.size());
         for(int y=0;y<lif.size();y++)
         {
             if(fil.get(x).equals(lif.get(y)))
             {
                 i--;
                 continue;
             }
         }
         System.out.println("Set the value of x"+x);
          lif.add(i, fil.get(x));//array index out of bound exception


     }

我正在尝试以不同的顺序将 ArrayList fil 的内容复制到 lif,但我在注释行中得到了 ArrayIndexOutOfBoundException。我正在使用嵌套的 for 循环来检查 new ArrayList 的元素是否唯一。

【问题讨论】:

  • 非常感谢大家 :) 我使用了 Collections.shuffle 方法,它很棒:)

标签: java android arraylist indexoutofboundsexception


【解决方案1】:

为什么不试试Collections.copyCollections.shuffle 方法。

【讨论】:

    【解决方案2】:

    Collections.shuffle 不是更好的选择吗?

    【讨论】:

      【解决方案3】:

      在重新洗牌内容之前,必须预先分配“lif”-ArrayList 以保存“fil.size()”元素。在进入 for 循环之前尝试添加“fil.size()”空元素。

      注意!这是一种非常无效的重新洗牌方法,请参阅Collections.reshuffle() 以获得更好的方法。

      【讨论】:

        【解决方案4】:
        if(fil.get(x).equals(lif.get(y)))
        {
            i--;
            continue;
        }
        

        一个可能的问题是“i”是否为 0(零)。递减i-- 会将'i' 设置为-1,这将导致异常...lif.add(i, fil.get(x));

        这可能不是答案,但您应该检查 i、x 和 y 是否都在 ArrayList 对象的范围内。

        【讨论】:

          【解决方案5】:

          将注释行修改为:

          lif.add(fil.get(x));
          

          这应该修复异常。但是,您的算法看起来不太好。

          【讨论】:

            【解决方案6】:

            将代码更改为此并检查是否有效

            x =random.nextInt(fil.size() - 1);
            

            【讨论】:

            • 来自 nextInt(int n) 文档:返回一个伪随机、均匀分布的 int 值,介于 0(含)和指定值(不含)之间,取自此随机数生成器的序列。
            猜你喜欢
            • 2016-05-26
            • 2013-06-03
            • 1970-01-01
            • 2017-04-10
            • 2014-07-20
            • 2018-10-11
            • 1970-01-01
            • 2011-05-18
            • 2014-06-14
            相关资源
            最近更新 更多