2016-03-19 4 views
1

Warshallのアルゴリズムを使用して2点間の最短距離を見つけるグラフを作成しています。ここに私のコードのごく一部です:Javaのファイルから値を読み取る

public Edge(In in) { 
     System.out.println("here1"); 
     String location = in.readString(); 
     System.out.println("here1b"); 
     int V = in.readInt(); 
     System.out.println("here1c"); 
     dist = new int [V][V]; 
    System.out.println("here1d"); 
    int n = in.readInt(); 

そして、ここでは入力です:

3 
4 
A 0 0 0 
B 5 0 0 
C 5 5 0 
D 0 5 0 
2 
A C 
C D 

今、出力は次のようになります。

case 1: 
here1 
here1b 
Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at java.util.Scanner.nextInt(Unknown Source) 
    at edu.princeton.cs.algs4.In.readInt(In.java:322) 
    at Edge.<init>(Edge.java:10) 
    at Edge.main(Edge.java:51) 

したがって、in.readInt();を実行すると例外が発生します。ここに私の主な方法があります:

public static void main(String[] args) { 
     In in = new In(args[0]); 
     int T = in.readInt(); 
     for (int t=1; t<=T; t++) { 
     System.out.println("Case " + t + ":") ; 
     Edge w = new Edge(in); 
     int Q = in.readInt(); 
     for (int i=0; i<Q; i++) { 
      String p1s = in.readString(); 
      String p2s = in.readString(); 
     } 
     } 

ここに私の全体のエッジクラスです:http://algs4.cs.princeton.edu/12oop/In.java.html

public Edge(In in) { 
    String location = in.readString(); 
    System.out.println(location); 
    for (int index = 0; index < 3; index++) { 
     System.out.println(in.readInt()); 
     dist = new int [V][V]; 
     int n = in.readInt(); 
     int [][] G = new int [n][n]; 
     for (int i = 0; i < n; i++) { 
      for (int j = 0; j < n; j++){ 
       dist[i][j] = in.readInt(); 
      } 
     } 
     } 

     /*int E = in.readInt(); 
     for (int l = 0; l < E; l++){ 
      int i = in.readInt(); 
      int j = in.readInt(); 
     } 
     */ 
     for (int k = 0; k < n; k++) { 
      for (int i = 0; i < n; i++) { 
       for (int j = 0; j < n; j++) { 
        dist[i][j] = Math.min(dist[i][j], dist[i][k] + dist[k][j]); 
       } 
      } 
     } 
     } 

そして、ここでは、私がInクラスのために使用してんですよ。だからどうすればin.readInt();はうまくいきませんか?

+0

しかし、最初の文字だけが文字列であり、残りはintであるはずです。 – Chase

+0

...で区切られていますか? – MadProgrammer

+0

私はスペースを推測する? – Chase

答えて

1

そして、あなたが最初にint3)を読んでいる、少しのコードをあなたと一緒に遊んで、4Aを読み込みますが、Aためintではなく、それが壊れるエッジデータを、読み取ろうとした後。

私はより多くのそれは何かなどをプリントアウトする

public static void main(String[] args) { 
    In in = new In("Data.txt"); 
    int T = in.readInt(); // 3 
    int something = in.readInt(); // 4 
    for (int t = 1; t <= T; t++) { 
     System.out.println("Case " + t + ":"); 
     Edge w = new Edge(in); 
    } 
} 

public class Edge { 

    public Edge(In in) { 
     String location = in.readString(); 
     System.out.println(location); 
     for (int index = 0; index < 3; index++) { 
      System.out.println(in.readInt()); 
     } 
    } 

} 

...のようなものにコードを変更した場合は...

Case 1: 
A 
0 
0 
0 
Case 2: 
B 
5 
0 
0 
Case 3: 
C 
5 
5 
0 

私はしないでくださいファイルの構造を完全に修正するための十分な情報がありますが、読んでいることを確認する必要があります正しく読み取ったデータを印刷するにはSystem.out.printlnも使用する必要があります。実際に何を確認してデバッガがコードを実行して、変数の値をより詳細に調べることができます。

+0

私はコードを更新して、エッジクラス全体を表示しました。では、in.readInt()の代わりに何を使うことができますか?私はそれを何に置き換えるべきか分からないからです。 – Chase

+0

ちょうど最初の2つの 'int'値をファイルヘッダから読みます...私はファイルフォーマットが何であるか分かりませんので、私はちょうど推測しています – MadProgrammer

関連する問題