No puedo encontrar por qué ocurre una excepción InputMismatchException

2020-02-15 java

Estoy atrapado en un lugar en un programa que escribo que toma información de documentos de texto y los asigna a tres dobles. Sin embargo, sigo recibiendo el error "Exception in thread" main java.util.InputMismatchException (registro completo a continuación) que normalmente significa que se está pidiendo que se ingrese el tipo de variable incorrecto, pero parece que no puedo ver por qué eso sea ​​el caso.

Aquí está el registro:

Enter file name: Ellipsoid_data_1.txt
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
    at EllipsoidListApp.main(EllipsoidListApp.java:39)

Este es solo uno de los tres archivos, pero aquí es donde está el problema. Cualquier cosa que pueda hacer para ayudar sería fantástica, y puedo proporcionar los otros archivos si es necesario.

Aquí está el programa completo:

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



/** 
*This class prints a list of Ellipsoids.
*Comp 1210 - project 5
*Steven Manings
*Version 2/14/2020
*/

public class EllipsoidListApp {

/**
 * Reads file with ellipsoid data, creates EllipsoidList, prints EllipsoidList,
 * prints summary of EllipsoidList.
 *
 * @param args - is not used.
 * @throws FileNotFoundException required by Scanner for File
 */ 

   public static void main(String[] args) throws FileNotFoundException {

      ArrayList<Ellipsoid> tList = new ArrayList<Ellipsoid>();

      Scanner scan = new Scanner(System.in);
      System.out.print("Enter file name: ");
      String fileName = scan.nextLine();

      Scanner scanFile = new Scanner(new File(fileName));

      String ellipsoidListName = scanFile.nextLine();

      while (scanFile.hasNext()) {

         double a = scanFile.nextDouble();
         double b = scanFile.nextDouble();
         double c = scanFile.nextDouble();

         Ellipsoid t = new Ellipsoid(null, a , b, c);
         tList.add(t);           
      }


      scanFile.close();

      EllipsoidList myEList = new EllipsoidList(ellipsoidListName, tList);

      System.out.println(myEList);

      System.out.println(myEList.summaryInfo());


   }

}   

Fui y agregué el contenido del archivo de datos aquí:

Ellipsoid Test List
Ex 1
1
2
3
 Ex 2   
2.3
5.5
7.4
Ex 3
123.4  
234.5
345.6

Answers

NomadMaker es correcto en el comentario. Después de abrir el archivo, lee el nombre de la lista Ellipsoid Test List llamando a scanFile.nextLine() . Ahora el escáner está posicionado en la línea Ex 1 . Después de eso, ingresas al bucle. Lo primero que debe hacer en su bucle es llamar a scanFile.nextDouble() . Dado que su escáner está posicionado en Ex y Ex no coincide con la sintaxis de un doble, obtiene la InputMismatchException que informó.

Creo que una solución es llamar a nextLine() una vez más al comienzo de su ciclo para leer Ex 1 (y la próxima vez Ex 2 y así sucesivamente).

Esto podría, y solo estoy adivinando aquí, también darle algo para pasar como primer argumento para el constructor Ellipsoid lugar de null .

Related