2013-07-01 103 views
0

我嘗試從文件double值中讀取數據,並使用Scanner來達到此目的。使用Scanner從文件double值讀取 - InputMismatchException?

它拋出InputMismatchException

"input.txt" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:909) 
    at java.util.Scanner.next(Scanner.java:1530) 
    at java.util.Scanner.nextDouble(Scanner.java:2456) 

而且我不明白爲什麼出現這種情況?

代碼:

public class Largest 
{ 
    public static void main(String[] args) 
    throws FileNotFoundException 
    { 
     String filename = "input.txt"; 
     Scanner in = new Scanner(filename); 

     double largest = in.nextDouble(); 
     while (in.hasNextDouble()) 
     { 
      double input = in.nextDouble(); 
      if (input > largest) 
      { 
       largest = input; 
      } 
     } 
     in.close(); 
     System.out.println("Largest value: " + largest); 
    } 
} 

UPDATE:
我試圖改變double largest = in.nextDouble();double largest = 0;
但得到錯誤的輸入:

filename  Actual    Expected 
------------------------------------------------------------- 
"input.txt" Largest value: 0.0 Largest value: 1.343239923E9 
"input2.txt" Largest value: 0.0 Largest value: 40.1 

文件內容是這樣的:

89343455 
46746846 
56.78 
55486411 

如何解決這個問題?

+0

雙最大= in.nextDouble();線路導致問題。你在這條線上得到的輸入似乎不是雙重值。 – kosa

+0

@Nambari如何繞過這個問題?嘗試使'雙最大= 0'。是不是例外,但輸入是錯誤的 - 最大= 0.0 –

+0

做同樣的檢查,hasNextDouble(),然後只得到兩倍。 – kosa

回答

0

我找到了解決方案 - 無需創建文件的對象,然後將其輸送到掃描器類:

String filename = "input.txt"; 
File newFile = new File(filename); 
Scanner in = new Scanner(newFile); 
1
  • 初始化最大第一
  • 使用正確的分隔符解析您的輸入(\n =新行)

    String filename = "input.txt"; 
    Scanner in = new Scanner(filename).useDelimiter("\\n"); 
    
    double largest; 
    if (in.hasNextDouble()) 
        largest = in.nextDouble(); 
    
    while (in.hasNextDouble()) 
    { 
        double input = in.nextDouble(); 
        if (input > largest) 
        { 
         largest = input; 
        } 
    } 
    
+0

它不起作用'Actual is - 最大值:4.9E-324'和'Expected is - 最大值:1.343239923E9'不起作用 –

+0

Can你還發布你的文件內容? –

+0

我提出的問題 –

0
(覈對型號後)

試試這個

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class MainClass{ 
public static void main(String[] args) 
     throws FileNotFoundException 
{ 
    Scanner in = new Scanner(new File("D:\\input.txt")); 
    String largestNum=in.next().trim(); 
    double largest = Double.parseDouble(largestNum); 
    while (in.hasNextDouble()) 
    { 
     String Num=in.next().trim(); 
     double input = Double.parseDouble(Num); 
     if (input > largest) 
     { 
      largest = input; 
     } 
    } 
    in.close(); 
    System.out.println("Largest value: " + largest); 
} } 
+0

假設每個double都在一個單獨的行上是不正確的;特別是,當OP的代碼明顯沒有使用* nextLine()*時。 –

+0

@RaviThapliyal在這種情況下,你可以使用next(); –

相關問題