Чтение из файла двойного значения с помощью 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

Как решить эту беду?


person catch23    schedule 01.07.2013    source источник
comment
двойной наибольший = in.nextDouble(); строка, вызывающая проблему. Ввод, который вы получаете в этой строке, кажется не двойным значением.   -  person kosa    schedule 01.07.2013
comment
@Nambari Как обойти эту проблему? Попытался сделать double largest = 0. Исключение не возникает, но ввод неверный - наибольший = 0.0   -  person catch23    schedule 01.07.2013
comment
Сделайте ту же проверку, hasNextDouble(), затем получите только двойное значение.   -  person kosa    schedule 01.07.2013
comment
@Ravi Thapliyal Это неправильно, мы не можем проверить наибольшее значение, если этот двойной размер не больше 0. Чем больше, тем больше все время ...   -  person catch23    schedule 01.07.2013
comment
разместите свой вклад здесь.   -  person Ruchira Gayan Ranaweera    schedule 01.07.2013
comment
@Ruchira Я обновил вопрос.   -  person catch23    schedule 01.07.2013
comment
@nazar_art, где входной образец? скопируйте и вставьте содержимое input.txt   -  person zerocool    schedule 01.07.2013
comment
@nazar_art Проверьте с моим решением   -  person Ruchira Gayan Ranaweera    schedule 01.07.2013


Ответы (3)


Я нашел решение - нужно создать объект File, а затем передать его классу сканера:

String filename = "input.txt"; 
File newFile = new File(filename);
Scanner in = new Scanner(newFile);
person catch23    schedule 01.07.2013

Попробуй это

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);
} }
person Ruchira Gayan Ranaweera    schedule 01.07.2013
comment
Неверно предполагать, что каждый двойник находится на отдельной строке; особенно, когда код ОП явно никогда не использовал nextLine(). - person Ravi K Thapliyal; 01.07.2013
comment
@RaviThapliyal в этом случае вы можете использовать next(); - person Ruchira Gayan Ranaweera; 01.07.2013

  • Инициализировать самый большой до первого двойника (после проверки типа)
  • Используйте правильный разделитель для синтаксического анализа ввода (\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;
        }
    }
    
person Ravi K Thapliyal    schedule 01.07.2013
comment
Не работает Actual is - Largest value: 4.9E-324 и Expected is - Largest value: 1.343239923E9 не работает - person catch23; 01.07.2013
comment
Можете ли вы также опубликовать содержимое вашего файла? - person Ravi K Thapliyal; 01.07.2013
comment
@nazar_art Проверьте мой обновленный ответ. Вам нужно анализировать файл построчно, так как каждый ввод находится на новом. - person Ravi K Thapliyal; 01.07.2013
comment
Этот ответ неверен. new Scanner("input.txt") создает сканер для чтения строки, а не файла. - person Stephen C; 20.10.2019