有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我有时会出错,有时不会?

我在做宾果游戏。 我现在只想制作代表宾果卡上数字的2D数组。 列1只能包含1-15 第2栏16-30 第3栏31-45等

到目前为止,这是我的代码,有时会抛出异常,但有时不会,这很奇怪

private int[][] bingoCard = new int [5][5];
public BingoCard()
{
    int [][]bingoCardInit  = new int [5][5];
    bingoCard = bingoCardInit;
}

public void fillInCard()
{
    int arrayIndex = 0;
    Integer[] arr = new Integer[16];
    for (int i = 1; i <= 15; i++) 
    {
        arr[i] = i;
    }
    Collections.shuffle(Arrays.asList(arr));
    for(int rowIndex = 0; rowIndex<5; rowIndex++)
    {
        bingoCard[0][rowIndex] = arr[rowIndex];
        System.out.println(bingoCard[0][rowIndex]);
    }

    Integer[] arr1 = new Integer[16];
    for (int i = 16; i <= 30; i++) 
    {
        arr1 [arrayIndex]= i;
        arrayIndex++;
    }
    Collections.shuffle(Arrays.asList(arr1));
    arrayIndex = 0;
    for(int rowIndex = 0; rowIndex<5; rowIndex++)
    {
        bingoCard[1][arrayIndex] = arr1[rowIndex];
        System.out.println(bingoCard[1][arrayIndex]);
        arrayIndex++;
    }

    arrayIndex = 0;
    Integer[] arr2 = new Integer[16];
    for (int i = 31; i <= 45; i++) 
    {
        arr2 [arrayIndex]= i;
        arrayIndex++;
    }
    Collections.shuffle(Arrays.asList(arr2));
    arrayIndex = 0;
    for(int rowIndex = 0; rowIndex<5; rowIndex++)
    {
        bingoCard[2][arrayIndex] = arr2[rowIndex];
        System.out.println(bingoCard[2][arrayIndex]);
        arrayIndex++;
    }

    arrayIndex = 0;
    Integer[] arr3 = new Integer[16];
    for (int i = 46; i <= 60; i++) 
    {
        arr3 [arrayIndex]= i;
        arrayIndex++;
    }
    Collections.shuffle(Arrays.asList(arr3));
    arrayIndex = 0;
    for(int rowIndex = 0; rowIndex<5; rowIndex++)
    {
        bingoCard[3][arrayIndex] = arr3[rowIndex];
        System.out.println(bingoCard[3][arrayIndex]);
        arrayIndex++;
    }

}

我只是想知道为什么它有时会抛出一个异常


共 (1) 个答案

  1. # 1 楼答案

    这可能就是为什么:

    Integer[] arr = new Integer[16];
    for (int i = 1; i <= 15; i++) 
    {
        arr[i] = i;
    }
    

    在循环中,初始化数组中除第一个元素之外的所有元素。因此arr[0]的值为空

    稍后,洗牌Integer数组中的元素,并尝试将前五个值分配给int[][]数组

    Collections.shuffle(Arrays.asList(arr));
    for(int rowIndex = 0; rowIndex<5; rowIndex++)
    {
        bingoCard[0][rowIndex] = arr[rowIndex];
    

    在某些情况下,由于Integer数组被洗牌,null元素将是前五个元素之一。由于您正试图将Integer分配给int,因此在使用intValue方法的过程中会发生解装箱;对于null元素,会抛出NullPointerException

    一个简单的解决方案是像在其他循环中一样使用arrayIndex,并将数组的大小减少到15,以避免数组中的元素为空

    Integer[] arr = new Integer[15];
    for (int i = 1; i <= 15; i++) 
    {
        arr[arrayIndex++] = i;
    }