Java 如何输出数字递增的下三角矩阵?

Java 如何输出数字递增的下三角矩阵?,java,Java,我附上了一个我的任务是创建的例子。现在我只关注矩阵的下三角部分。由于某种原因,当我运行程序时,输出是完全空白的。非常感谢您的帮助 while(行和列20){ System.out.print(“多少行和多少列(最少4行,最多20行)”; rowsAndColumns=input_scanner.nextInt(); } int[][]intMatrix=新的int[rowsAndColumns][rowsAndColumns]; System.out.print(“整数填充正方形(0到50之间)

我附上了一个我的任务是创建的例子。现在我只关注矩阵的下三角部分。由于某种原因,当我运行程序时,输出是完全空白的。非常感谢您的帮助

while(行和列<4 | |行和列>20){
System.out.print(“多少行和多少列(最少4行,最多20行)”;
rowsAndColumns=input_scanner.nextInt();
}
int[][]intMatrix=新的int[rowsAndColumns][rowsAndColumns];
System.out.print(“整数填充正方形(0到50之间)的起始数字是多少):”;
startingNumber=input_scanner.nextInt();
对于(x=0;x
现在我只关注下三角部分
矩阵

您的程序中有一个非常小的错误。在y的内部循环中,您需要从y=x开始,而不是从y=0开始。下面是将打印下三角的工作示例:

    Integer rowsAndColumns = 0;
    Integer startingNumber = 0;

    Scanner input_scanner = new Scanner(System.in);
    System.out.print("How many rows and columns (min 4 & max 20)? ");
    rowsAndColumns = input_scanner.nextInt();

    System.out.print("What is the starting number for your integer filled square (between 0 and 50 inclusive): ");
    startingNumber = input_scanner.nextInt();

    int[][] intMatrix = new int[rowsAndColumns][rowsAndColumns];

    for (int x = 0; x <= (rowsAndColumns - 1); x++) {
        for (int y = x; y <= (rowsAndColumns - 1); y++) {
            intMatrix[y][x] = startingNumber;
            startingNumber++;
        }
    }

    for (int x = 0; x < intMatrix.length; x++) {
        for (int y = 0; y < intMatrix[x].length; y++) {
            System.out.print(intMatrix[x][y] + " ");
        }
        System.out.println("");
    }
整数行和列=0;
整数起始数=0;
扫描器输入\扫描器=新扫描器(System.in);
System.out.print(“多少行和多少列(最少4行,最多20行)”;
rowsAndColumns=input_scanner.nextInt();
System.out.print(“整数填充正方形(0到50之间)的起始数字是多少):”;
startingNumber=input_scanner.nextInt();
int[][]intMatrix=新的int[rowsAndColumns][rowsAndColumns];

对于(int x=0;x这个答案基于这样一个灵感:虽然您所需的输出很难用Java术语表达,但该矩阵的转置实际上非常简单:

 1  2  3  4  5
25  6  7  8  9
24 23 10 11 12
22 21 20 13 14
19 18 17 16 15
很明显,要生成上面的矩阵,我们可以保留两个计数器,分别从1和25开始,然后填充每一行。一旦生成了这个矩阵,我们就可以打印转置以获得您想要的实际输出

int size = 5;
int[][] matrix = new int[size][size];

int start = 1;
int end = size*size;

for (int r=0; r < size; ++r) {
    int col=0;
    while (col < r) {
        matrix[r][col++] = end--;
    }
    while (col < size) {
        matrix[r][col++] = start++;
    }
 }

// now print the transpose:
for (int r=0; r < size; ++r) {
    for (int c=0; c < size; ++c) {
         System.out.print(matrix[c][r] + " ");
    }
    System.out.println("");
}

在这里,我根据您的任务制定了一个解决方案

在您的任务中,第一级挑战是根据用户输入的起始数计算矩阵的最后一个元素,这将是任意值,根据您的任务,起始数是1,因此很容易计算,但在这里,我制作了一个公式来计算矩阵的最后一个元素

假设您输入的矩阵大小为X*X,起始数字为M,如果我用K表示矩阵的最后一个元素,则:

K = totalMatrixElement(X*X) + (M-1);
现在,我有矩阵的上下元素,它们是:

lowerConter = M and upperCounter = K
现在,我已经准备好填写我的矩阵,并以各种格式打印出我的矩阵,如displayCompleteMatrix、displayLowerTrangleMatrix或displayUpperTrangleMatrix

看看我的节目:

package com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LowerTrangleMatrix {

  public static void main(String...strings) throws NumberFormatException, IOException {

    BufferedReader read = new BufferedReader(new InputStreamReader(System.in));

    int rowsAndColumns = 0;
    boolean flag = true;
    do {
      try {
        System.out.println("How many rows and columns (min 4 & max 20)? ");
        rowsAndColumns = Integer.parseInt(read.readLine());

        if ((rowsAndColumns > 3 && rowsAndColumns < 21)) {
          System.out.println("Your row * column is " + rowsAndColumns + "*" + rowsAndColumns);
          flag = false;
        } else {
          System.out.println("Your Input is Not Acceptable try again...");
        }
      } catch (NumberFormatException ex) {
        System.out.println("Input must be Integer.");
      }

    } while (flag);

    int[][] matrix = new int[rowsAndColumns][rowsAndColumns];
    int startingNumber = 0;
    flag = true;

    do {
      try {
        System.out.print("What is the starting number for your integer filled square (between 0 and 50 inclusive): ");
        startingNumber = Integer.parseInt(read.readLine());
        if ((startingNumber > 0 && startingNumber < 50)) {
          System.out.println("Your matrix will be start fillup with : " + startingNumber);
          flag = false;
        } else {
          System.out.println("Your Input is Not Acceptable try again...");
        }
      } catch (NumberFormatException ex) {
        System.out.println("Input must be Integer.");
      }
    } while (flag);


    matrixFill(matrix, rowsAndColumns, startingNumber);
    displayCompleteMatrix(matrix, rowsAndColumns);
    displayLowerTrangleMatrix(matrix, rowsAndColumns);
    displayUpperTrangleMatrix(matrix, rowsAndColumns);
  }

  public static void matrixFill(int[][] matrix, int rowsAndColumns, int startingNumber) {

    int lowerCounter = startingNumber;
    int totalMatrixElement = rowsAndColumns * rowsAndColumns;
    int upperCounter = totalMatrixElement + (lowerCounter - 1);

    for (int i = 0; i < rowsAndColumns; i++) {

      for (int j = 0; j < rowsAndColumns; j++) {
        if (j >= i) {
          matrix[j][i] = lowerCounter++;
        } else {
          matrix[j][i] = upperCounter--;
        }
      }
    }
  }

  public static void displayCompleteMatrix(int[][] matrix, int rowsAndColumns) {
    System.out.println("Filled Matrix :::::::::::");

    for (int i = 0; i < rowsAndColumns; i++) {
      for (int j = 0; j < rowsAndColumns; j++) {
        System.out.print(" " + matrix[i][j]);
      }
      System.out.println();
    }
  }

  public static void displayLowerTrangleMatrix(int[][] matrix, int rowsAndColumns) {
    System.out.println("Lower Trangle Matrix :::::::::::");

    for (int i = 0; i < rowsAndColumns; i++) {
      for (int j = 0; j < rowsAndColumns; j++) {
        if (i >= j)
          System.out.print(" " + matrix[i][j]);
        else
          System.out.print(" 0");
      }
      System.out.println();
    }
  }

  public static void displayUpperTrangleMatrix(int[][] matrix, int rowsAndColumns) {
    System.out.println("Upper Trangle Matrix :::::::::::");

    for (int i = 0; i < rowsAndColumns; i++) {
      for (int j = 0; j < rowsAndColumns; j++) {
        if (i <= j)
          System.out.print(" " + matrix[i][j]);
        else
          System.out.print(" 0");
      }
      System.out.println();
    }
  }
}
package-com;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
公共类LowerTrangleMatrix{
publicstaticvoidmain(String…strings)抛出NumberFormatException、IOException{
BufferedReader read=新的BufferedReader(新的InputStreamReader(System.in));
int rowsAndColumns=0;
布尔标志=真;
做{
试一试{
System.out.println(“多少行和多少列(最少4行,最多20行)”;
rowsAndColumns=Integer.parseInt(read.readLine());
如果((行和列>3和行和列<21)){
System.out.println(“您的行*列是“+rowsAndColumns+”*“+rowsAndColumns”);
flag=false;
}否则{
System.out.println(“您的输入不可接受,请重试…”);
}
}捕获(NumberFormatException ex){
System.out.println(“输入必须是整数”);
}
}而(旗),;
int[][]矩阵=新int[rowsAndColumns][rowsAndColumns];
int startingNumber=0;
flag=true;
做{
试一试{
System.out.print(“整数填充正方形(0到50之间)的起始数字是多少):”;
startingNumber=Integer.parseInt(read.readLine());
如果((起始编号>0&&起始编号<50)){
System.out.println(“您的矩阵将开始填充:“+startingNumber”);
flag=false;
}否则{
System.out.println(“您的输入不可接受,请重试…”);
}
}捕获(NumberFormatException ex){
System.out.println(“输入必须是整数”);
}
}而(旗),;
矩阵填充(矩阵、行和列、起始编号);
displayCompleteMatrix(矩阵、行和列);
显示LowerTrangleMatrix(矩阵、行和列);
显示UpperTransgleMatrix(矩阵、行和列);
}
公共静态无效矩阵填充(int[][]矩阵,int行和列,int起始编号){
int lowerCounter=起始编号;
int TotalMatrixement=行和列*行和列;
int upperCounter=totalMatrixElement+(lowerCounter-1);
对于(int i=0;i=i){
矩阵[j][i]=低计数++;
}否则{
矩阵[j][i]=上限计数器--;
}
}
}
}
公共静态void displayCompleteMatrix(int[][]矩阵,int行和列){
System.out.println(“填充矩阵:;
对于(int i=0;i=j)
系统输出打印(“+矩阵[i][j]);
其他的
系统输出打印(“0”);
}
System.out.println();
}
}
公共静态void DisplayUpperTransgleMatrix(int[][]矩阵,int行和列){
System.out.println(“上变换矩阵:;
对于(int i=0;ilowerConter = M and upperCounter = K
package com;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LowerTrangleMatrix {

  public static void main(String...strings) throws NumberFormatException, IOException {

    BufferedReader read = new BufferedReader(new InputStreamReader(System.in));

    int rowsAndColumns = 0;
    boolean flag = true;
    do {
      try {
        System.out.println("How many rows and columns (min 4 & max 20)? ");
        rowsAndColumns = Integer.parseInt(read.readLine());

        if ((rowsAndColumns > 3 && rowsAndColumns < 21)) {
          System.out.println("Your row * column is " + rowsAndColumns + "*" + rowsAndColumns);
          flag = false;
        } else {
          System.out.println("Your Input is Not Acceptable try again...");
        }
      } catch (NumberFormatException ex) {
        System.out.println("Input must be Integer.");
      }

    } while (flag);

    int[][] matrix = new int[rowsAndColumns][rowsAndColumns];
    int startingNumber = 0;
    flag = true;

    do {
      try {
        System.out.print("What is the starting number for your integer filled square (between 0 and 50 inclusive): ");
        startingNumber = Integer.parseInt(read.readLine());
        if ((startingNumber > 0 && startingNumber < 50)) {
          System.out.println("Your matrix will be start fillup with : " + startingNumber);
          flag = false;
        } else {
          System.out.println("Your Input is Not Acceptable try again...");
        }
      } catch (NumberFormatException ex) {
        System.out.println("Input must be Integer.");
      }
    } while (flag);


    matrixFill(matrix, rowsAndColumns, startingNumber);
    displayCompleteMatrix(matrix, rowsAndColumns);
    displayLowerTrangleMatrix(matrix, rowsAndColumns);
    displayUpperTrangleMatrix(matrix, rowsAndColumns);
  }

  public static void matrixFill(int[][] matrix, int rowsAndColumns, int startingNumber) {

    int lowerCounter = startingNumber;
    int totalMatrixElement = rowsAndColumns * rowsAndColumns;
    int upperCounter = totalMatrixElement + (lowerCounter - 1);

    for (int i = 0; i < rowsAndColumns; i++) {

      for (int j = 0; j < rowsAndColumns; j++) {
        if (j >= i) {
          matrix[j][i] = lowerCounter++;
        } else {
          matrix[j][i] = upperCounter--;
        }
      }
    }
  }

  public static void displayCompleteMatrix(int[][] matrix, int rowsAndColumns) {
    System.out.println("Filled Matrix :::::::::::");

    for (int i = 0; i < rowsAndColumns; i++) {
      for (int j = 0; j < rowsAndColumns; j++) {
        System.out.print(" " + matrix[i][j]);
      }
      System.out.println();
    }
  }

  public static void displayLowerTrangleMatrix(int[][] matrix, int rowsAndColumns) {
    System.out.println("Lower Trangle Matrix :::::::::::");

    for (int i = 0; i < rowsAndColumns; i++) {
      for (int j = 0; j < rowsAndColumns; j++) {
        if (i >= j)
          System.out.print(" " + matrix[i][j]);
        else
          System.out.print(" 0");
      }
      System.out.println();
    }
  }

  public static void displayUpperTrangleMatrix(int[][] matrix, int rowsAndColumns) {
    System.out.println("Upper Trangle Matrix :::::::::::");

    for (int i = 0; i < rowsAndColumns; i++) {
      for (int j = 0; j < rowsAndColumns; j++) {
        if (i <= j)
          System.out.print(" " + matrix[i][j]);
        else
          System.out.print(" 0");
      }
      System.out.println();
    }
  }
}