I do not run a program with Java fixes correctly

1
public class AlumnosA {

    String [] alumnos = new String[2];
    int []calificacion = new int[2];
    String []letra = new String[2];
    String a;
    int c;
    String estatus;
    String cal;


    public void alumno(){
        Scanner teclado = new Scanner(System.in);
        for(int i=0; i<2; i++){
        System.out.println("Ingresa el nombre del alumno : ");
        a=teclado.next();
        alumnos[i]=a;
   }
    for(int i=0; i<2; i++){
        System.out.println("Ingresa la calificacion de "+alumnos[i]);
        c=teclado.nextInt();
        calificacion[i]=c;
    }
    for(int i=0; i<2; i++){
        if(calificacion[i]<7){
            letra[i]="AS";
        }else if(calificacion[i]>=8&& calificacion[i]<=8){
            letra[i]="SA";
        }else if(calificacion[i]>=9&& calificacion[i]<=9){
            letra[i]="DE";
         }else{
            letra[i]="AU";
        }
    }
                for(int ii=0; ii<2; ii++){
        System.out.println(alumnos[ii]+"");
        System.out.println(calificacion[ii]+"");
        System.out.println(letra[ii]+"");
    }
    }
    public static void main(String[] args) {
        AlumnosA xd = new AlumnosA();
        xd.alumno();



    }
} 

After entering the name of the students, I get the following error.

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.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at alumnos.AlumnosA.alumno(AlumnosA.java:34)
    at alumnos.AlumnosA.main(AlumnosA.java:56)
C:\Users\Daniel\AppData\Local\NetBeans\Cache.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 4 seconds)

I really do not know why I should.

    
asked by Daniel Horta 19.09.2018 в 05:22
source

1 answer

1

The InputMismatch occurs because here:

    System.out.println("Ingresa la calificacion de "+alumnos[i]);
    c=teclado.nextInt();

you do not set any controls to force the user to type a whole number.

You can do it this way:

public class AlumnosA {

    String [] alumnos = new String[2];
    int []calificacion = new int[2];
    String []letra = new String[2];
    String a;
    int c;
    String estatus;
    String cal;


    public void alumno(){
        Scanner teclado = new Scanner(System.in);
        for(int i=0; i<2; i++){
            System.out.println("Ingresa el nombre del alumno : ");
            a=teclado.next();
            alumnos[i]=a;
        }

        for(int i=0; i<2; i++){
            System.out.println("Ingresa la calificacion de "+alumnos[i]);

            /*No salimos del bucle hasta que no escriba un entero*/
            while (!teclado.hasNextInt()) {
                teclado.next();
                System.out.println("No escribiste un entero. Por favor ingresa la calificacion de " + alumnos[i] + " correctamente");
            }

            c=teclado.nextInt();
            calificacion[i]=c;
        }
        teclado.close();

        for(int i=0; i<2; i++){
            if(calificacion[i]<7){
                letra[i]="AS";
            }else if(calificacion[i]>=8&& calificacion[i]<=8){
                letra[i]="SA";
            }else if(calificacion[i]>=9&& calificacion[i]<=9){
                letra[i]="DE";
            }else{
                letra[i]="AU";
            }
        }

        for(int ii=0; ii<2; ii++){
            System.out.println(alumnos[ii]+"");
            System.out.println(calificacion[ii]+"");
            System.out.println(letra[ii]+"");
        }
    }

    public static void main(String[] args) {
        AlumnosA xd = new AlumnosA();
        xd.alumno();
    }

} 

We do a test trying to write incorrect data:

Ingresa el nombre del alumno : 
Pedro
Ingresa el nombre del alumno : 
Juan
Ingresa la calificacion de Pedro
l
No escribiste un entero. Por favor ingresa la calificacion de Pedro correctamente
10
Ingresa la calificacion de Juan
jjjj
No escribiste un entero. Por favor ingresa la calificacion de Juan correctamente
hhhh
No escribiste un entero. Por favor ingresa la calificacion de Juan correctamente
20
Pedro
10
AU
Juan
20
AU
BUILD SUCCESSFUL (total time: 32 seconds)
    
answered by 19.09.2018 в 07:00