2012-03-29 12 views
0

Ich versuche, 10 vorzeichenbehaftete Ganzzahlen aus einer Datei in ein Array einzulesen, und aus irgendeinem Grund passiert es nicht, und ich bekomme keine Fehler bei Kompilierung und Laufzeit. Ich wollte nur ein zweites Paar Augen, um darüber zu sehen und zu sehen, was ich vermisse.Java - Einlesen von vorzeichenbehafteten Ganzzahlen aus einer Datei

Die Testdatei ist "input.txt" und enthält: -1, 4, 32, 0, -12, 2, 30, 1, -3, -32

Hier ist mein Code:

public void readFromFile(String filename) 
    { 
    try { 
     File f = new File(filename); 
     Scanner scan = new Scanner(f); 
     String nextLine; 
     int[] testAry = new int[10]; 
     int i = 0; 

     while (scan.hasNextInt()) 
     { 
      testAry[i] = scan.nextInt(); 
      i++; 
     } 
    } 
     catch (FileNotFoundException fnf) 
     { 
      System.out.println(fnf.getMessage()); 
     } 
    } 
+0

Ist das das gesamte Programm? Es sieht gut aus ... auch testAry ist eine lokale Variable und Sie geben es nicht zurück, was genau macht diese Methode? –

+0

Liest einfach die Eingabe in ein Array und ich muss dieses Array verwenden in einigen anderen Funktionen später im Programm.Was passiert, ist im Debug-Modus, es trifft die While-Anweisung zum ersten Mal und überspringt es und bricht von der Funktion – seiryuu10

+0

Das ist ein lokales Array Ich sehe nirgendwo, wo Sie das speichern Informationen irgendwo, die für die Funktion nicht lokal sind Auch wenn es sich um Kommas handelt, müssen Sie das Trennzeichen ändern, das der Scanner verwendet. –

Antwort

2

Sie die Standard-Trennzeichen auf dem Objekt Scanner verwenden.

versuchen, die Trennzeichen IVE bekam in der Linie useDelimiter (\\ s * \\ s * "). Die Regex Ihr die Eingabe aus der Datei durch ein Komma aufzuteilen.


try { 
      File f = new File("input.txt"); 
      Scanner scan = new Scanner(f); 
      scan.useDelimiter("\\s*,\\s*"); 
      String nextLine; //left it in even tho you are not using it 
      int[] testAry = new int[10]; 
      int i = 0; 

      while (scan.hasNextInt()) { 
       testAry[i] = scan.nextInt(); 
       System.out.println(testAry[i]); 
       i++; 
      } 
     } catch (FileNotFoundException fnf) { 
      System.out.println(fnf.getMessage()); 
     } 

0

Sie eine weitere Ausnahme werfen könnte man nicht

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#nextInt fangen()

die vom Eingang gescannt int wirft:

InputMismatchException - if the next token does not match the Integer regular expression, or is out of range 
NoSuchElementException - if input is exhausted 
IllegalStateException - if this scanner is closed 

Oder Sie könnten nur alte Schule gehen und einen gepufferten Leser verwenden Sie, um zu überprüfen bekommen Daten

try{ 

    FileInputStream fstream = new FileInputStream(filename); 

    DataInputStream in = new DataInputStream(fstream); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
    String strLine; 

    while ((strLine = br.readLine()) != null) { 

    System.out.println (strLine); 
    } 
    in.close(); 
    }catch (Exception e){ 
    System.err.println("Error: " + e.getMessage()); 
    } 
Verwandte Themen