从文件输入矩阵

时间:2017-10-04 15:32:42

标签: java file matrix

我试图从输入文件中读取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
完成数组

2 个答案:

答案 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");
    }

}}

结果:

enter image description here