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

标签 java function class exception random

我正在制作宾果游戏节目。 我目前只想制作代表宾果卡上数字的二维数组。 第 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++;
    }

}

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

最佳答案

这可能是原因:

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

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

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

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

在某些情况下,由于Integer数组被打乱,空元素将是前五个元素之一。由于您尝试将 Integer 分配给 int,因此将通过使用 intValue 方法进行拆箱;如果是 null 元素,则会抛出 NullPointerException。

一个简单的解决方案是使用 arrayIndex 就像您在其他循环中所做的那样,并将数组的大小减少到 15 以避免其中包含 null 元素。

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

关于java - 我有时会出错,有时不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29481658/

相关文章:

ios - 当 View 出现时执行函数 - Swift

python - 这个输出的具体名称是什么?

python - 使用不是来自派生类的变量初始化基类

c++ - 如何将重载的成员函数作为参数传递?

java - 我无法在文件的新行中写入数据

java - 玩!框架和 ElasticSearch StackOverflowError

java - Apache CXF LoggingInInterceptor 已弃用 - 改用什么?

javascript - 分配给 {}.toString 是什么意思?

c++ - 复制在指针数组中动态创建的指针

java - Android 以编程方式打开设置-> 按钮单击上的安全选项卡