首页 文章

Java Matrix不会打印最后一行

提问于
浏览 78
3
package com.test;
import java.util.Scanner;

public class Main {

    public static void main(String args[]) {
        System.out.println("Rows = ?");
        Scanner sc = new Scanner(System.in);
        if(sc.hasNextInt()) {
            int nrows = sc.nextInt();
            System.out.println("Columns = ?");
            if(sc.hasNextInt()) {
                int ncolumns = sc.nextInt();
                char matrix[][] = new char[nrows][ncolumns];
                System.out.println("Enter matrix");
                for (int row = 0; sc.hasNextLine() && nrows > row; row++) {
                        matrix[row] = sc.nextLine().toCharArray();
                }
                for (int row = 0; row < nrows; row++) {
                    for (int column = 0; column < matrix[row].length; column++) {
                        System.out.print(matrix[row][column] + "\t");
                    }
                    System.out.println();
                }
            }
        }
    }
}

所以我的程序读取矩阵并打印它,但最后一行不打印 . 我认为,在for循环中打印列的问题 .

输入:

2
2
-=
=-

实际产量:

-=

预期产量:

-=
=-

1 回答

  • 3

    你需要改变

    for (int row = 0; sc.hasNextLine() && nrows > row; row++) {
            matrix[row] = sc.nextLine().toCharArray();
    }
    

    sc.nextLine();
    for (int row = 0; nrows > row; row++) {
            matrix[row] = sc.nextLine().toCharArray();
    }
    

    主要问题是 nextInt() 或除 nextLine() 之外的其他 nextXXX() 方法不使用行分隔符,这意味着当您输入 2 (并按Enter键)时,实际输入将根据操作系统看起来像 2\n2\r\n2\r .

    因此,对于 nextInt ,您只读取值 2 但扫描器的光标将在行分隔符之前设置

    2|\r\n
     ^-----cursor
    

    这将使 nextLine() 返回空字符串,因为光标和下一行分隔符之间没有字符 .

    因此,要实际读取 nextInt 之后的行(不是空字符串),您需要在这些行分隔符之后添加另一个 nextLine() 来设置游标 .

    2\r\n|
         ^-----cursor - nextLine() will return characters from here 
                        till next line separators or end of stream
    

    顺便说一句,要避免这个问题,你可以使用

    int i = Integer.parseInt(sc.nextLine());
    

    而不是 int i = nextInt() .

相关问题