2017-01-16 3 views
1

Hallo Leute, ich bin Javas Anfänger und ich versuchte, einige Daten aus einer Datei zu lesen, aber ein Fehler trat auf, wenn es versuchte, den Wert des Doppels und ich zu lesen kann nicht herausfinden, warum. Dies ist mein Code:Lesen Doppel aus einer Datei mit Scanner, java.util.InputMismatchException

package bestcombo; 
import java.io.*; 
import java.util.Scanner; 
public class Componentes 
{ 
    String name = ""; 
    Lojas[] stores = new Lojas[8]; 
    public void ComponenteNome(String nome) 
    { 
     name = nome; 
    } 
    public void InicializeStores() 
    { 
     for (int i = 0; i < 8; i++) 
     { 
      stores[i] = new Lojas(); 
     } 
    } 
    public void InserirInformacao() throws IOException 
    { 
     int i = 0, val = 0, quant = 0; 
     double price = 0; 
     String FileName = ""; 
     Scanner ReadKeyboard = new Scanner(System.in), ReadFile = null; 
     InicializeStores(); 
     System.out.println("File:\n"); 
     FileName = ReadKeyboard.nextLine(); 
     ReadFile = new Scanner(new File(FileName)); 
     while(ReadFile.hasNext()) 
     { 
      ReadFile.useDelimiter(":"); 
      val = ReadFile.nextInt(); 
      ReadFile.useDelimiter(":"); 
      price = ReadFile.nextDouble(); 
      ReadFile.useDelimiter("\\n"); 
      quant = ReadFile.nextInt(); 
      stores[i].LojaValor(val); 
      stores[i].LojaQuantidade(quant); 
      stores[i].LojaPreco(price); 
     } 
    } 
} 

Dies ist die Daten in meiner Datei:

1:206.90:1 
2:209.90:1 
3:212.90:1 
4:212.90:1 
5:213.90:1 
6:224.90:1 
7:229.24:1 
8:219.00:1 

Und dies sind die Fehler

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextDouble(Scanner.java:2413) 
at bestcombo.Componentes.InserirInformacao(Componentes.java:34) 
at bestcombo.BestCombo.main(BestCombo.java:13) 

Antwort

0

Wenn beim Lesen von Datei würde ich empfehle mit getNextLine(), es macht viel einfacher Code und Extraktion von Werten. Außerdem ist Ihre Datei, die Sie einlesen, doppelt getrennt, was die Extraktion von Werten sehr einfach macht. versuchen Sie es mit dieser while-Schleife statt

while(ReadFile.hasNextLine()) 
{ 
    String inputOfFile = ReadFile.nextLine(); 
    String[] info = inputOfFile.split(":"); 
    try{ 
     if(info.length == 3) 
     { 
      val = Integer.parseInt(info[0]); 
      price = Double.parseDouble(info[1]); 
      quant = Integer.parseInt(info[2]); 
      stores[i].LojaValor(val); 
      stores[i].LojaQuantidade(quant); 
      stores[i].LojaPreco(price); 
      i++; 
     } 
     else 
     { 
      System.err.println("Input incorrectly formatted: " + inputOfFile); 
     } 
    }catch (NumberFormatException e) { 
     System.err.println("Error when trying to parse: " + inputOfFile); 
    } 
} 

Meine Vermutung ist, gibt es eine extra Zeilenendmarke oder etwas in der Datei, die Sie aus lesen. Das oben genannte sollte Ihre Datei recht einfach handhaben können. Ein weiterer Vorteil dieser Implementierung besteht darin, dass sie weiterhin aus der Datei liest, auch wenn Sie auf Stellen in der Datei stoßen, an denen die Daten falsch formatiert sind.

+0

Danke Mann, ich werde es versuchen! –

+0

lass es mich wissen, wenn es funktioniert @ TiagoLima –

+0

Es funktionierte perfekt, nur eine Sache fehlte, die war die Zeile "i ++;". Vielen Dank! :) –

Verwandte Themen