繁体   English   中英

线程“main”java.lang 中的异常

[英]Exception in thread "main" java.lang

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

我会做一个更好的解释:

在一行中,您可以有 9 和 11,但不能有 11 和 13,因为它们属于同一打(11-20 之一)。 了解 Tombola 游戏的人都会明白。

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

所以我希望你能帮助我:毕竟我是一个新的 Java 程序员。

线程“main”中的异常 java.lang.IndexOutOfBoundsException:在 java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source) at java.base/jdk.internal.util 处,长度为 0 的索引 0 越界.Preconditions.outOfBoundsCheckIndex(Unknown Source) at java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source) at java.base/java.util.Objects.checkIndex(Unknown Source) at java.base/java.util .ArrayList.remove(Unknown Source) at Sheet.(Sheet.java:20) at 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();
}
    }

您从list remove数字多于您之前add数字。

加法器循环

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

以 l=10,20,30,40,50,60,70,80,90 运行,所以正好 9 次。

卸妆环对

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--;
        }
    }
}

starter 运行 3*5=15 次,因此可以轻松删除 15 个元素,并且由于n--它可能会在remove调用上运行更多次。 因此,您似乎从恰好包含 9 个元素的列表中删除了随机且可能大量的元素。

(请注意, remove(x)不会从列表中删除x ,而是从第 x 个元素中删除,在这种情况下总是第一个 - 适用于前 9 次尝试,然后list为空,没有第一个元素,引发异常你看)

异常的原因是行

list.remove(0*10);

检查你可以像下面这样评论并运行

//list.remove(0*10);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM