Estoy haciendo un programilla en Java para el IOC (ciclo de DAW). Voy a intentar explicarlo lo mejor posible, el código está en catalán pero no creo que haya ningún problema para entenderlo.
El programa te va pidiendo una serie de datos, pero en el momento en el que llega al switch deja de funcionar. Y antes de que me lo digáis, según el enunciado que me han dado esa parte del código debe estar en switch si o sí.
Ilustro el problema a continuación. Al final del hilo dejo el código completo.
El programa va haciendo preguntas. En este primer paso hay que introducir un numero entero entre 20 y 499. Hasta aquí todo bien, si pones 1 o 800 o lo que sea el programa da error y se para. Luego te pide el género, si pones algo que no sea 1, 2 o 3 el programa se para. Todo correcto.
A continuación viene el problema. Cuando eliges entre una de estas opciones el programa te pide que elijas una asignatura. En teoría, en el momento en que yo escribo un número que no sea 0, 1, 2, 3 o 4 debería dar error y terminar el programa. Como veis, escribo un 5 y el programa no detecta el error.
Lo mismo para este otro caso. En el momento que yo escribo otra cosa que no sea 0 debería dar error y terminar el programa, pero no es así.
Antes de llegar al switch todos los errores funcionan y dan este mensaje: "Porfavor, introduzca un valor válido".
Aquí os dejo el código entero:
package projecte.pkg1;
import java.util.Scanner;
/**
*
@author X
*/
public class PROJECTE1 {/**
@param args the command line arguments
*/
public static final int NIV_0 = 0;
public static final int NIV_1 = 1;
public static final int NIV_2 = 2;
public static final int NUMID_MIN = 21;
public static final int NUMID_MAX = 499;
public static final int GEN_MIN = 1;
public static final int GEN_MAX = 3;
public static final int NIVED_MIN = 0;
public static final int NIVED_MAX = 2;
public static final int AREA0_MIN = 0;
public static final int AREA0_MAX = 4;
public static final int AREA1_MIN = 0;
public static final int AREA1_MAX = 6;
public static final int AREA2 = 0;
public static void main(String[] args) {
// VARIABLES
int id, genere, nivell, experiencia;
int area0 = 0;
int area1 = 0;
int area2 = 0;
boolean tipusCorrecte;
boolean dadaCorrecte;
// CODI
Scanner lector = new Scanner (System.in);
// DEMANEM UN NUMERO DE ID
System.out.println("Introdueixi ID: ");
tipusCorrecte = lector.hasNextInt();//Per analitzar tipus de dada
if (tipusCorrecte){ // Per verificar que és un número sencer
id = lector.nextInt();
if ((id < NUMID_MIN) || (id > NUMID_MAX)){
dadaCorrecte = false;
System.out.println("Sisplau, introdueixi un valor vàlid. ");
}
// DEMANEM GÈNERE
else {
System.out.println("Indiqui quin es el seu gènere: ");
System.out.println("1: Dona ");
System.out.println("2: Home ");
System.out.println("3: Prefereixo no respondre ");
genere = lector.nextInt();
if (genere == 1) {
dadaCorrecte = true;
}
if (genere == 2) {
dadaCorrecte = true;
}
if (genere == 3) {
dadaCorrecte = true;
}
if ((genere < GEN_MIN) || (genere > GEN_MAX)) {
dadaCorrecte = false;
System.out.println("Sisplau, introdueixi un valor vàlid."); // El programa finalitza si no s'introdueix un valor vàlid
}
// DEMANEM NIVELL D'EDUCACIÓ
else {
System.out.println("Quin és el seu nivell d'educació?");
System.out.println("0: Primària");
System.out.println("1: Secundària ");
System.out.println("2: Superior");
nivell = lector.nextInt();
// DEMANEM ÀREA
switch (nivell) {
case NIV_0:
System.out.println("0: Totes");
System.out.println("1: Matemàtiques");
System.out.println("2: Lectura");
System.out.println("3: Castellà");
System.out.println("4: Català");
area0 = lector.nextInt();
break;
case NIV_1:
System.out.println("0: Totes");
System.out.println("1: Matemàtiques");
System.out.println("2: Lectura");
System.out.println("3: Castellà");
System.out.println("4: Català");
System.out.println("5: Ciència");
System.out.println("6: Programació");
area1 = lector.nextInt();
break;
case NIV_2:
System.out.println("0: Totes");
area2 = lector.nextInt();
break;
}
// CONTROL D'ERRORS
if ((nivell < NIVED_MIN) || (nivell > NIVED_MAX)){
dadaCorrecte = false;
System.out.println("Sisplau, introdueixi un valor vàlid.");
if ((area0 < AREA0_MIN) || (area0 > AREA0_MAX)) {
dadaCorrecte = false;
System.out.println("Sisplau, introdueixi un valor vàlid.");
}
if ((area1 < AREA1_MIN) || (area1 > AREA1_MAX)) {
dadaCorrecte = false;
System.out.println("Sisplau, introdueixi un valor vàlid.");
}
if (area2 > AREA2) {
dadaCorrecte = false;
System.out.println("Sisplau, introdueixi un valor vàlid.");
}
}
}
}
}
}
}
PD: He visto que no hay un hilo de dudas generales de Java, si a los moderadores les parece bien podríamos utilizar este hilo para ello.