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
-=
=-
实际输出:
-=
预期产出:
-=
=-
答案 0 :(得分: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()
之外的nextXXX()
或其他nextLine()
方法不使用行分隔符,这意味着当您输入2
(并按Enter键)时输入看起来像2\n
或2\r\n
或2\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
BTW为避免此问题,您可以使用
int i = Integer.parseInt(sc.nextLine());
而不是int i = nextInt()
。