2016-03-19 14 views
1

Bu yüzden Warshall algoritmasını kullanarak iki nokta arasındaki en kısa mesafeyi bulmak için bir grafik yapıyorum.Java'daki bir dosyadan değerleri okuma

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(); 

Ve burada giriş var: İşte benim küçük bir kod parçası

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

Şimdi çıkış buna benzemez. Ben in.readInt(); yaptığımda
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) 

Yani istisna olur. İşte benim ana yöntem var:

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(); 
     } 
     } 

burada benim tüm kenar sınıfı var:

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]); 
       } 
      } 
     } 
     } 

Ve burada ben In sınıf için kullanıyorum neyi: http://algs4.cs.princeton.edu/12oop/In.java.html. Peki, neden in.readInt(); çalışmıyor?

+0

Ama gitmesi gerekiyordu. her satırda ve sadece ilk harf bir dizedir ve geri kalanların inters olması gerekir. – Chase

+0

Tarafından ayrılmış ...? – MadProgrammer

+0

Mekanları tahmin ediyorum? – Chase

cevap

1

sonra, ilk int (3) okuyorsanız, biraz kod seninle uğraşırken, 4 yılında A okur, ancak A çünkü int değildir ve kırar kenar verileri okumaya çalışıyorum sonra.

Daha böyle bir şey için kodunuzu değiştirirseniz

...

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); 
    } 
} 

ve

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()); 
     } 
    } 

} 

Bir şey gibi dışarı yazdırır ...

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

Bilmiyorum Dosyanın tüm yapısının kodunuzu tam olarak düzeltebileceği konusunda yeterli bilgiye sahip olmalısınız, ancak okuduğunuzdan emin olmalısınız. doğru şekilde. Verileri okurken yazdırmak için System.out.println'u da kullanmalısınız, böylece gerçekten okuduğunuz şeyi ve bir hata ayıklayıcısını kontrol ederek kodun içinden geçerek kontrol edebilirsiniz. Böylece değişkenlerinizin değerlerini daha yakından incelemeniz için

+0

Ok Tüm kenar sınıfını göstermek için kodumu güncelledim. Yani in.readInt() yerine ne kullanabilirim? çünkü bununla ne değiştireceğimi bilmiyorum. – Chase

+0

Sadece dosya başlığından ilk iki int 'değerini oku ... Dosya formatının ne olduğundan emin değilim, bu yüzden sadece tahmin ediyorum – MadProgrammer

İlgili konular