【问题标题】:Java Array index out of bounds while making a string [duplicate]制作字符串时Java Array索引超出范围[重复]
【发布时间】:2014-04-28 18:50:15
【问题描述】:

我正在编写一个在字符串中生成一些唯一整数的代码,但我突然遇到了一个异常,我不太明白这里有什么问题,因为我快完成了。现在发生了什么我不知道。

这是我的代码:

String[] res = new String[12];
        int[] ia = {1, 6, 9};
        int[] ai = {97, 79, 8};
        int[] a = new int[10];
        for(int i = 0; i < a.length; i++){
            a[i] = (ia[new Random().nextInt(3)] ^ (ai[new Random().nextInt(3)] * i));
            for(int j = 0; j < res.length; j++){
                if(a[i] >= j){
                    res[j * i] = "J:" + (a[i] * a[new Random().nextInt(10)]); //exception
                } else if(a[i] <= j){
                    res[j * i] = "J:" + (-(a[i] * a[new Random().nextInt(10)]));
                }
            }
        } 

这里是抛出的异常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
    at testy.main(unique.java:15)

【问题讨论】:

  • 数组是从零开始的。您正在访问第 13 个元素。寻找其中的众多副本之一。
  • 这段代码有很多错误,除了数组的声明,我什至找不到好的代码行......
  • @MatejSpili 说了什么。一方面,您应该像这样创建新的Random() 对象。您最终会多次获得完全相同的数字。在循环开始时创建一个,并为那里的所有内容使用相同的。

标签: java arrays exception random int


【解决方案1】:

查看 i 和 j 的最大值。您会看到 res[j * i] 将超过您为其分配的空间,因此会出现越界异常

【讨论】:

    【解决方案2】:

    在你的第一个为你从 0 到 9 (a.length = 10)。在第二个你从 0 到 11 (res.length=12)。

    res[j * i] 中的j*i 将超过 res (12) 的限制,其简单值为 2 和 10。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2019-08-17
      • 2015-04-01
      • 2012-01-15
      • 2014-06-12
      • 2012-06-04
      相关资源
      最近更新 更多