2016-10-07 5 views
1

Ich benutze Eclipse in Verbindung mit CPLEX, um ein Fahrzeug-Routing-Problem zu modellieren. Ich muss Daten (Bedarfspunktkoordinaten, Zeitfenster usw.) aus einer Textdatei lesen. Die Daten sind spaltenweise und so habe ich eine Split-Funktion verwendet, um meine Variablen darin zu speichern. Die Konsole zeigt jedoch einen Fehler in der ersten Zeile der Daten selbst an.Spalten-Daten aus einer Textdatei in Eclipse lesen

Code:

public class VRP01k { 
    public static void main(String args[]) throws FileNotFoundException{ 

    //Scanner input = new Scanner(new File("C:\\OR Research\\Code\\data01.txt")); 
    Scanner input = new Scanner(new File("data01.txt")); 

String line = input.nextLine(); 
     while(line != null) { 
      String[] columns = line.split("\t"); 
      xPos[count] = Double.parseDouble(columns[0]); 
      yPos[count] = Double.parseDouble(columns[1]); 
      d[count] = Double.parseDouble(columns[2]); 
      a[count] = Double.parseDouble(columns[3]); 
      b[count] = Double.parseDouble(columns[4]); 
      s[count] = Double.parseDouble(columns[5]); 

      count++; 
      line = input.nextLine(); 
    } 

ich aus dem C-Laufwerk mit der Datei versuchte, direkt und durch sie in mein Java-Projekt zu bewegen. Keine funktioniert. Der Fehler ist wie folgt:

Exception in thread "main" java.lang.NumberFormatException: For input string: "3.00  38.00  0.00  0.00 1187.00  0.00" 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
    at java.lang.Double.parseDouble(Double.java:538) 
    at VRP01k.main(VRP01k.java:32) 

Die ersten paar Zeilen der Datendatei sind:

3.00  38.00  0.00  0.00 1187.00  0.00 
44.00  28.00  0.00  342.00  365.00  0.00 
26.00  44.00  0.00  20.00  93.00  0.00 
7.00  41.00  0.00  0.00  45.00  0.00 
17.00  28.00  0.00  250.00  292.00  0.00 

Bitte helfen. Vielen Dank.

Hier ist der neue Code:

public class VRP01k { 
public static void main(String args[]) throws FileNotFoundException{ 

//Scanner input = new Scanner(new File("C:\\OR Research\\Code\\data01.txt")); 
Scanner input = new Scanner(new File("data01.txt")); 
    String line = input.nextLine(); 
     while(line != null) { 
       String [] columns = line.trim().split("\\s+"); 
       xPos[count] = Double.parseDouble(columns[0]); 
       yPos[count] = Double.parseDouble(columns[1]); 
       d[count] = Double.parseDouble(columns[2]); 
       a[count] = Double.parseDouble(columns[3]); 
       b[count] = Double.parseDouble(columns[4]); 
       s[count] = Double.parseDouble(columns[5]); 

       count++; 
       line = input.nextLine(); 
       } 

Und der Fehler:

Exception in thread "main" java.lang.NumberFormatException: empty String 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842) 
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
    at java.lang.Double.parseDouble(Double.java:538) 
    at VRP01k.main(VRP01k.java:32) 
+0

Ihr Split funktioniert nicht - wahrscheinlich haben Sie keine Tabulatorzeichen zwischen den Nummern. –

+0

Versuchen Sie, trimmen, ex 'Spalten [0] .trim() '. Und probiere 'columns [0] 'aus, ob der Split wirklich passiert ist. – Ravikumar

+0

wahrscheinlich sind sie nur Leerzeichen .. überprüfen Sie das ... –

Antwort

0

Ihre Ausnahme sagt, es ist ein Fehler im Format der Nummer für die Eingabe:

"3.00  38.00  0.00  0.00 1187.00  0.00" 

, so dass Ihre split nicht wirklich die Eingabe-Zeichenfolge aufteilt und nur die gesamte Zeile an die Tanne übergeben st Double.parseDouble.

Wahrscheinlich haben Sie zwischen den Zahlen Leerzeichen statt Tabs. Verwenden Sie also etwas wie:

String [] columns = line.trim().split("\\s+"); 

für den Split. Dies ist das Trimmen von führenden und nachfolgenden Leerzeichen, bevor die Aufteilung durchgeführt wird, um die Dinge einfacher zu machen, und dann auf ein oder mehrere Leerzeichen aufgeteilt wird - dies wird sich mit Leerzeichen und Tabs befassen.

+0

Ich habe das versucht, aber es zeigt einen Fehler in Bezug auf eine leere Zeichenfolge. Ausnahme im Thread "main" java.lang.NumberFormatException: leer String. –

+0

Es funktioniert für mich auf Ihrer ersten Datenzeile. Welche Linie verursacht ein Problem? –

+0

Die Konsole erwähnt das nicht. Wenn ich sechs Leerzeichen als Trennzeichen verwende, geht es bis zu 0,00 1187,00 und schlägt dann fehl, aber mit \\ s + erhält man eine leere Zeichenkette. –

Verwandte Themen