Checking the whole number does not work

0

I'm stack with the integer reading of this program ...

When entering the measure of an array that I have left in NULL, I need the variable variable to be accepted only if it is a whole number, if not ignore this data and I will have to re-enter it until I type an integer, in principle I have made this code that seems correct, but if I put a decimal number the program keeps running and ends ...

import java.util.Scanner;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author cbermejo
 */
public class ProgramaDeClasesEac {

int[] classesA = null;
int[] classesB = null;
boolean noSurti = true;
Scanner scan = new Scanner(System.in);

public static void main(String[] args) {

    ProgramaDeClasesEac programa = new ProgramaDeClasesEac();
    programa.inici();

}

private void inici() {
    while (noSurti) {
        intro();
        entraMida();
        entraPosicions();
        imprimeixPosicions();
        Compara();
        Surti();
    }
}

private void intro() {
    System.out.println("Aquest programa et demana que entris la mida de dos clases A y B.\n"
            + "Despres et demanara que entris les edats dels alumnes. \n"
            + "Una vegada estiguien entrades comparara les dues clases y retornara si la classe"
            + "< B > es mes gran que la classe < A >.");
}

private void entraMida() {

    System.out.println("Digam la mida que tenen les clases A i B:");

    **int mida = 0;
    if (scan.hasNextInt()) {
        mida = scan.nextInt();
    } else {
        scan.next();
    }**
    classesA = new int[mida];
    classesB = new int[mida];

}

private void entraPosicions() {
    System.out.println("Ara digam les edats del nens de la classe A:");

    for (int i = 0; i < classesA.length; i++) {
        if (scan.hasNextInt()) {

            classesA[i] = scan.nextInt();
            if (classesA[i] > 0 && classesA[i] < 21) {
                System.out.println("la posicio: " + (i + 1) + " de la clase A es: " + classesA[i]);
            } else {
                System.out.println("la edat esta compresa entre 1 any i 20 anys.");
                i--;
            }
        } else {
            System.out.println("Aquest no es un valor sencer");
            i--;
            scan.next();
        }
        scan.nextLine();
    }
    System.out.println("Ara digam les edats del nens de la classe B:");
    for (int i = 0; i < classesB.length; i++) {
        if (scan.hasNextInt()) {

            classesB[i] = scan.nextInt();
            if (classesB[i] > 0 && classesB[i] < 21) {
                System.out.println("la posicio: " + (i + 1) + " de la clase B es: " + classesB[i]);
            } else {
                System.out.println("la edat esta compresa entre 1 any i 20 anys.");
                i--;
            }
        } else {
            System.out.println("Aquest no es un valor sencer");
            i--;
            scan.next();
        }
        scan.nextLine();
    }

}

private void imprimeixPosicions() {
    System.out.print("Collectio 1: \n ");
    for (int i = 0; i < classesA.length; i++) {

        System.out.print(classesA[i] + " ");
    }
    System.out.println("  ");
    System.out.print("Collectio 2: \n ");
    for (int i = 0; i < classesB.length; i++) {

        System.out.print(classesB[i] + " ");

    }
    System.out.println("  ");
}

private void Compara() {
    int contador = 0;
    for (int i = 0; i < classesA.length; i++) {

        for (int j = 0; j < classesB.length; j++) {
            if (classesB[i] <= classesA[j]) {
                contador++;
            }
        }
    }

    if (contador >= 1) {
        System.out.println("No es cumpleix que la clase B te els alumnes mayors que els de la A");
    } else {
        System.out.println("Correcte els alumnes classe B son mes grans que els de la classe A");

    }

}

private void Surti() {
    System.out.println("S ha acabat el joc.");
    noSurti = false;
}

}

    
asked by Carlos 22.02.2017 в 08:42
source

1 answer

0

Try the following loop so that it does not get out of it until you enter a correct number:

private void entraMida() {
    int mida = 0;
    do {
        System.out.println("Digam la mida que tenen les clases A i B:");
        if (scan.hasNext()) {
            if (scan.hasNextInt()) {
                mida = scan.nextInt();
                break;
            } else {
                scan.next();
                System.out.println("La entrada no es numérica");
            }
        } else {
            System.out.println("Fin de la entrada de datos");
        }
    } while (true);
    classesA = new int[mida];
    classesB = new int[mida];
}

Basically what it does is not allow to leave the loop (with break ) until it has valid data.

    
answered by 22.02.2017 / 09:12
source