2017-01-05 2 views
-1

Ich bin ein relativ neuer Java-Programmierer mit nur ein paar Monaten Erfahrung, also entschuldigen Sie alle Fehler, die ich gemacht habe.Java Scanner NextInt nicht alle Ganzzahlen innerhalb der Textdatei

Ich arbeite gerade an einem College-Projekt, für das ich einen Dijkstra-basierten Pfadfinder mit interaktiver GUI erstelle. Damit ich mit der Arbeit an diesem Teil beginnen konnte, wollte ich zunächst eine vordefinierte Adjacency Matrix einlesen können, die die ungerichteten Gewichte für den Graph selbst darstellt, anstatt ständig selbst Werte eingeben zu müssen.

Dafür entschied ich mich, einen Scanner und ein Abgrenzungsmuster zu verwenden, damit ich schnell aus der betreffenden Textdatei lesen konnte. Mein Hauptziel ist es, jeden Wert innerhalb der Textdatei herauszunehmen und dann an ein 2D Integer Array anzuhängen, was es mir erlaubt, die Daten effizient zu nutzen.

Mein Hauptproblem ist, dass der Scanner selbst liest nur die ersten 3 Ganzzahlen innerhalb der Textdatei, dann hört auf zu lesen und das Programm endet. Für mein Trennzeichen verwende ich ein Leerzeichen (""), das gut zu funktionieren scheint, aber ich vermute, dass es etwas damit zu tun hat, dass das Ende der Zeile ein Problem verursacht?

public static void readMatrixFromFile() throws IOException { 

    File file = new File("Matrix.txt"); //Instance of File with parameter of filename in default location. 
    Scanner myScan = new Scanner(file); 
    myScan.useDelimiter(" "); 

    while(myScan.hasNextInt()){ //Checks whether or not there is a next token within the Text file. 
     System.out.println(myScan.nextInt()); //Prints out next item within text file, with respect to Delimiter being ignored. 
    } 

    myScan.close(); //Safely closes Scanner. 
} 

Vielen Dank,

  • Michael
+4

Bitte versuchen Sie den Code innerhalb der Frage und nicht durch die Bereitstellung der externen Links. – user2004685

+7

Wie erwarten Sie, dass wir das für uns selbst testen, wenn Sie nur Screenshots bereitstellen? Kopieren Sie den Code und die Daten in die Frage. Als tatsächlicher Code und Text, nicht als Bild. Wir haben nicht die Geduld, Ihre Arbeit erneut zu tippen. –

+1

Entfernen Sie die 'useDelimeter' Zeile – Michael

Antwort

0

Ich würde so etwas tun, damit Ihre 2D-Array basiert auf wie viele Zahlen sind in der ersten Zeile. Das Lesen von einer einzelnen Nummer zu einer Zeit wird möglicherweise dazu führen, magische Zahlen in Ihrem Code zu verwenden. Diese Methode hängt einfach davon ab, wie viele Zahlen in der ersten Zeile stehen.

public static void readMatrixFromFile() throws IOException { 

    File file = new File("Matrix.txt"); //Instance of File with parameter of filename in default location. 
    Scanner myScan = new Scanner(file); 
    Double[][] matrix = null; 
    int rowNumber = 0; 

    while(myScan.hasNextLine()){ //Checks whether or not there is a next token within the Text file. 
     String[] rowOfNumbers = myScan.nextLine().split(" "); 
     if(matrix == null) 
     { 
      matrix = new Double[rowOfNumbers.length][rowOfNumbers.length]; 
     } 

     for(int i = 0; i < rowOfNumbers.length; i++) 
     { 
      if(rowOfNumbers[i].matches("\\d+")) 
       matrix[rowNumber][i] = Double.parseDouble(rowOfNumbers[i]); 
     } 
     rowNumber++; 
    } 

    myScan.close(); //Safely closes Scanner. 
} 
Verwandte Themen