The following program does not mark compilation errors but only the methods work for it darDeAlta(),darDeBaja()
, the other methods consultas(),modificacion()
do not work well because when I call them, the options menu appears: System.out.println("[a]ltas" + "\n" + "[b]ajas" + "\n" + "[c]onsultas" + "\n" + "[m]odificaciones" + "\n" + "[s]alir");
System.out.println("\n Seleccione una opcion");
and if I select any of these options again (m,c,s ), it shows me that menu again, that is, the code is cycled. Because?
How can I solve this problem?
class Alumno {
private String nombre;
private int matricula;
private double calificaciones[];
Alumno() {
}
Alumno(String nombre, int matricula, double calificaciones[]) {
this.calificaciones = calificaciones;
}
String getNombre() {
return nombre;
}
int getMat() {
return matricula;
}
double[] getCalif() {
return calificaciones;
}
void setCalif(double calif[]) {
calificaciones = calif;
}
}
public class Ejercicio{
Map<Integer, Alumno> alumnos = new TreeMap<>();
public boolean darDeAlta() {
Scanner y = new Scanner(System.in);
boolean b=false;
double d[] = new double[5];
System.out.println("Introduzca el nombre del estudiante");
String n = y.nextLine();
System.out.println("Introduzca su matricula (de 5 digitos)");
int m = y.nextInt();
System.out.println("Introduzca las calificaciones: \n");
for (int i = 0; i < 5; i++) {
System.out.println("Introduzca la calificacion");
d[i] = y.nextDouble();
}
if (alumnos.containsKey(m)) {
System.out.println("Esa matricula ya existe, ingrese otra matricula");
} else {
alumnos.put(m, new Alumno(n, m, d));
System.out.println("Se han dado de alta los datos :)");
System.out.println("Desea ingresar mas alumnos?");
String s = y.next();
if (s.compareTo("si")==0 || s.compareTo("no")==0)
b = true;
}
return b;
}
public boolean darDeBaja() {
Scanner y = new Scanner(System.in);
boolean c;
System.out.println("Introduzca la matricula del alumno");
int m = y.nextInt();
c = alumnos.containsKey(m);
if (c) {
alumnos.remove(m);
System.out.println("Se ha dado de baja al alumno");
} else {
System.out.println("No existe esa matricula");
}
return true;
}
public boolean consultas() {
Scanner y = new Scanner(System.in);
boolean c;
Alumno al = new Alumno();
System.out.println("Introduzca la matricula del estudiante a buscar");
int k = y.nextInt();
c = alumnos.containsKey(k);
if (c) {
System.out.println("Los datos son:\n" +"Nombre del alumno: "+ alumnos.get(k) + "Calificaciones: " + al.getCalif());
} else {
System.out.println("El alumno no se encuentra");
}
return true;
}
public boolean modificaciones() {
Scanner y = new Scanner(System.in);
boolean c;
Alumno al = new Alumno();
double calificacionesNvas[] = new double[5];
System.out.println("Introduzca la matricula del estudiante");
int k = y.nextInt();
c = alumnos.containsKey(k);
if (c) {
System.out.println("Cuales son las nuevas calificaciones? \n");
for (int i = 0; i < 4; i++) {
System.out.println("Introduzca la calificacion");
double calif = y.nextDouble();
calificacionesNvas[i] = calif;
}
al.setCalif(calificacionesNvas);
System.out.println("Se han modificado las calificaciones correctamente");
} else {
System.out.println("No existe esa matricula");
}
return true;
}
public static void main(String[] args) {
Scanner x = new Scanner(System.in);
boolean bandera = false;
Ejercicio e = new Ejercicio();
do {
System.out.println("[a]ltas" + "\n" + "[b]ajas" + "\n" + "[c]onsultas" + "\n" + "[m]odificaciones" + "\n" + "[s]alir");
System.out.println("\n Seleccione una opcion");
String opcion = x.next();
if (opcion.compareTo("a") == 0) {
bandera = e.darDeAlta();
}
if (opcion.compareTo("b") == 0) {
e.darDeBaja();
if (opcion.compareTo("c") == 0) {
e.consultas();
if (opcion.compareTo("m") == 0) {
e.modificaciones();
if (opcion.compareTo("s") == 0) {
bandera = false;
}
}
}
}
} while (bandera);
}
}
Why are you putting it inside the if
so it will only do the comparison when option.compareTo("b") is 0 and therefore it will no longer enter, they must be outside
As an extra note, you never equal the flag as in the first processes, I don't know if that is necessary in your code, it depends on you
In your case I would use a block
switch
, the code is much clearer than so manyif ... else if
.