Как вывести нижнюю треугольную матрицу с увеличивающимися числами?

Я приложил пример того, что мне поручено создать. На данный момент я сосредоточусь только на нижней треугольной части матрицы. По какой-то причине, когда я запускаю программу, вывод полностью пустой. Любая помощь здесь очень ценится.

while (rowsAndColumns < 4 || rowsAndColumns > 20) {
    System.out.print("How many rows and columns (min 4 & max 20)? ");
    rowsAndColumns = input_scanner.nextInt();
}

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

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

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

for (x = 0; x < intMatrix.length; x++) {
    for (y = 0; y < intMatrix[x].length; y++) {
        System.out.print(intMatrix[x][y] + " ");
    }
    System.out.println("");
}

Не по теме, но x <= (rowsAndColumns - 1) можно упростить до x < rowsAndColumns.

shmosel 22.03.2018 04:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
324
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

For now I am just focusing on the lower triangular part of the matrix.

В вашей программе очень маленькая ошибка. Во внутреннем цикле с 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("");
    }

К сожалению, вывод по-прежнему полностью пустой, поэтому я не могу сказать, работает ли это решение.

JSON_Derulo 22.03.2018 05:02

Вы получаете пустой вывод, потому что вы, вероятно, неправильно инициализировали rowsAndColumns . Вам нужно показать часть инициализации вашего кода. Вы также можете скопировать этот код в свой основной метод. Единственная проблема в том, что он не считывает размер квадрата и начальное значение из системы.

VHS 22.03.2018 05:04

@ S.Miller, только что отредактировал мой ответ, чтобы показать код, который считывает размер квадрата и начальное значение из стандартного ввода. Удачи с правой стороной треугольника. Будет сложнее.

VHS 22.03.2018 05:11

Этот ответ основан на том, что, хотя требуемый результат сложно сформулировать в терминах 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 25 24 22 19 
2 6 23 21 18 
3 7 10 20 17 
4 8 11 13 16 
5 9 12 14 15 

Демо

Здесь я сделал решение по вашей задаче.

В вашей задаче есть задача первого уровня - вычислить последний элемент матрицы на основе начального номера, введенного пользователем, который будет любым, и в соответствии с вашей задачей начальный номер равен 1, поэтому его легко вычислить, но здесь я сделал формулу, которая вычислит последний элемент матрицы.

Предположим, вы ввели размер матрицы X * X, а начальное число - M, и если я обозначаю lastElement матрицы, используя 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();
    }
  }
}

Другие вопросы по теме