Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/06/2012, 09:48
alexg88
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Problema con arrays e iteradores

Tienes un problema de concepto con los iteradores.

Cada vez que realizas la llamada a next, el apuntador del iterador avanza una posición. Por eso, antes de cada llamada a next, hay que realizar una llamada a hasNext para ver si tiene elementos. El problema es que tu estás realizando la iteración mal, llamada a next por cada empleado del ArrayList emp.

Código Java:
Ver original
  1. public static ArrayList<Serviceline> servicelines= ISM.getServicelines();//ya esta calculado
  2. public static ArrayList<Empleado> emp = new ArrayList<Empleado>();//ya fue calculado previamente
  3.  
  4. public static void main(String[] args) {
  5.  
  6. for(Serviceline i:servicelines){
  7.                    //Usa el iterador con genéricos, te evitarás tener que realizar la conversión
  8.                    Iterator<String> it= i.getemp().iterator();
  9.                    while(it.hasNext()){
  10.                        String valor = it.next();
  11.                        for(Empleado y:emp){
  12.                        if(valor.equals(y.getNombre())) {
  13.                         String a = valor.concat("agregar");
  14.                         i.getemp().set(i.getemp().indexOf(y.getNombre()),a);
  15.                         break;
  16.                         }
  17.                     }
  18.                    }
  19.         }
  20. for(Serviceline i:servicelines)
  21.      {
  22.          System.out.println(i.getsl());
  23.          System.out.println(i.getemp());
  24.          System.out.println(i.getcli());
  25.          System.out.println(i.getHorasEmpleado());
  26.          System.out.println(i.getHorasCliente());
  27.          System.out.println(i.getHorasEmpleadoclaim());
  28.          System.out.println(i.getHorasClienteclaim());
  29.          
  30.          
  31.      }  
  32. }

Esto mismo puedes hacer solo con el bucle foreach (como usas en los otros)

Código Java:
Ver original
  1. for(Serviceline i:servicelines){
  2.                    for(String valor : i.getemp())                    
  3.                        for(Empleado y:emp){
  4.                        if(valor.equals(y.getNombre())) {
  5.                         String a = valor.concat("agregar");
  6.                         i.getemp().set(i.getemp().indexOf(y.getNombre()),a);
  7.                         break;
  8.                         }
  9.                     }
  10.                    }
  11.         }
  12. for(Serviceline i:servicelines)
  13.      {
  14.          System.out.println(i.getsl());
  15.          System.out.println(i.getemp());
  16.          System.out.println(i.getcli());
  17.          System.out.println(i.getHorasEmpleado());
  18.          System.out.println(i.getHorasCliente());
  19.          System.out.println(i.getHorasEmpleadoclaim());
  20.          System.out.println(i.getHorasClienteclaim());
  21.          
  22.          
  23.      }  
  24. }

Por supuesto, este código podría mejorarse mucho usando algunos de los métodos que provee la clase ArrayList y mejorando el uso de algunas variables, pero sólo he querido mostrarte como funcionaría.

Saludos