2017-10-07 107 views
1

我有一個文本文件,像這樣:掃描儀的Java剛剛看完第一線

1 2 
3 7 
5 8 

與2號的每一行。我想用第一個數字和第二個數字做一些不同的事情。我試圖掃描文本文件並打印數字,以確保我掃描正確。然而,只有前兩個數字顯示(4:1),然後一個錯誤說:

"java.util.NoSuchElementException 
    at java.base/java.util.Scanner.throwFor(Scanner.java:858) 
    at java.base/java.util.Scanner.next(Scanner.java:1497) 
    at java.base/java.util.Scanner.nextInt(Scanner.java:2161) 
    at java.base/java.util.Scanner.nextInt(Scanner.java:2115) 
    at com.company.SCC.input(SCC.java:30) 
    at com.company.SCC.<init>(SCC.java:15) 
    at com.company.Main.main(Main.java:11)" 

我不明白是什麼問題以及如何通過行掃描的文檔行(我回收的代碼掃描儀和它以前的工作)。我不知道我在做什麼錯,任何幫助將不勝感激。

try { 
     String file = "testcase1.txt"; 
     FileReader in = new FileReader(file); 
     BufferedReader br = new BufferedReader(in); 
     String s; 
     int x; 
     while ((s = br.readLine()) != null) { 
      Scanner sca = new Scanner(s); 
      x = sca.nextInt(); 
      graph.addVertex(x); 
      int y = sca.nextInt(); 
      graph.addAdjvex(x, y); 
      System.out.println(x + " " + y); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

它看起來對我來說,在緩衝讀取器讀取第二行是不是你想象的那樣。你有沒有試過忘記掃描儀一會兒,只是打印出來的緩衝讀出器的線? –

+0

「只有前兩個數字出現(1 4)」是什麼意思?你顯示的文件不包含4.現在我猜你的閱讀器返回了空行(可能是文件末尾的一行),並且你正在嘗試掃描它的數字(它們不在那裏)。 – Pshemo

回答

1

嘗試

try { 
    File file = new File("testcase1.txt"); 
    Scanner sc = new Scanner(file); 
    int x, y; 
    while (sc.hasNextLine()) { 
     x = sc.nextInt(); 
     y = sc.nextInt() 
     graph.addVertex(x); 
     graph.addAdjvex(x, y); 
     System.out.println(x + " " + y); 
    } 
    sc.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

令人驚歎。有效。謝謝!當它不需要時,我真的變得很複雜。 – lo1ngru

0

也許你應該叫sc.nextLine()跳轉到下一行

1
try { 
    File file = new File("testcase1.txt"); 
    Scanner sc = new Scanner(file); 
    while (sc.hasNextLine()) { 
     int x = sc.nextInt(); 
     int y = sc.nextInt(); 
     sc.nextLine(); 
     graph.addVertex(x); 
     graph.addAdjvex(x, y); 
     System.out.println(x + " " + y); 
    } 
    sc.close() 

} catch (Exception e) { 
    e.printStackTrace(); 
}