Вот мой код:Ошибка при перенаправлении ввода из файла
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; I<substr.length; I++)
System.out.println(substr[0]+" "+substr[I]);
}
}
void query(){
Scanner sc = new Scanner(System.in);
int P, Q;
int counter = 0;
boolean flag = true;
while (flag){
counter++;
P = sc.nextInt();
Q = sc.nextInt();
sc.nextLine();
if (P == Q && P == 0)
flag =false;
else {
if (Q == 1)
System.out.println("DFS done");
else
System.out.println("Bfs done");
}
}
}
}
class demo{
public static void main(String [] args){
Graph G= new Graph();
Scanner sc = new Scanner(System.in);
int numGraphs = sc.nextInt();
while (numGraphs>0){
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)
Помогите мне в указании ошибки.
спасибо, трюк работал, но я до сих пор не понял, почему перенаправление ввода из файла не сработало, но ввод с клавиатуры прекрасен? –
Я считаю, что это имеет какое-то отношение к тому, как сканер поддерживает буфер внутри. На самом деле ввод с клавиатуры не работает для меня, когда я копирую весь вход в один снимок. Он работает только для меня, если я набираю вход один за другим. Возможно, когда вы делаете весь ввод одним выстрелом, первый созданный вами объект сканера получает весь вход в свой буфер, а затем два других объекта сканера получают пустые буферы. –
@SusamPal - Я думаю, вы правы. что объясняет различное поведение. –