从文件重定向输入时出错

这是我的代码:

import java.util.Scanner; class Graph{ boolean [][]array; int N; Graph (){ array = new boolean [1001][1001]; N=0; } void read_graph() { Scanner sc = new Scanner(System.in); N = sc.nextInt(); sc.nextLine(); String str; String []substr; for (int K=1; K<=N; K++){ str = sc.nextLine(); substr = str.split(" "); for (int I=0; I0){ G.read_graph(); G.query(); numGraphs--; } } } 

这是输入数据:

 1 6 1 2 3 4 2 2 3 6 3 2 1 2 4 1 1 5 0 6 1 2 5 1 1 0 1 0 0 0 

当我用键盘输入这个输入数据时它工作正常,但是当我将这个输入保存到文件并将其重定向为输入时(在linux中使用'<'),它会抛出错误信息。

 Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:855) at java.util.Scanner.next(Scanner.java:1478) at java.util.Scanner.nextInt(Scanner.java:2108) at java.util.Scanner.nextInt(Scanner.java:2067) at Graph.read_graph(b.java:13) at demo.main(b.java:56) 

帮我指出错误。

不要在每种方法中创建Scanner对象。 传递您创建的第一个扫描仪对象。

以下是应该解决问题的更改列表:

 --- demo-old.java 2012-01-25 23:12:54.000000000 +0530 +++ demo.java 2012-01-25 23:13:45.000000000 +0530 @@ -10,4 +10,3 @@ -void read_graph() { - Scanner sc = new Scanner(System.in); +void read_graph(Scanner sc) { N = sc.nextInt(); @@ -26,4 +25,3 @@ -void query(){ -Scanner sc = new Scanner(System.in); +void query(Scanner sc){ int P, Q; @@ -53,4 +51,4 @@ while (numGraphs>0){ - G.read_graph(); - G.query(); + G.read_graph(sc); + G.query(sc); numGraphs--; 

你为什么要创建3个扫描仪? 它可能会在线条中窒息

1) P = sc.nextInt();
2) Q = sc.nextInt();

因为只有1个int的输入正在第1行中读取,然后第2行正在尝试扫描nextInt()以获得空行。

我不知道为什么在手动输入时这会起作用,除非输入的顺序不同。

您不应该使用<来重定向输入。 您需要使用scanner类来从文件中读取。

 File file = new File("data.txt"); Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { //logic }