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

Problema con arrays e iteradores

Estas en el tema de Problema con arrays e iteradores en el foro de Java en Foros del Web. Que tal buenas noches! Soy nuevo en esto de la programación y tengo un problema con los arreglos e iterados como dice el titulo xD. ...
  #1 (permalink)  
Antiguo 29/06/2012, 23:33
 
Fecha de Ingreso: junio-2012
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
Problema con arrays e iteradores

Que tal buenas noches! Soy nuevo en esto de la programación y tengo un problema con los arreglos e iterados como dice el titulo xD.

Estoy comparando dos arreglos de tipo<Object>, los cuales estan previamente calculados, es decir, que ya están llenos, y cuando el campo nombre se iguale, necesito agegarle una cadena de texto, pero me marca el error "java.util.NoSuchElementException".

El código es el siguiente:

Clase serviceline:

Código:
package ismnuevo;
import java.util.*;
/**
 *
 * @author victorrf
 */

public class Serviceline {
    private String sl= new String();
    private ArrayList<String> empleados= new ArrayList<String>();
    private ArrayList<String> clientes= new ArrayList<String>();
    private ArrayList<Integer> wo=new ArrayList<Integer>();
    private ArrayList<Float> horas_empleado= new ArrayList<Float>();
    private ArrayList<Float> horas_cliente= new ArrayList<Float>();
    private ArrayList<Float> horas_empclaim= new ArrayList<Float>();
    private ArrayList<Float> horas_cliclaim= new ArrayList<Float>();
    
    public Serviceline(){}
    
    public Serviceline(String a)
    {
        this.setsl(a);
    }
    
    public void setsl(String a)
    {
        this.sl=a;
    }
    
    public void setempISM(String a, Float b, int i)
    {
        this.empleados.add(a);
        this.horas_empleado.add(b); 
        this.wo.add(i);
        this.horas_empclaim.add(Float.parseFloat("0"));
    }
    public void setemp(String a, Float b)
    {
        this.empleados.add(a);
        this.horas_empleado.add(b);
        this.horas_empclaim.add(Float.parseFloat("0"));
    }
    
    public void setcli(String a, Float b)
    {
        this.clientes.add(a);
        this.horas_cliente.add(b);
        this.horas_cliclaim.add(Float.parseFloat("0"));
    }
    
    public String getsl()
    {
        return this.sl;
    }
    
    public ArrayList<String> getemp()
    {
        return this.empleados;
    }
    
    public ArrayList<String> getcli()
    {
        return this.clientes;
    }
    
    public ArrayList<Float> getHorasEmpleado(){
        return this.horas_empleado;
    }
    
    public ArrayList<Float> getHorasCliente(){
        return this.horas_cliente;
    }
    public ArrayList<Float> getHorasEmpleadoclaim(){
        return this.horas_empclaim;
    }
    
    public ArrayList<Float> getHorasClienteclaim(){
        return this.horas_cliclaim;
    }
    public ArrayList<Integer> getWo(){
        return this.wo;
    }
}
Clase Empleado:

Código:
package ismnuevo;

import java.util.ArrayList;

/**
 *
 * @author victorrf
 */
public class Empleado {
    
    String nombre;
    ArrayList<String> unbillable= new ArrayList<String>();
    ArrayList<Float> hor= new ArrayList<Float>();
    
    public Empleado(String a, String b, Float c){
        this.setNombre(a);
        this.setUnbillable(b);
        this.setHor(c);      
    }
    
   public void setNombre(String a){
       this.nombre=a;
   }
   
   public void setUnbillable(String a){
       this.unbillable.add(a);
   }
   
   public void setHor(Float a){
       this.hor.add(a);
   }
   
   public String getNombre(){
       return this.nombre;
   }
   
   public ArrayList<String> getUnbillable(){
       return this.unbillable;
   }
   public ArrayList<Float> getHor(){
       return this.hor;
   }
}
Main(No lo puse todo solo la parte que no sirve ):

Código:
public static ArrayList<Serviceline> servicelines= ISM.getServicelines();//ya esta calculado
public static ArrayList<Empleado> emp = new ArrayList<Empleado>();//ya fue calculado previamente

public static void main(String[] args) {

for(Serviceline i:servicelines){
                   Iterator it= i.getemp().iterator();
                   while(it.hasNext()){
                       for(Empleado y:emp){
                       if(it.next().toString().contains(y.getNombre())) {//ERROOR AQUI xD
                        String a =it.next().toString().concat("agregar");
                        i.getemp().set(i.getemp().indexOf(y.getNombre()),a);
                        break;
                        } 
                    }
                   }
        }
for(Serviceline i:servicelines)
     {
         System.out.println(i.getsl());
         System.out.println(i.getemp());
         System.out.println(i.getcli());
         System.out.println(i.getHorasEmpleado());
         System.out.println(i.getHorasCliente());
         System.out.println(i.getHorasEmpleadoclaim());
         System.out.println(i.getHorasClienteclaim());
         
         
     }   
}

Espero puedan ayudarme!! gracias!!!! No encuentro como corregir el error...
  #2 (permalink)  
Antiguo 30/06/2012, 09:48
 
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
  #3 (permalink)  
Antiguo 01/07/2012, 19:08
 
Fecha de Ingreso: junio-2012
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problema con arrays e iteradores

Muchas gracias por la ayuda Alex! Ahora me pondré a estudiar los temas que me dices y a optimizar el código, me falta mucho por aprender xD.

Saludos.

Etiquetas: arrays, clase, iteradores, programa, string
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 13:56.