我正在尝试创建一个输出模式的数组,具体取决于我为输入提供的行和列的数量,并且当它到达第三个方法时我收到错误。我明白数组从索引零开始,如果我为矩阵输入(0 0)它超出界限但我不知道如何解决问题。谢谢你的帮助!
这是第一堂课的代码:
public class Transpose {
public static int [][] createPatterned2DArray(int rows, int cols)
{
int [][] table = new int [rows] [cols];
for (int numRows = 0; numRows < table.length; numRows++){
for (int numCols = 0; numCols < table[0].length; numCols++){
table [numRows][numCols] = 10 + rows*(numRows +1) + numCols;
}
}
return table;
}
public static void print2DArray (int[][] matrix)
{
for (int row = 0; row < matrix.length; row++)
{
for (int col = 0; col < matrix[0].length; col++)
{
System.out.printf("%-4d",matrix[row][col]);
}
System.out.println();
}
}
public static void print2DArrayTransposed(int [][] matrix)
{
for (int row = 0; row < matrix[0].length; row++)
{
for (int col = 0; col < matrix.length; col++)
{
//try {
// if (matrix[0] == 0) {
// System.out.println(matrix[0][0]);
// throw new Exception();
System.out.printf("%-4d",matrix [col][row]);
// }
//catch (Exception e){
// System.out.print(e);
}
System.out.println();
}
}
}
这是第二节课:
import java.util.*;
public class TestTranspose extends Transpose {
public static void main(String[] args)
{
Scanner scan = new Scanner (System.in);
int rows = scan.nextInt();
int cols = scan.nextInt();
int [][] table = createPatterned2DArray(rows,cols);
print2DArray(table);
System.out.println();
print2DArrayTransposed(table);
System.out.println();
}
}
这是我得到的错误,它让我疯了! 当我为数组输入(0 0)的输入时,我似乎无法绕过如何抛出异常或使输出不显示任何内容。如何纠正这行不允许输出(0 0)数组的代码?
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Transpose.print2DArrayTransposed(Transpose.java:32)
at TestTranspose.main(TestTranspose.java:13)
答案 0 :(得分:2)
如果没有首先确保<html>
<head>
<base href="/">
</head>
</html>
,您就无法安全地matrix[0].length
。在另外两种方法中,matrix.length != 0
上的外部循环会处理这个问题。
但在row
中,你的外环正在尝试print2DArrayTransposed
;即使在row < matrix[0].length
时也无法阻止它尝试这样做。您可以通过以下两种方式之一解决此问题:在matrix.length == 0
的顶部添加此提前纾困:
print2DArrayTransposed
或将'row'上的外循环更改为:
if (matrix.length == 0)
return;
答案 1 :(得分:0)
在Transpose.print2DArrayTransposed()
方法中查看这行代码:
for (int row = 0; row < matrix[0].length; row++)
您正在尝试访问matrix
的第一个元素,但没有元素,因为长度为零。
0x0数组有效,因此无需首先禁止创建数组。我的建议只是简单地检查方法的开头是否matrix
的长度为零,如果是,则返回,因为没有要打印的内容(或者打印一些有用的消息)。
public static void print2DArrayTransposed(final int[][] matrix) {
if (matrix.length == 0) {
return;
}
//...
}