Java - 创建一个可以通过其他方法操作和打印的二维数组

时间:2018-03-13 02:17:41

标签: java arrays variable-length

我试图在不使用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
========================================

enter image description here

2 个答案:

答案 0 :(得分:2)

您在create方法范围内再次重新声明数组:

int [][] array1 = ...

删除它:

array1 = ...

访问类级别数组。

声明局部变量时,您将在makeArray方法中访问该变量,而不是静态字段。然后,当您调用下一个方法时,该字段仍为null。小心不要遮蔽&#39;具有局部变量的类变量。

答案 1 :(得分:0)

makeArray返回数组并将数组传递给displayArray。我还会将rowcol计数作为参数传递给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));
    }
}