Как мне считать с клавиатуры BufferedReader

96
11 июня 2019, 08:10
public class Matrix {
    int[][] matrix;
    public Matrix(int rows, int columns) {
        matrix = new int[rows][columns];
    }
    public void set(int row, int column, int value) {
        matrix[row][column] = value;
    }  
    public void printSum() {
        int result = 0;
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                result += matrix[i][j];
            }
        }
        System.out.println("Suma : "+result);
    }
    public void printMatrixTransposed(){
        int [][] transposedMatrix = new int [matrix[0].length][matrix.length];
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++){
                transposedMatrix [j][i] = matrix[i][j];
            }
        }
        for (int i = 0; i < transposedMatrix.length; i++) {
            System.out.println();
            for (int j = 0; j < transposedMatrix[0].length; j++) {
                System.out.printf("%d ", transposedMatrix[i][j]);
            }
        }
    }
}

Нужно написать сколько rows / columns, их параметры. И вывести матрицу Транспротованую.

public static void main(String[] args) {
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter rows :");
        int  rows = reader.read();
        System.out.println("Enter columns :");
        int colums = reader.read();
        Matrix matrix = new Matrix(rows, colums);
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < colums; j++) {
                System.out.println("Enter : [" + i + "," + j + "]");
                matrix.set(i, j, reader.read());
            }
        }
        reader.close();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

Оно выводит так:

Enter rows : 2
Enter columns :
Enter : [0,0] 1
Enter : [0,1]
Enter : [0,2] 2
Enter : [0,3]
Enter : [0,4] 3
Enter : [0,5]
Enter : [0,6]`

А нужно так

Enter rows : 2
Enter kolums : 2
Enter : [0,0] 1
Enter : [0,1] 2
Enter : [1,0] 3
Enter : [1,1] 4
Suma : 10
1  3 
2  4 
Answer 1

Вместо read() используйте readLine()

Answer 2

Функция BufferedReader::read() возвращает не само число, которое вы вводили, а номер символа. Например, для символа '1' вернется 49, для '2' вернется 50, и т.п.

А если нужно считать именно как число, то используйте Scanner::nextInt:

Scanner sc = new Scanner(System.in);
System.out.print("Enter rows: ");
int rows = sc.nextInt();
System.out.println(rows);
System.out.print("Enter columns: ");
int colums = sc.nextInt();
System.out.println(colums);

PS. вот еще пример -- номер символа превращаем в сам символ:

char c = (char) 49;
System.out.println(c); // 1
READ ALSO
Подключения Java к MongoDB

Подключения Java к MongoDB

Начал изучать MongoDBПытаюсь подключиться к ней с помощью Java

108
ConcurrentSkipListSet вставка Java 6

ConcurrentSkipListSet вставка Java 6

Вопрос по ConcurrentSkipListSet в Java 6

129
Выровнять текст по центру и левому краю

Выровнять текст по центру и левому краю

Необходимо сверстать адаптивный блок в котором текст будет в центре и выровнен по левому краюТакая вот простая задачка, решение которой...

151
мини Script не работает

мини Script не работает

Programing language: JavaScript

105