Java - Exception in thread "main" java.util.InputMismatchException Arreglos nextLine

   
Vista:

Exception in thread "main" java.util.InputMismatchException Arreglos nextLine

Publicado por MarbisPowerJ (1 intervención) el 07/08/2016 04:54:29
Hola Compañeros, He decidido preguntarles una cosa.
Cuando estoy probando mi programa me encuentro con el siguiente error:
1
2
3
4
5
6
7
8
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 vectormarbis1.MarbisVectors2.Promedios5(MarbisVectors2.java:125)
	at vectormarbis1.VectorMarbis1.main(VectorMarbis1.java:28)
C:\Users\ManoloAurelio\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 39 seconds)
Sé que el error se refiere a que ingresé un dato que no corresponde al tipo de variable que tengo. En este caso es String. Necesito Usar nombre y apellido en el código, como parte de una lista. Y estoy usando arreglos para almacenar datos.
Usé arreglos bidimensionales, pero no creo que sea eso lo que me impide leer.
Bueno el caso es que el código es este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void Promedios5(){
        Scanner Marbis=new Scanner(System.in);
        String[] x=new String[5];
        double[][] a=new double[5][4];
        double[] b=new double [5],c=new double[5];
        System.out.println("Este programa genera los promedios de las notas de cuatro unidades\n"
                + "se le solicitarán a usted, el nombre y las cuatro notas");
        System.out.println("Podría ingresarlas ahora por favor:");
        for(int y=0;y<=4;y++){
            System.out.println("Ingrese el nombre:");
            x[y]=Marbis.nextLine();/**EL caso es que aquí estoy leyendo el arreglo pero no logro hacer que este se repita en la segunda lectura porque me marca el error anterior**/
            for(int z=0;z<=3;z++){
                a[y][z]=Marbis.nextDouble();
            }
            b[y]=a[y][0]+a[y][1]+a[y][2]+a[y][3];
            c[y]=b[y]/4;
        }
        System.out.println("Ahora usted verá los promedios de las personas:");
        System.out.println("Nombre:\t\t\tPromedio");
        for(int m=0;m<=4;m++)
            System.out.printf("%s:\t\t%.2f\n",x[m],c[m]);
    }
Como ven en el primer paso del ciclo for, continúa de manera normal, pero cuando vuelve a empezar el ciclo me encuentro con que no puedo ingresar ningún string porque me marca la onda esa. Pido que me ayuden por favor, no puedo hacer nada.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Exception in thread "main" java.util.InputMismatchException Arreglos nextLine

Publicado por ctmy (28 intervenciones) el 07/08/2016 06:25:13
Move
1
Scanner Marbis = new Scanner(System.in);
dentro del primer for.

1
2
3
4
5
6
7
8
9
for(int y=0;y<=4;y++){
            System.out.println("Ingrese el nombre:");
          Scanner Marbis=new Scanner(System.in);
            x[y]=Marbis.nextLine();
            for(int z=0;z<=3;z++){
                a[y][z]=Marbis.nextDouble();
               .
               .
               .

ctmy-dev.appspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de xve

Exception in thread "main" java.util.InputMismatchException Arreglos nextLine

Publicado por xve (261 intervenciones) el 07/08/2016 08:49:45
Eso no tiene ningún sentido ctmy!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exception in thread "main" java.util.InputMismatchException Arreglos nextLine

Publicado por ctmy (28 intervenciones) el 08/08/2016 07:49:29
Lo probe y funciona como deberia. Si no tiene sentido por lo menos explica el porque. Tus aportes serian mas valiosos si escribieras codigo y no solo comentarios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exception in thread "main" java.util.InputMismatchException Arreglos nextLine

Publicado por Marcelo (47 intervenciones) el 08/08/2016 00:23:21
Buenas, tal vez sea tarde para esta respuesta pero quizás a alguien le sirva.

El tema está en la clase Scanner, por defecto la clase tiene un tema en el buffer cuando se está pidiendo números de cualquier tipo y se le pide a continuación que se ingrese un string. Básicamente el problema radica en que el buffer queda sucio con un enter cada vez que se solicita un numero, mientras se sigan solicitando números la clase puede mabejarlo, sin embargo cuando solicitas un string luego de un número la clase toma ese enter como un ingreso válido del usuario y hace saltar el nextline como si nada, pero en verdad lo que sucedió es que se limpio el buffer y a partir de allí se pueda solicitar strings sin problemas.

En resumen, si se usa un scanner para pedir números se debe hacer un nextline para limpiar el buffer y luego si se puede utilizar para pedir strings. Lo más cómodo es tener 2 scanner, uno para pedir números y otro para strings asi no tenes que manejar el limpiado del buffer... pero queda a gusto.

Por cualquier duda, a las ordenes,
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar