【问题标题】:Filling a vertical matrix Java填充垂直矩阵Java
【发布时间】:2015-06-13 18:25:10
【问题描述】:

我正在尝试垂直填充矩阵,但缺少 1 行。你能帮助我吗 ?有代码。也许有一种更简单的方法可以垂直填充矩阵,但我找不到它。

public static void main(String[]args){
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the value of matrix: ");
    int n = input.nextInt();

    int [][] matrix = new int [n][n];


    for (int i = 1; i < matrix.length; i++) {
        matrix[0][i] = matrix[0][i -1] + n;

    }

    for(int i = 1; i < matrix.length; i++){
        for (int j = 0; j < matrix.length; j++){
        matrix[i][j] = matrix[i -1][j] + 1;

        System.out.print(matrix[i][j] + " ");

        }
            System.out.println();

    }

            input.close();
}

输出: Enter the value of matrix: 4 1 5 9 13 2 6 10 14 3 7 11 15

【问题讨论】:

  • 从填充循环中删除打印并在最后打印。您缺少第一行的打印,因为第二个循环从 1..

标签: java arrays matrix


【解决方案1】:

您的行丢失了,因为您从未在第一个循环中打印它(初始化第一行的那个) - 您应该在开头有一行 0 4 10 12。但是你可以只使用一个嵌套循环来更容易地做到这一点。

【讨论】:

    【解决方案2】:

    试试

     public static void main(String[]args){
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the value of matrix: ");
    int n = input.nextInt();
    
    int [][] matrix = new int [n][n];
    
    matrix[0][0]=0;  //you have forgotten the first value
    for (int i = 1; i < matrix.length; i++) {
        matrix[0][i] = matrix[0][i -1] + n;
        //initializing the first line
    }
    
    for(int i = 1; i < matrix.length; i++){
        for (int j = 0; j < matrix.length; j++){
        matrix[i][j] = matrix[i -1][j] + 1;
        }
    
        // re-loop to display but this time start with i=0
       for(int i = 0; i < matrix.length; i++){
        for (int j = 0; j < matrix.length; j++){
         System.out.print(matrix[i][j] + " ");
        }
    
            System.out.println();
    
    }
    
            input.close();
    }
    

    【讨论】:

    • @TashevTD 请您投赞成票,因为它是解决方案吗?谢谢。
    【解决方案3】:

    要垂直填充矩阵,您必须遍历外循环中的列和内(嵌套)循环中的行。例如:

    for(int j = 0; j < matrix.length; j++) {
    
        for(int i = 0; i < matrix.length; i++) {
    
            matrix[i][j] = /* The value you want to fill */;
            .../* Other stuff you wanna do */
        }
    }
    

    【讨论】:

      【解决方案4】:

      有一种更简单的方法:

      保留一个像 count 这样的变量,并先在列上迭代矩阵,然后在行上迭代:

      int count = 1; // or 0 if you start with 0
      int[][] a = new int[n][n];
      for (int i = 0; i < n; i++)
          for (int j = 0; j < n; j++) {
               a[j][i] = count; // notice j first then i 
               count++;
          }
      

      之后,您可以轻松打印出值:

      for (int i = 0; i < n; i++)
          for (int j = 0; j < n; j++)
              System.out.println(a[i][j]);
      

      【讨论】: