Java - Toda la tarde, pero no modifica la variable local aún.

 
Vista:

Toda la tarde, pero no modifica la variable local aún.

Publicado por Eric (5 intervenciones) el 15/05/2016 23:59:26
Muy buenas,
Llevo todo el día tratando de resolver este problema, pero no soy capaz. Agradecería enormemente que alguien me echara una mano, porque empiezo a pensar que le pasa algo a mi ordenador.

Estoy teniendo un problema con un método que me sirve para añadir un Alumno a un grupo de una academia.

El resumen de la estructura es:
- Los grupos tienen listas de objeto Alumno.
-Las materias tienen listas de objetos Grupo.
-La academia tiene lista de objetos Materia.

Por tanto, para añadir desde Academia un alumno a un grupo, lo tengo que hacer a través de las materias de esa Academia.

Lo curioso es que las partes de las que se compone el método, si las hago trabajar aparte, funcionan perfectamente, pero al combinarlas, sencillamente funcionan al revés, o, ni funcionan.

El pseudocódigo es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
introduzco el grupo que quiero asignar, y el alumno al que  quiero asignar.
{ declaro variable booleana como true
 
mientras (esa variable sea true)
  { para (cada materia de la lista de materias de la academia)
{si(la materia contiene en su lista de grupos al grupo a asignar)
{
me cambias la variable booleana a false
}
}
}
 
Si (la variable boolean es false)
{Uso metodo para añadir el alumno a asignar al grupo a asignar}
else {Imprimo mensaje de error, diciendo que ese grupo no pertence a ninguna de las materias de la academia}
}

El método es el siguiente; y me esta fallando en el método auxiliar materiaContieneGrupo, que explico más abajo, y en la moficacion de la variable local.
es decir, al entrar dentro de el if, debería modificarme el valor de grupoNoContenido a false; sin embargo no lo hace, sino que lo mantiene como false, aunque entre dentro del if.
Lo curioso es que si escribo ese mismo código por separado, funciona perfectamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public void anadirAlumnoGrupoAcademia(Grupo grupoAsignado, Alumno alumnoGrupoAcademia)
    {
        // Declaro una variable booleana que me servira para ejecutar el bucle while que viene a continuacion.
        // Esta variable, mientras es verdadera nos esta diciendo que el grupo al que queremos anadir alumnos no esta contendio dentro del ArrayList<Grupo> de las materias que se imparten en esta academia.
        boolean grupoNoContenido = true;
 
        while (grupoNoContenido==true)
        {// Mientras la variable grupoNoContenido sea verdadera ejecuto las instrucciones que buscan el grupo dentro de las materias de esta academia. 
 
            for(Materia materia: listaMateriasAcademia)
            {// Para cada materia de las que se imparten en esta academia, veo si el grupo al que quiero anadir alumnos imparte la materia en cuestion.
 
                if (materia.materiaContieneGrupo(grupoAsignado)==true)
                {
                    // Si resulta que la materia contiene al grupo, significa que el grupo pertenece a una materia impartida dentro de la academia.
                    // Entonces cambio la condicion y el bucle while dejara de ejecutarse.
                    grupoNoContenido = false;
                    System.out.println("Ha entrado en el if");
                    break;
 
                }
                else
                {System.out.println("No ha entrado en el if");}
 
 
            }
 
 
        }
 
        // Por ultimo, si grupoNoContenido = false, significa que hemos encontrado una materia que contiene el grupo en cuestion.
        // Por tanto procedemos a anadir el alumno al grupoAsignado.
        // Los mensajes de error al anadir el alumno seran ejecutados por el propio metodo al que hemos recurrido. 
        if (grupoNoContenido =false)
        {
            grupoAsignado.anadirAlumno(alumnoGrupoAcademia);
        }
        else
        { // En caso contrario salta mensaje de error.
            System.out.println("El grupo al que quiere anadir alumnos no pertenece a esta academia");
        }


Este es el metodo auxiliar materiaContieneGrupo.

Y cuando lo ejecuto por separado, funciona perfectamente, sin ebargo, al meterlo dentro del metodo de más arriba, funciona exactamente al revés-. No soy capaz de entenderlo.

public boolean materiaContieneGrupo(Grupo g)
{
if(listaDeGruposMateria.contains(g))
{
return true;
}
else {return false;}
}
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