Я приложил пример того, что мне поручено создать. На данный момент я сосредоточусь только на нижней треугольной части матрицы. По какой-то причине, когда я запускаю программу, вывод полностью пустой. Любая помощь здесь очень ценится.
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("");
}




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("");
}
К сожалению, вывод по-прежнему полностью пустой, поэтому я не могу сказать, работает ли это решение.
Вы получаете пустой вывод, потому что вы, вероятно, неправильно инициализировали rowsAndColumns . Вам нужно показать часть инициализации вашего кода. Вы также можете скопировать этот код в свой основной метод. Единственная проблема в том, что он не считывает размер квадрата и начальное значение из системы.
@ S.Miller, только что отредактировал мой ответ, чтобы показать код, который считывает размер квадрата и начальное значение из стандартного ввода. Удачи с правой стороной треугольника. Будет сложнее.
Этот ответ основан на том, что, хотя требуемый результат сложно сформулировать в терминах 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();
}
}
}
Не по теме, но
x <= (rowsAndColumns - 1)можно упростить доx < rowsAndColumns.