我有时会出错,有时却不会?
I sometimes get errors and sometimes I don't?
我正在制作宾果游戏程序。
我目前只想制作代表宾果卡上数字的二维数组。
第 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]
的值为空。
稍后,您打乱 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;
}
我正在制作宾果游戏程序。 我目前只想制作代表宾果卡上数字的二维数组。 第 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]
的值为空。
稍后,您打乱 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;
}