Создание квадратной матрицы - PullRequest
0 голосов
/ 26 июня 2019

Здравствуйте, может кто-нибудь, пожалуйста, помогите мне, я пытаюсь сделать квадратную матрицу в Java с этим форматом:

1 | 6 | 7 | 12
2 | 5 | 8 | 11
3 | 4 | 9 | 10

Я хочу, чтобы код генерировал таблицу с размером, указанным пользователем, и печатал ее с указанным выше форматом.

Я думал, что уже закончил, но когда я ввожу нечетное число в качестве КОЛОННЫ, он всегда будет добавлять другой столбец. Так, например,
** Ввод: ** Я ввел 3 как no. of columns,
** Вывод: ** Будет напечатано четыре (4) столбца.

Вот мой код (написанный на Java):

System.out.print("Enter Number(s) of ROW: ");

int numRow = in.nextInt();
System.out.print("Enter Number(s) of COLUMN: ");

int numCol = in.nextInt();
int [][] Table = new int[numRow][numCol];
int ctr=0;

for(int row=0; row<numRow; row++) 
{
        for(int col=0; col<numCol; col++)
        {
                Table[row][col]= (col*numRow)+row+1;
                System.out.print(Table[row][col]+"\t");

                for(int i=col+1; i<=numRow; i++)
                {   
                    ctr=(numRow-1)-row;
                    Table[row][col]= (i*numRow)+ctr+1;
                    System.out.print(Table[row][col]+"\t"); 
                    i=numRow;
                }
                col++;               
        }
        System.out.println();
}

Ответы [ 4 ]

1 голос
/ 26 июня 2019

Используйте этот код:

import java.util.Scanner;

public class Teas {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
    System.out.print("Enter Number(s) of ROW: ");

    int numRow = in.nextInt();

    System.out.print("Enter Number(s) of COLUMN: ");

    int numCol = in.nextInt();

    int [][] Table = new int[numRow][numCol];

    int ctr=0;

    for(int row=0; row<numRow; row++) 
    {
            for(int col=0; col<numCol; col++)
            {
                if(col%2 == 0){Table[row][col] = (col * numRow +1 )+ row;}
                else{Table[row][col] = (numRow * (col + 1))- row;}
            }
    }
        for(int row=0; row<numRow; row++) 
    {
            for(int col=0; col<numCol; col++)
            {
                System.out.print(Table[row][col] +"|");
            }
            System.out.println("");
    }

    }

    }
0 голосов
/ 26 июня 2019

Используйте < вместо <= в третьем цикле:

for (int i = col + 1; i < numCol; i++) {
    ctr = (numRow - 1) - row;
    Table[row][col] = (i * numRow) + ctr + 1;
    System.out.print(Table[row][col] + "\t");
    i = numRow;
}
0 голосов
/ 26 июня 2019

Кажется, проблема в этом: for(int i=col+1; i<=numRow; i++)
Вы выполняете свой цикл с i подчиненным или равным для numRow, что означает, что при использовании инструкции для установки значения вашей ячейки: Table[row][col]= (i*numRow)+ctr+1 если ваш максимальный номер столбца равен 3, он заполнит таблицу [row] [3], так как индекс массивов начинается с 0, он добавит четвертый столбец.

0 голосов
/ 26 июня 2019

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

Сначала создайте свою матрицу.

int value = 1;
for(int col=0; col<numCol; col++) 
{
        if(col%1==1){ 
            for(int row=0; row<numRow; row++)
            {
                Table[row][col] = value+numRow-row;
            } 
            value = table[0][col]+1;
        }
        else{
            for(int row=0; row<numRow; row++)
            {
                Table[row][col] = value++;
            } 
        }  
}

Затем отобразите свою матрицу в том формате, который вы ожидаете.

for(int i = 0;i<numRow;i++){
    for(int j=0;j<numCol;j++)
    System.out.print(Table[i][j]);
    if(j==numCol-1) System.out.print("\n");
    else System.out.print("|");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...