2016-03-19 3 views
1

Итак, я строю график, чтобы найти кратчайшее расстояние между двумя точками, используя алгоритм Варшалла. Вот небольшая часть моего кода:Чтение значений из файла в 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(); 
     } 
     } 

вот весь мой класс край:

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 класса: http://algs4.cs.princeton.edu/12oop/In.java.html. Так как же in.readInt(); не работает?

+0

Но он должен идти через каждую строку, и только первая буква - это строка, а остальные должны быть ints. – Chase

+0

Разделяет ...? – MadProgrammer

+0

Я думаю, пробелы? – Chase

ответ

1

После игры вокруг с вами код немного, вы читаете первый int (3), а затем пытаюсь прочитать краевые данные, которые читают в 4, A, а потому, что 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 

Я не достаточно информации о том, что вся структура файла полностью исправляет ваш код, но вам нужно убедиться, что вы его читаете правильно. Вы также должны использовать для печати данных во время чтения, чтобы вы могли проверить, что вы на самом деле читаете, и отладчик, чтобы выполнить код, чтобы вы могли более внимательно проверять значения ваших переменных.

+0

Хорошо, я обновил свой код, чтобы показать весь класс edge. Итак, что я могу использовать вместо in.readInt(); потому что я не знаю, что заменить. – Chase

+0

Просто прочитайте первые два значения 'int' из заголовка файла ... Я не уверен, что такое формат файла, поэтому я просто догадываюсь – MadProgrammer

Смежные вопросы