我试图从输入文件中读取2D矩阵。输入文件包含一系列输入。第一行包含矩阵大小n。接下来的n行每个包含n个整数,即n * n矩阵文件以矩阵大小为零结束。下面是一个小样本。
2 1 1 1 1 3 3 1 2 1 1 2 2 2 1 6 1 2 3 4 2 3 3 3 4 5 2 1 4 3 3 1 2 3 5 4 3 6 2 1 3 2 4 3 4 3 2 3 4 1 5 6 0
我编写了以下代码,但它并没有显示我需要的内容。
import java.util.*;
import java.io.*;
public class trial{
public static void main(String[] args) {
try{
//System.out.println(new File("input.txt").getAbsolutePath());
Scanner input = new Scanner(new File("./input.txt"));
while (true){
int n = input.nextInt();
//System.out.println("%d",n);
if(n!=0) {
int[][] grid = new int[n][n];
while (input.hasNext()) {
for (int row = 0; row < n; row++) {
for (int column = 0; column < n; column++) {
grid[row][column] = input.nextInt();
System.out.printf(" %d ", grid[row][column]);
}
System.out.println();
}
System.out.println("Array done");
}
}
input.close();
}
}catch (FileNotFoundException e){
System.out.println("File not found");
}
}
}
代码输出如下。它总是生成一个2 * 2矩阵。
1 1
1 1
完成数组
3 3
1 2
完成数组
1 1
2 2
完成数组
2 1
6 1
完成数组
2 3
4 2
完成数组
3 3
3 4
完成数组
5 2
1 4
完成数组
3 3
1 2
完成数组
3 5
4 3
完成数组
6 2
1 3
完成数组
2 4
3 4
完成数组
3 2
3 4
完成数组
1 5
6 0
完成数组
答案 0 :(得分:0)
首先,如果用户输入的大小为0,您似乎想要停止,但实际上并没有这样做,而是直接循环。其次,在读完第一个矩阵后,关闭扫描仪,这不是你应该做的。 input.close()
应该在while循环之外。试试这个。
try {
Scanner input = new Scanner(new File("./input.txt"));
int n;
while (input.hasNextInt() && (n = input.nextInt()) > 0) {
int[][] grid = new int[n][n];
for (int row = 0; row < n; row++) {
for (int column = 0;
column < n && input.hasNextInt(); column++) {
grid[row][column] = input.nextInt();
System.out.printf("a %d ", grid[row][column]);
}
System.out.println();
}
System.out.println("Array done");
}
input.close();
} catch (FileNotFoundException e) {
System.out.println("File not found");
}
答案 1 :(得分:0)
在你的代码中,你不会检查nextInt是一个大小,何时是矩阵中的数字。另一件事是,你的EOF值是0,所以你应该离开。
下面是一个工作示例:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
try{
Scanner input = new Scanner(new File("pathtofile"));
while (true){
int n = input.nextInt();
//System.out.println("%d",n);
int cont =0;
if(n!=0) {
int[][] grid = new int[n][n];
while (input.hasNext() && cont != n) {
for (int row = 0; row < n; row++) {
for (int column = 0; column < n; column++) {
grid[row][column] = input.nextInt();
System.out.printf("a %d ", grid[row][column]);
}
System.out.println();
cont++;
}
System.out.println("Array done");
}
}
else{
input.close();
break;
}
}
}catch (FileNotFoundException e){
System.out.println("File not found");
}
}}
结果: