我试图在不使用ArrayList的情况下创建一个二维数组。我成功地创建了数组但是在尝试从另一个方法打印数组时遇到了麻烦,因为该数组不是静态的。但是,我不能使数组静态,因为我也允许用户决定数组的大小。我以为我可以覆盖数组然后打印它但只返回空值。是否应该使用可变长度参数?
public class Array {
public static int[][] array1;
public static void makeArray(){
int [][] array1 = new int [Menu.arrayRow][Menu.arrayCol];
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[0].length; j++) {
array1[i][j] = (i * array1[0].length) + j + 1;
}
}
}// end of makeArray
public static void displayArray(){
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[0].length; j++) {
array1[i][j] = (i * array1[0].length) + j + 1;
System.out.print(array1[i][j] + ", ");
}
System.out.println("");
}
}// end of displayArray
这是运行程序并从菜单中选择项目#11以显示数组的结果:
run:
Enter the number of rows for the array:5
Enter the number of columns for the array:5
========================================
1. Insert a Row
2. Insert a Column
3. Swap rows
4. Swap columns
5. Swap Upper and Lower triangles
6. Display the triangles
7. Reverse the contents of a column
8. Reverse the diagnal
9. Swap diagnals
10. Display a subsection of the current 2D array
11. Display the array
12. Exit
Choose an option from the menu :
11
========================================
答案 0 :(得分:2)
您在create方法范围内再次重新声明数组:
int [][] array1 = ...
删除它:
array1 = ...
访问类级别数组。
声明局部变量时,您将在makeArray
方法中访问该变量,而不是静态字段。然后,当您调用下一个方法时,该字段仍为null。小心不要遮蔽&#39;具有局部变量的类变量。
答案 1 :(得分:0)
从makeArray
返回数组并将数组传递给displayArray
。我还会将row
和col
计数作为参数传递给create。像,
public class Array {
public static int[][] makeArray(int row, int col) {
int[][] array1 = new int[row][col];
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
array1[i][j] = (i * array1[i].length) + j + 1;
}
}
return array1;
}// end of makeArray
public static void displayArray(int[][] array1) {
System.out.println(Arrays.deepToString(array1));
}
}