线程“主” java.lang

时间:2018-08-15 17:32:38

标签: java

我已经用Java进行了一些培训,我想制作一个关于3x5矩阵中的随机数的局部程序,其中与其他列相比,一列中的每个数字可能属于不同的打数。

我会做一个更好的解释:

一行中可以有9和11,但不能有11和13,因为它们属于同一打(11-20)。知道Tombola游戏的人会理解它。

但是使用cmd编译和执行后的主要错误是下面的错误,线程main java.lang中的异常。

所以我希望您能为我提供帮助:毕竟我是一名新的Java程序员。

  

线程“主”中的异常java.lang.IndexOutOfBoundsException:索引   长度为0的0个边界           在java.base / jdk.internal.util.Preconditions.outOfBounds(未知来源)           在java.base / jdk.internal.util.Preconditions.outOfBoundsCheckIndex(未知   资源)           在java.base / jdk.internal.util.Preconditions.checkIndex(未知源)           在java.base / java.util.Objects.checkIndex(未知源)           在java.base / java.util.ArrayList.remove(未知源)           在Sheet。(Sheet.java:20)           在Sheet.main(Sheet.java:35)

import java.util.*;
import java.math.*;
class Sheet{
private int[][] tab;
public Sheet(){
    int [][] tab=new int [3][5];
    List<Integer> list=new ArrayList<Integer>();
    for(int l=10; l<=90; l+=10){
        list.add(l);
    }
    Random rand=new Random();
    for(int m=0; m<3; m++){
        for (int n=0; n<5; n++){
            tab[m][n]=rand.nextInt(90);
            int o=(int)tab[m][m];
            if(list.contains(o*10)){
                break;
            }
            else{ 
                list.remove(0*10);
                n--;
            }
        }
    }
}
public void printSheet(){
    for (int i = 0; i <3; i++) {
        for (int j = 0; j < 5; j++) {
                System.out.println(tab[i][j] + " ");
        }
        System.out.println();
    }
}
public static void main(String args[]){
    Sheet c=new Sheet();
    c.printSheet();
}
    }

2 个答案:

答案 0 :(得分:0)

remove的{​​{1}}号码比以前的list要多。

加法器循环

add

以l = 10,20,30,40,50,60,70,80,90运行,因此恰好是9次。

删除循环对

for(int l=10; l<=90; l+=10){
    list.add(l);
}

对于启动程序运行3 * 5 = 15次,因此很容易删除15个元素,由于for(int m=0; m<3; m++){ for (int n=0; n<5; n++){ tab[m][n]=rand.nextInt(90); int o=(int)tab[m][m]; if(list.contains(o*10)){ break; } else{ list.remove(0*10); n--; } } } ,它有可能多次运行到n--调用中。因此,您似乎从正好包含9个元素的列表中删除了随机且可能大量的元素。

(请注意,remove不会从列表中删除remove(x),但是第x个元素(在这种情况下始终是第一个元素-适用于前9次尝试,然后是{{1} }为空,没有第一个元素,就会引发您看到的异常)

答案 1 :(得分:0)

导致异常的原因是行

list.remove(0*10);

要检查,您可以像下面这样注释并运行

//list.remove(0*10);