2017-01-16 9 views
1

私はJavaの初心者で、ファイルからデータを読み取ろうとしましたが、double値を読み取ろうとしたときにエラーが発生しました。理由を理解できません。これは私のコードです:スキャナでjava.util.InputMismatchExceptionを使用してdoubleを読み取る

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); 
     } 
    } 
} 

これは私のファイル内のデータです:

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 

そして、これはエラー私は、ファイルからでしょう読ん

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) 

答えて

0

ですgetNextLine()を使用することをお勧めします。これはコードの抽出と値の抽出をはるかに簡単にします。さらに、読み込んだデータファイルはコロンで区切られており、値の抽出が非常に簡単です。このwhileループを使用してみてください

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); 
    } 
} 

あなたが読んでいるファイルの中に余分な改行文字があります。上記はあなたのファイルを非常に簡単に処理できるはずです。この実装のもう一つの利点は、データが正しくフォーマットされていないファイルの場所に実行しても、ファイルからの読み取りを継続することです。

+0

ありがとう、私はそれを試してみましょう! –

+0

私はそれが動作するかどうか教えてください@TiagoLima –

+0

それは完璧に働いていました。大いに感謝する! :) –

関連する問題