Java - Ayuda con listas enlazadas de objetos

 
Vista:
sin imagen de perfil

Ayuda con listas enlazadas de objetos

Publicado por Gerardo (1 intervención) el 27/10/2016 03:35:36
buenas.. que tal... por favor necesito una mano con esta tarea... en principio es hacer una lista enlazada simple de objetos, la cual ya he hecho... el problema radica a la hora de insertar objetos en ella, inserto 4 elementos, y la lista me aparece con 4 elementos, genial, pero los 4 elementos son idénticos al ultimo elemento que ingrese, (extraídos de una matriz en este caso) no se que pasa de los 3 primeros elementos que inserto... eso lo veo al momento de imprimir, pasando como parámetro la posición del nodo... aqui los códigos...

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
 * Agrega un nuevo nodo al final de la lista.
 * @param valor a agregar.
 */
public void agregar(Vendedor valor){
    // Define un nuevo nodo.
    Nodo nuevo = new Nodo();
    // Agrega al valor al nodo.
    nuevo.setVendedor(valor);
    // Consulta si la lista esta vacia.
    if (esVacia() == true) {
        // Inicializa la lista agregando como inicio al nuevo nodo.
        inicio = nuevo;
    // Caso contrario recorre la lista hasta llegar al ultimo nodo
    //y agrega el nuevo.
    } else{
        // Crea ua copia de la lista.
        Nodo aux = inicio;
        // Recorre la lista hasta llegar al ultimo nodo.
        while(aux.getSiguiente() != null){
            aux = aux.getSiguiente();
        }
        // Agrega el nuevo nodo al final de la lista.
        aux.setSiguiente(nuevo);
    }
    // Incrementa el contador de tamaño de la lista
    tamanio++;
}
 
 
 
/**
 * Obtiene el valor de un nodo en una determinada posición.
 * @param posicion del nodo que se desea obtener su valor.
 * @return un numero entero entre [0,n-1] n = numero de nodos de la lista.
 * @throws Exception
 */
public Vendedor getValor(int posicion) throws Exception{
    Vendedor hola = new Vendedor();
    // Verifica si la posición ingresada se encuentre en el rango
    // >= 0 y < que el numero de elementos del la lista.
    if(posicion >=0 && posicion < tamanio){
        // Consulta si la posicion es el inicio de la lista.
        if (posicion == 0) {
            // Retorna el valor del inicio de la lista.
            hola = inicio.getVendedor();
            return inicio.getVendedor();
        }else{
            // Crea una copia de la lista.
            Nodo aux = inicio;
            // Recorre la lista hasta la posición ingresada.
            for (int i = 0; i < posicion; i++) {
                aux = aux.getSiguiente();
            }
            // Retorna el valor del nodo.
            return aux.getVendedor();
        }
    // Crea una excepción de Posicion inexistente en la lista.
    } else {
        throw new Exception("Posicion inexistente en la lista.");
    }
}
 
 
 
 
public static void main(String[] args) throws IOException, Exception {
    int cantidad;
    Vendedor aux = new Vendedor();
    Lista listaEnlazada = new Lista();
 
    System.out.println("Ingrese cantidad de vendedores");
    cantidad = teclado.nextInt();
    String mat [][] = new String [cantidad][CANTIDAD_DATOS];
    mat = Archivo.cargaMatriz(cantidad);
    System.out.println("\nEsto es lo leido desde el archivo facilitado:");
    Archivo.imprimirMatriz(mat);
    for (int i = 0; i < cantidad; i++) {
        aux.setNombre(mat[i][0]);
        aux.setApellido(mat[i][1]);
        aux.setSueldoBase(Integer.parseInt(mat[i][2]));
        aux.setPorcComision(Float.parseFloat(mat[i][3]));
        listaEnlazada.agregar(aux);
    }
    System.out.println("Lista creada satisfactoriamente..");
    System.out.println("la lista tiene: " + listaEnlazada.getTamanio() + " elementos");
    System.out.println("Imprimiendo desde la lista enlazada...");
    for (int i = 0; i < cantidad; i++) {
        aux = listaEnlazada.getValor(i);
        System.out.println("Nombre: " + aux.getNombre());
 
    }

y me imprime el mismo vendedor 4 veces... si llamo al método getTamaño me dice que la lista tiene 4 elementos... pero al imprimir, todos son el mismo... como podría solucionar eso..??
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

Ayuda con listas enlazadas de objetos

Publicado por ctmy (47 intervenciones) el 29/10/2016 08:17:13
Para saber si la lista esta vacias solo hace if(inicio == null)

Seria mejor que revises y rehacer el metodo para imprimir. Es muy largo y se que puede ser mas corto. Por ejemplo, este metodo imprime todos los elementos en la lista basado en el contador/cantidad de elementos. No hay necesidad de usar el indice i porque la lista esta enlazada.

Este metodo no revisa si la lista esta vacia. Tambien se podria impirmir la lista entera de la misma manera que agregas un elemento a la lista. while no es null -> imprimir valor. Espero que te haya dado algunas ideas de solucionar tu problema.
1
2
3
4
5
6
7
public void printLink(){
  Node iterator = head;
  for(int i = 0; i < counter; i++){
   System.out.println(iterator.getData());
   iterator = iterator.nextNode;
  }
 }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar