Foros del Web » Programación para mayores de 30 ;) » Java »

¿Cuál es mi error en esta lógica de Java?

Estas en el tema de ¿Cuál es mi error en esta lógica de Java? en el foro de Java en Foros del Web. PERDÓN SI HAGO SPAM o REPLICA DEL TEMA Pero estoy desesperado Es un ejercicio de un Parcial de la Universidad y aún no lo he ...
  #1 (permalink)  
Antiguo 04/04/2013, 18:32
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 15 años, 7 meses
Puntos: 1
¿Cuál es mi error en esta lógica de Java?

PERDÓN SI HAGO SPAM o REPLICA DEL TEMA

Pero estoy desesperado

Es un ejercicio de un Parcial de la Universidad y aún no lo he logrado resolver. El ejercicio dice así:

-------------------------------------------------------------------------------------------------------

Una institución educativa desea almacenar la información correspondiente a su
proceso de notas, para ello es importante la información del estudiante como
el codigo, nombre, apellido, dirección y los teléfonos de contacto. Para realizar
la matricula se tiene en cuenta el año, el semestre (I ó II) y el programa
académico. Además cada estudiante matricula como minimo tres materias por
semestre y máximo siete. Para cada materia se considera un código, nombre y
su número de creditos. La institución a considerado el siguiente esquema de
evaluación para cada una de las materias:

5 Quices 25%
2 Trabajos 15%
3 Parciales 60%

Leer la información correspondiente a los n estudiantes matriculados en
la institución educativa.
· Agregar y modificar las notas de las asignaturas a cargo de un docente
en particular.
· Calcular el promedio de las notas del semestre con respecto al número
de creditos de cada una de las asignaturas matriculadas por un
estudiantes especifico.
· Calcular el promedio general de toda la institución.
· Imprimir los estudiantes con promedio inferior a 3.0
· Buscar un estudiante y un docente por su número de identificación y/o
número de contacto.

-------------------------------------------------------------------------------------------------------

Es que resulta que nosé cuál es mi problema. Al llenar los datos y matricular las materias todo bien. Sin embargo, el problema que tengo es que cuando le ingreso las notas a un estudiante de una materia en particular y luego le lleno las notas a otro estudiante de esa misma materia me dice que ya estan llenas...

¿Porqué sucede eso?, ¿Será porque estoy asignado el mismo objeto Materia a todos los estudiantes que la matriculen?, ¿Será el problema de lógica mal estructurada? Les comparto el archivo por si alguien tiene un tiempito de mirarlo y ayudarme, Gracias de antemano

Archivos Java:
https://www.dropbox.com/s/k2p8mr5niz...itucion_10.rar

Un video ilustrativo
http://www.youtube.com/watch?v=tEi0BabqEuQ

Última edición por ambigus; 04/04/2013 a las 19:13 Razón: Agregado un video ilustrativo del problema
  #2 (permalink)  
Antiguo 05/04/2013, 01:43
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: ¿Cuál es mi error en esta lógica de Java?

Ya te dije en el otro post y en mensaje privado cual era tu problema.

Tienes un array de notas para la materia y compruebas si estan llenas buscando que su tamaño es mayor que 0. ERROR.

Te dije que hicieses las notas en una clase de forma independiente. QUIERO QUE HAGAS ESA CLASE y que pongas aqui su contenido.

Luego sustituyes el array de notas de la materia por ese nuevo array de objetos con las notas independientes.

Cuando tengas eso y lo pegues aqui (deja de poner enlaces), entonces hablamos de corregir el metodo de busqueda de si el estudiante tiene notas asignadas.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 05/04/2013, 06:43
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: ¿Cuál es mi error en esta lógica de Java?

Clase NotasEstudiante - PARTE 1

Código Javascript:
Ver original
  1. package institucion;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class NotasEstudiante {
  9.    
  10.    public  List<Double>       notasdequices               = null;
  11.    public  List<Docente>      docentesdelamateria         = null;
  12.    public  List<Double>       notasdetrabajos             = null;
  13.    public  List<Double>       notasdeparciales            = null;
  14.    private String             codigoestudiante            = null;
  15.    private int                creditos                    = 0;
  16.    private double             notaquiz                    = 0.0;
  17.    private double             notatrabajo                 = 0.0;
  18.    private double             notaparcial                 = 0.0;
  19.    private double             definitivaparciales         = 0.0;
  20.    private double             definitivatrabajos          = 0.0;
  21.    private double             definitivaquices            = 0.0;
  22.    
  23.    BufferedReader lector = new BufferedReader(new InputStreamReader(System.in)); // Crear lector //
  24.    
  25.    public void crear_listas()
  26.    {
  27.        notasdequices = new ArrayList<Double>();
  28.        notasdetrabajos = new ArrayList<Double>();
  29.        notasdeparciales = new ArrayList<Double>();
  30.    }
  31.    
  32.    public void notas_quices()throws IOException {
  33.        
  34.            int n=1;
  35.            int y=5;
  36.            double sumaquices = 0.0;
  37.            double promedioquices = 0.0;
  38.            
  39.            System.out.println("El tama�o de la lista de notas de Quices es: "+notasdequices.size());
  40.            
  41.            if ( notasdequices.size() != 0)
  42.            {
  43.                    System.out.println("Las notas de Quices ya han sido ingresadas. �Desea ingresar nuevas notas? Y/N");
  44.                    String buscador1 = lector.readLine();
  45.                    
  46.                    if( buscador1.equalsIgnoreCase("Y"))
  47.                    {
  48.                            notasdequices.clear();
  49.                            System.out.println("Para ingresar la nota de Quices digite un n�mero entre 5.0 y 0.0"); // Ingrese el Nombre//
  50.                        
  51.                        for ( int i=0; i<y; i++)
  52.                        {
  53.                            
  54.                            System.out.println("Ingrese la nota del Quiz "+(n+i)); // Ingrese el Nombre//
  55.                            setNotaquiz(Double.parseDouble((lector.readLine())));
  56.                            
  57.                            if ( notaquiz <= 5.0 && notaquiz >= 0.0 )
  58.                            {  notasdequices.add(notaquiz);   }
  59.                            else
  60.                                    { n = n-1;
  61.                                          y = y+1;
  62.                                      System.out.println("Ingreso erroneo de la nota, porfavor digite un n�mero decimal entre 5.0 y 0.0");                 }
  63.                        }
  64.                            
  65.                    }
  66.                    
  67.            }
  68.            
  69.            else
  70.            {
  71.                    System.out.println("Para ingresar la nota de Quices digite un n�mero entre 5.0 y 0.0"); // Ingrese el Nombre//
  72.                
  73.                for ( int i=0; i<y; i++)
  74.                {
  75.                    
  76.                    System.out.println("Ingrese la nota del Quiz "+(n+i)); // Ingrese el Nombre//
  77.                    setNotaquiz(Double.parseDouble((lector.readLine())));
  78.                    
  79.                    if ( notaquiz <= 5.0 && notaquiz >= 0.0 )
  80.                    {  notasdequices.add(notaquiz);   }
  81.                    else
  82.                            { n = n-1;
  83.                                  y = y+1;
  84.                              System.out.println("Ingreso erroneo de la nota, porfavor digite un n�mero decimal entre 5.0 y 0.0");                 }
  85.                }
  86.  
  87.            }
  88.            
  89.            System.out.println("Las notas de Quices son:");
  90.            
  91.            for ( int i=0; i<notasdequices.size(); i++)
  92.            {
  93.                    sumaquices = sumaquices + notasdequices.get(i);
  94.                    System.out.println(notasdequices.get(i));  
  95.            }
  96.            
  97.            promedioquices = sumaquices/5;
  98.            System.out.println("La definitiva de Quices es: "+promedioquices);
  99.            setDefinitivaquices(promedioquices*0.25);
  100.            System.out.println("El valor de los Quices en la definitiva de la materia es: "+(definitivaquices));
  101.            
  102.            }
  103.      
  104.    public void notas_trabajos()throws IOException {
  105.        
  106.            int n=1;
  107.            int y=2;
  108.            double sumatrabajos     = 0.0;
  109.            double promediotrabajos = 0.0;
  110.            
  111.            System.out.println("El tama�o de la lista de notas de Trabajos es: "+notasdetrabajos.size());
  112.            
  113.            if ( notasdetrabajos.size() != 0)
  114.            {
  115.                    System.out.println("Las notas de Trabajos ya han sido ingresadas. �Desea ingresar nuevas notas? Y/N");
  116.                    String buscador2 = lector.readLine();
  117.                    
  118.                    if( buscador2.equalsIgnoreCase("Y"))
  119.                    {
  120.                            notasdetrabajos.clear();
  121.                            System.out.println("Para ingresar la nota del trabajo digite un n�mero entre 5.0 y 0.0"); // Ingrese el Nombre//
  122.                        
  123.                        for ( int i=0; i<y; i++)
  124.                        {  
  125.                            System.out.println("Ingrese la nota del Trabajo "+(n+i)); // Ingrese el Nombre//
  126.                            setNotatrabajo(Double.parseDouble((lector.readLine())));
  127.                            
  128.                            if ( notatrabajo <= 5.0 && notatrabajo >= 0.0 )
  129.                            {  notasdetrabajos.add(notatrabajo);   }
  130.                            else
  131.                                    { n = n-1;
  132.                                          y = y+1;
  133.                                      System.out.println("Ingreso erroneo de la nota, porfavor digite un n�mero decimal entre 5.0 y 0.0");                 }
  134.                        }
  135.                            
  136.                    }
  137.                    
  138.            }
  139.            
  140.            else
  141.            {
  142.                    System.out.println("Para ingresar la nota del trabajo digite un n�mero entre 5.0 y 0.0"); // Ingrese el Nombre//
  143.                
  144.                for ( int i=0; i<y; i++)
  145.                {
  146.                    
  147.                    System.out.println("Ingrese la nota del Trabajo "+(n+i)); // Ingrese el Nombre//
  148.                    setNotatrabajo(Double.parseDouble((lector.readLine())));
  149.                    
  150.                    if ( notatrabajo <= 5.0 && notatrabajo >= 0.0 )
  151.                    {  notasdetrabajos.add(notatrabajo);   }
  152.                    else
  153.                            { n = n-1;
  154.                                  y = y+1;
  155.                              System.out.println("Ingreso erroneo de la nota, porfavor digite un n�mero decimal entre 5.0 y 0.0");                 }
  156.                }
  157.  
  158.            }
  159.            
  160.            System.out.println("Las notas de los trabajos son:");
  161.            
  162.            for ( int i=0; i<notasdetrabajos.size(); i++)
  163.            {
  164.                    sumatrabajos = sumatrabajos + notasdetrabajos.get(i);
  165.                    System.out.println(notasdetrabajos.get(i));  
  166.            }
  167.            
  168.            promediotrabajos = sumatrabajos/2;
  169.            System.out.println("La definitiva de Trabajos es: "+promediotrabajos);
  170.            setDefinitivatrabajos(promediotrabajos*0.15);
  171.            System.out.println("El valor de los Trabajos en la definitiva de la materia es: "+(definitivatrabajos));
  172.            
  173.            }
  #4 (permalink)  
Antiguo 05/04/2013, 06:49
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: ¿Cuál es mi error en esta lógica de Java?

Clase NotasEstudiante - PARTE 2

Código Javascript:
Ver original
  1. public void notas_parciales()throws IOException {
  2.        
  3.            int n=1;
  4.            int y=3;
  5.            double sumaparciales     = 0.0;
  6.            double promedioparciales = 0.0;
  7.            
  8.            System.out.println("El tama�o de la lista de notas de Parciales es: "+notasdeparciales.size());
  9.            
  10.            if ( notasdeparciales.size() != 0)
  11.            {
  12.                    System.out.println("Las notas de parciales ya han sido ingresadas. �Desea ingresar nuevas notas? Y/N");
  13.                    String buscador3 = lector.readLine();
  14.                    
  15.                    if( buscador3.equalsIgnoreCase("Y"))
  16.                    {
  17.                            notasdeparciales.clear();
  18.                            System.out.println("Para ingresar la nota del Parcial digite un n�mero entre 5.0 y 0.0"); // Ingrese el Nombre//
  19.                        
  20.                        for ( int i=0; i<y; i++)
  21.                        {  
  22.                            System.out.println("Ingrese la nota del Parcial "+(n+i)); // Ingrese el Nombre//
  23.                            setNotaparcial(Double.parseDouble((lector.readLine())));
  24.                            
  25.                            if ( notaparcial <= 5.0 && notaparcial >= 0.0 )
  26.                            {  notasdeparciales.add(notaparcial);   }
  27.                            else
  28.                                    { n = n-1;
  29.                                          y = y+1;
  30.                                      System.out.println("Ingreso erroneo de la nota, porfavor digite un n�mero decimal entre 5.0 y 0.0");                 }
  31.                        }
  32.                            
  33.                    }
  34.                    
  35.            }
  36.            
  37.            else
  38.            {
  39.                    System.out.println("Para ingresar la nota del Parcial digite un n�mero entre 5.0 y 0.0"); // Ingrese el Nombre//
  40.                
  41.                for ( int i=0; i<y; i++)
  42.                {
  43.                    
  44.                    System.out.println("Ingrese la nota del Parcial "+(n+i)); // Ingrese el Nombre//
  45.                    setNotaparcial(Double.parseDouble((lector.readLine())));
  46.                    
  47.                    if ( notaparcial <= 5.0 && notaparcial >= 0.0 )
  48.                    {  notasdeparciales.add(notaparcial);   }
  49.                    else
  50.                            { n = n-1;
  51.                                  y = y+1;
  52.                              System.out.println("Ingreso erroneo de la nota, porfavor digite un n�mero decimal entre 5.0 y 0.0");                 }
  53.                }
  54.  
  55.            }
  56.            
  57.            System.out.println("Las notas de los parciales son:");
  58.            
  59.            for ( int i=0; i<notasdeparciales.size(); i++)
  60.            {
  61.                    sumaparciales = sumaparciales + notasdeparciales.get(i);
  62.                    System.out.println(notasdeparciales.get(i));  
  63.            }
  64.            
  65.            promedioparciales = sumaparciales/3;
  66.            System.out.println("La definitiva de Parciales es: "+promedioparciales);
  67.            setDefinitivaparciales(promedioparciales*0.60);
  68.            System.out.println("El valor de los Parciales en la definitiva de la materia es: "+(definitivaparciales));
  69.            }
  70.  
  71.    public double definitiva(){
  72.            
  73.            double definitivatemporal = definitivaparciales+definitivatrabajos+definitivaquices;
  74.            double definitivafinal = definitivatemporal*creditos;
  75.            
  76.            System.out.println("La definitiva de la materia es: "+definitivatemporal);
  77.            System.out.println("La definitiva de la materia con creditos para el promedio es: "+definitivafinal);
  78.         return definitivafinal;
  79.        
  80.            
  81.    }
  82.    
  83.    
  84.    
  85.    
  86.     //  -------------------- Metodos de Atributos ------------------- //
  87.    
  88.    public String getCodigoestudiante() {return codigoestudiante;}
  89.    public void setCodigoestudiante(String codigoestudiante) {this.codigoestudiante = codigoestudiante;}
  90.  
  91.    public int getCreditos() {return creditos;}
  92.    public void setCreditos(int creditos) {this.creditos = creditos;}
  93.    
  94.    public double getNotaquiz() {return notaquiz;}
  95.    public void setNotaquiz(double notaquiz) {this.notaquiz = notaquiz;}
  96.  
  97.    public double getNotatrabajo() {return notatrabajo;}
  98.    public void setNotatrabajo(double notatrabajo) {this.notatrabajo = notatrabajo;}
  99.    
  100.    public double getNotaparcial() {return notaparcial;}
  101.    public void setNotaparcial(double notaparcial) {this.notaparcial = notaparcial;}
  102.    
  103.    public double getDefinitivaparciales() {return definitivaparciales;}
  104.    public void setDefinitivaparciales(double definitivaparciales) {this.definitivaparciales = definitivaparciales;}
  105.    
  106.    public double getDefinitivatrabajos() {return definitivatrabajos;}
  107.    public void setDefinitivatrabajos(double definitivatrabajos) {this.definitivatrabajos = definitivatrabajos;}
  108.    
  109.    public double getDefinitivaquices() {return definitivaquices;}
  110.    public void setDefinitivaquices(double definitivaquices) {this.definitivaquices = definitivaquices;}
  111.    
  112.    
  113. }

Es que intenté hacer todo en un sólo código y no me dejó :( Son más de 10 mil caracteres :(

¿Se puede publicar el código en Ideone?

Clase NotasEstudiante = http://ideone.com/hehs7X
Clase Matricula = http://ideone.com/XOzIw0
Clase Materia =http://ideone.com/HmES5Y
  #5 (permalink)  
Antiguo 06/04/2013, 06:22
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: ¿Cuál es mi error en esta lógica de Java?

La clase NotasEstudiante debería llevar solo

public List<Double> notasdequices = null;
public List<Docente> docentesdelamateria = null;
public List<Double> notasdetrabajos = null;
public List<Double> notasdeparciales = null;
private String codigoestudiante = null;

Y sus getters y setters.

La clase Materia tendría integrada como variable un List de esta nueva clase.

La verdad es que no entiendo como teniendo todo el desarrollo que tienes tan completo no seas capaz de ver algo tan simple.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #6 (permalink)  
Antiguo 06/04/2013, 12:56
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: ¿Cuál es mi error en esta lógica de Java?

Gracias por responder, pero resulta que estas variables son necesarias para el ingreso de cada uno de los datos. ¿No es así?

Código Javascript:
Ver original
  1. private double             notaquiz                    = 0.0;
  2.    private double             notatrabajo                 = 0.0;
  3.    private double             notaparcial                 = 0.0;
  4.    private double             definitivaparciales         = 0.0;
  5.    private double             definitivatrabajos          = 0.0;
  6.    private double             definitivaquices            = 0.0;

Si efectivamente ese List ya está en la case Materia:

Código Javascript:
Ver original
  1. public  List<NotasEstudiante>    notasdelamateriaporestudiante = null;

Entonces, ¿Cómo hago para asignarle el código del estudiante al objeto NotasEstudiante?

Pues si miras con atención en el código de la clase Matricula:
Código Javascript:
Ver original
  1. public void notas_docente() throws IOException{
  2.        
  3.      System.out.println("Ingrese el nombre del docente");
  4.      String buscador1 = lector.readLine();
  5.  
  6.  
  7.      for ( Docente docente : docentes )
  8.      {
  9.        
  10.        
  11.              if ( docente.getNombredocente().equals(buscador1) )
  12.          {
  13.              System.out.println("Ingrese el nombre de la materia");
  14.              String buscador2 = lector.readLine();
  15.              
  16.                      for ( int i=0; i<materias.size(); i++ )// Añadir materia a la lista de materias del estudiante - PRUEBA 1
  17.                      {
  18.                              if ( materias.get(i).getNombredocente().equalsIgnoreCase(buscador1) && materias.get(i).getNombremateria().equalsIgnoreCase(buscador2))
  19.                              {      
  20.                                      
  21.                                      System.out.println("El tamaño de la lista estudiantes de la materia es:" +materias.get(i).estudiantesdelamateria.size());
  22.                                      System.out.println("Los estudiantes son:");
  23.                                      for ( int j=0; j<materias.get(i).estudiantesdelamateria.size(); j++)
  24.                                      {
  25.                                              
  26.                                              System.out.println(materias.get(i).estudiantesdelamateria.get(j).getNombre());
  27.                                      }
  28.                                      
  29.                                      System.out.println("Seleccione el estudiante al que quiere ingresar notas");
  30.                                      String buscador3 = lector.readLine();
  31.                                      
  32.                                      for ( int j=0; j<materias.get(i).estudiantesdelamateria.size(); j++)
  33.                                      {       
  34.                                         if ( materias.get(i).estudiantesdelamateria.get(j).getNombre().equalsIgnoreCase(buscador3))
  35.                                            
  36.                                         {
  37.                                              System.out.println("Estoy dentro 1");
  38.                                            for ( int k=0; k<materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.size(); k++ )
  39.                                            {
  40.                                                if ( materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).getNombremateria().equalsIgnoreCase(buscador2) )
  41.                                             {
  42.  
  43.                                                    // ¿CUAL DE ESTOS DOS DEBO USAR? //
  44.                                                    
  45.                                                 /////// ----------- 1 ---------------- //////
  46.                                                    
  47.                                                 System.out.println("Estoy dentro 2");
  48.                                                 materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notas_materia();
  49.                                                
  50.                                                 /////// ----------- 2 ---------------- //////
  51.                                                
  52.                                                 for ( int l=0; l<materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notasdelamateriaporestudiante.size(); l++)
  53.                                                 {
  54.                                                     if ( materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notasdelamateriaporestudiante.get(l).getCodigoestudiante().equals(materias.get(i).estudiantesdelamateria.get(j).getCodigoestudiante())  )
  55.                                                     {
  56.                                                         materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notasdelamateriaporestudiante.get(l).setCodigoestudiante(materias.get(i).estudiantesdelamateria.get(j).getCodigoestudiante());
  57.                                                     }
  58.                                                 }
  59.                                                
  60.                                                
  61.                                                
  62.                                             }  
  63.                                            }  
  64.                                         }    
  65.                                      }
  66.                              }
  67.                      }  
  68.      }  
  69.  }  
  70. }

Allí hago una pregunta de cómo asignar el código del estudiante en cuestión al objeto NotasEstudiante.

Especifico:

Código Javascript:
Ver original
  1. if ( materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).getNombremateria().equalsIgnoreCase(buscador2) )
  2.                                             {
  3.  
  4.                                                    // ¿CUAL DE ESTOS DOS DEBO USAR? //
  5.                                                    
  6.                                                 /////// ----------- 1 ---------------- //////
  7.                                                    
  8.                                                 System.out.println("Estoy dentro 2");
  9.                                                 materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notas_materia();
  10.                                                
  11.                                                 /////// ----------- 2 ---------------- //////
  12.                                                
  13.                                                 for ( int l=0; l<materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notasdelamateriaporestudiante.size(); l++)
  14.                                                 {
  15.                                                     if ( materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notasdelamateriaporestudiante.get(l).getCodigoestudiante().equals(materias.get(i).estudiantesdelamateria.get(j).getCodigoestudiante())  )
  16.                                                     {
  17.                                                         materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notasdelamateriaporestudiante.get(l).setCodigoestudiante(materias.get(i).estudiantesdelamateria.get(j).getCodigoestudiante());
  18.                                                     }
  19.                                                 }
  #7 (permalink)  
Antiguo 06/04/2013, 17:05
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: ¿Cuál es mi error en esta lógica de Java?

Cuando seleccionas el estudiante para ingresar sus notas puedes obtener su código ¿verdad?
Creas un objeto NotasEstudiante, le añades ese código y luego le vas añadiendo las notas.
Cuando está completo agregas las NotasEstudiante a la materia correspondiente.

Una vez tengas esto

¿Como saber si un estudiante tiene las notas de la materia X agregadas?
Obtienes el codigo del estudiante al que quieres comprobar las notas.
Entras en la materia que quieres comprobar.
Recorres el ArrayList de NotasEstudiante comprobando los códigos.
Si algún código coincide con el del estudiante deseado, ese estudiante ya tiene las notas asignadas.

(Una mejora con respecto a esto podría usar algun tipo de lista de pares clave, valor, como un hashmap, donde la clave sería el codigo del usuario y el valor el objeto NotasEstudiante, así la forma de buscar sería más directa, pero si no dominas lo otro no te voy a pedir que te compliques la vida pensando en nuevas clases).
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #8 (permalink)  
Antiguo 06/04/2013, 19:22
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: ¿Cuál es mi error en esta lógica de Java?

Gracias!!!

He hecho lo que me has pedido, y me gustaría saber dos cosas

1. ¿Me ha quedado bien?
2. ¿Dónde debo agregar las NotasEstudiante?, ¿En la Lista de Materias General ó en la Lista de materiasdelestudiante en particular?, Porque según mi código tengo guardada la materia en la lista de materiasdelestudiante y no en la lista General
3. Otro detalle que creo que es importante es que la idea es que cuando un docente va a ingresar notas, selecciona si quiere ingresar notas de Quices, o Parciales...etc, el detalle está en que le debe aparecer un mensaje de alerta si las notas de Quices, Parciales, etc ya han sido llenadas. Es por eso que recorro la lista de Quices, Parciales, etc a ver si ya está llena.

Código Javascript:
Ver original
  1. public void notas_docente() throws IOException{
  2.        
  3.      System.out.println("Ingrese el nombre del docente");
  4.      String buscador1 = lector.readLine();
  5.  
  6.  
  7.      for ( Docente docente : docentes )
  8.      {
  9.        
  10.        
  11.              if ( docente.getNombredocente().equals(buscador1) )
  12.          {
  13.              System.out.println("Ingrese el nombre de la materia");
  14.              String buscador2 = lector.readLine();
  15.              
  16.                      for ( int i=0; i<materias.size(); i++ )// Añadir materia a la lista de materias del estudiante - PRUEBA 1
  17.                      {
  18.                              if ( materias.get(i).getNombredocente().equalsIgnoreCase(buscador1) && materias.get(i).getNombremateria().equalsIgnoreCase(buscador2))
  19.                              {      
  20.                                      
  21.                                      System.out.println("El tamaño de la lista estudiantes de la materia es:" +materias.get(i).estudiantesdelamateria.size());
  22.                                      System.out.println("Los estudiantes son:");
  23.                                      for ( int j=0; j<materias.get(i).estudiantesdelamateria.size(); j++)
  24.                                      {
  25.                                              
  26.                                              System.out.println(materias.get(i).estudiantesdelamateria.get(j).getNombre());
  27.                                      }
  28.                                      
  29.                                      System.out.println("Seleccione el estudiante al que quiere ingresar notas");
  30.                                      String buscador3 = lector.readLine();
  31.                                      
  32.                                      for ( int j=0; j<materias.get(i).estudiantesdelamateria.size(); j++)
  33.                                      {       
  34.                                         if ( materias.get(i).estudiantesdelamateria.get(j).getNombre().equalsIgnoreCase(buscador3))
  35.                                            
  36.                                         {
  37.                                            
  38.                                             NotasEstudiante notasestudiante = new NotasEstudiante();
  39.                                             notasestudiante.crear_listas();
  40.                                             notasestudiante.setCodigoestudiante(materias.get(i).estudiantesdelamateria.get(j).getCodigoestudiante());
  41.                                            
  42.  
  43.                                            
  44.                                                 int opcion4 =0;
  45.                                            
  46.                                                 do{
  47.                                                
  48.                                                 System.out.println("1. Notas de Quices");
  49.                                                 System.out.println("2. Notas de Trabajos");
  50.                                                 System.out.println("3. Notas de Parciales");
  51.                                                 System.out.println("4. Salir");
  52.                                      
  53.                                                 System.out.print("Digite la opcion: ");
  54.                                                 opcion4 = Integer.parseInt(lector.readLine());
  55.                                                 System.out.println();
  56.                                      
  57.                                                 switch(opcion4){
  58.                                                
  59.                                                 case 1: notasestudiante.notas_quices();break;
  60.                                                 case 2: notasestudiante.notas_trabajos();break;
  61.                                                 case 3: notasestudiante.notas_parciales();break;
  62.                                                 case 4: opcion4 = 4;break;
  63.                                                 default: break;
  64.                                                 }
  65.                                                 }while(opcion4!=4);
  66.                                                
  67.                                                 opcion4 =0;
  68.                                                
  69.                                                 System.out.println("Estoy dentro 1");
  70.                                                 for ( int k=0; k<materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.size(); k++ )
  71.                                                 {
  72.                                                     if ( materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).getNombremateria().equalsIgnoreCase(buscador2) )
  73.                                                  {
  74.                                                         notasestudiante.setCreditos(materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).getCreditos());
  75.                                                         materias.get(i).estudiantesdelamateria.get(j).materiasdelestudiante.get(k).notasdelamateriaporestudiante.add(notasestudiante);     
  76.                                                  }
  77.                                                 }  
  78.                                             }  
  79.                                      }  
  80.                               }    
  81.                         }
  82.     }
  83.   }  
  84. }

En la linea 74 asigno los créditos de la materia y en la 75 guardo todo el objeto NotasEstudiante en la lista de notasdelamateriaporestudiante

Si te fijas, siempre ingreso es a la lista de materiasdelestudiante y no a la lista general. Nosé si eso afecte en algo.
Aquí el código completo:

Clase Matricula - Edicon 2: http://ideone.com/clF3AV
Clase NotasEstudiante - Edicion 2: http://ideone.com/hgxjhC

PD: GRACIAS POR LA PACIENCIA Y DEDICACIÓN

Última edición por ambigus; 06/04/2013 a las 19:27
  #9 (permalink)  
Antiguo 07/04/2013, 16:18
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: ¿Cuál es mi error en esta lógica de Java?

En realidad la clase Materia deberia ser de mayor rango que la de profesor o estudiante.

Puede haber varios profesores que impartan una misma materia.
Puede haber varios estudiantes que estén matriculados en una misma materia.

Es decir, tanto los docentes como los estudiantes no deberian tener en su interior objetos de tipo materia, en todo caso deberían tener los identificadores/códigos de la materia que imparten (si son profesores) o están matriculados (si son estudiantes).

La materia sin embargo si que podría contener las listas de objetos correspondientes profesores y estudiantes, así como la lista de notas de la materia para los estudiantes.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #10 (permalink)  
Antiguo 07/04/2013, 16:33
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: ¿Cuál es mi error en esta lógica de Java?

Genial!!!!!! Esto que me has dicho me voltea todo el código que tengo y es como si tuviera que empezar de cero.....Interesante Pero bueno, así es la vida, algunos tienen una conexión más fuerte con la Fuente y son mejores canales que otros....en mi humilde situación debo trabajar muy duro para lograr el nivel de un canal puro

Interesante....bueno...entonces continuaré trabajando haber si algún día paso esta materia

Gracias hombre!!!!
Tan pronto tenga el nuevo código te lo publico ;)
  #11 (permalink)  
Antiguo 18/04/2013, 19:23
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: ¿Cuál es mi error en esta lógica de Java?

Hola amigo.

He hecho lo que me has pedido. Y ahora resulta que tengo un error muy puntal.

Nosé si es falla de la estructuración, pero después de ingresar las notas se queda ahí....le doy enter y nada.

He agregado la Clase NotasEstudiante y la cuestión es que estoy intentando hacer que funcione. ¿Recuerdas el problema de las Notas?. Se supone que este nuevo algoritmo las corrige. Al guardas las notas en un Objeto NotasEstudiante y luego verificar si las notas estan registradas usando como guía el Cógido del estudiante en cuestión.

El problema actual es que cuando le pregunto ¿Encontró el código?...Él me dice: Hombre, no hay ningún código en la lista Notasdelosestudiantes. Y pues tiene sentido, porque se supone que es la primera vez que entra a ingresar las notas. ENtonces no tiene tamaño esa lista. Y pues se me ocurrió decirle: Bueno si la lista tiene tamaño 0, entonces haga esto: Ese "esto" es crear el objeto y llenarlo todo normal. Pero sucede que al simularlo y después de llenar las notas se queda...ahí....esperando a que le de Enter....y le doy Enter eternamente y no hace nada

Te paso el código de cada uno por Ideone.

Clase Matricula: http://ideone.com/j56M8o

Clase Institucion Test: http://ideone.com/GXveaB

Clase Materia: http://ideone.com/gdghWK

Clase Docente: http://ideone.com/hdOaOD

Clase Estudiante: http://ideone.com/KL5iRS

Clase NotasEstudiante: http://ideone.com/2qrvvv

Archivos Java en Dropbox: https://www.dropbox.com/s/co3i3uuvd2...titucion13.rar

Gracias por tu paciencia y comprensión.
  #12 (permalink)  
Antiguo 19/04/2013, 00:32
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: ¿Cuál es mi error en esta lógica de Java?

if ( materia.notasdelosestudiantes.size()==0) {
// Rellenar datos de las notas estudiante (1)
HAZLO FUERA Y ANTES DEL FOR
} else {
// BUCLE FOR AQUI
// Comprobar si el estudiante ya tiene notas
// Si las tiene mostrar mensaje de aviso
// Si no las tiene => Rellenar datos de las notas estudiante (2)
}

Como puedes ver (1) y (2) repetirían el mismo código
Igual te compensa crear un método específico que contenga todo ese código para reutilizarlo y no repetirlo, y llamar a ese método en (1) y (2).
Aunque con eso de arriba te debería funcionar.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: ejercicio, parcial
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:42.