使用Scanner从文件double值读取 - InputMismatchException?

时间:2013-07-01 14:51:10

标签: java java.util.scanner inputmismatchexception

我尝试从文件双值读取并使用Scanner来实现此目的。

它抛出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);
    }
}

更新
我尝试将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

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

  • 最大初始化为第一个 double(检查类型后)
  • 使用正确的分隔符来解析您的输入(\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;
        }
    }
    

答案 1 :(得分: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);
} }

答案 2 :(得分:0)

我找到了解决方案 - 需要创建File对象,然后将其提供给扫描器类:

String filename = "input.txt"; 
File newFile = new File(filename);
Scanner in = new Scanner(newFile);
相关问题