Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60

    [JAVA] consiglio lista con riferimenti

    Salve
    ho questa classe Utente:
    public class Utente {

    int altezza;
    int eta;

    public Utente(){
    altezza = 0;
    eta = 0;
    }

    public Utente(int altezza, int eta){
    this.altezza = altezza;
    this.eta = eta;
    }

    public void setEta(int n){
    eta = n;
    }

    public void setAltezza(int n){
    altezza = n;
    }

    }

    e ho creato una lista con riferimenti composta da elementi Node, dove ad ogni campo info del node ho un oggetto Utente. come faccio a cercare un oggetto della lista e una volta trovato a modificarlo?
    (cercarlo per esempio per altezza, o in generale per uno degli attributi dell'oggetto)

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] consiglio lista con riferimenti

    Originariamente inviato da bandofa
    ho questa classe Utente:
    Ok ma questa è solo una classe di "bean" che modella l'utente. Tra l'altro sarebbe meglio se: a) tieni i campi come "private" e b) metti dei metodi getter.

    Originariamente inviato da bandofa
    e ho creato una lista con riferimenti composta da elementi Node, dove ad ogni campo info del node ho un oggetto Utente. come faccio a cercare un oggetto della lista e una volta trovato a modificarlo?
    (cercarlo per esempio per altezza, o in generale per uno degli attributi dell'oggetto)
    Dipende se la lista è "specializzata" per gestire oggetti Utente. Se non lo è, bisogna vedere come "esponi" le cose. La lista espone al di fuori i Node? Hai intenzione di fornire anche un "iteratore"?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: [JAVA] consiglio lista con riferimenti

    Originariamente inviato da bandofa
    Salve
    ho questa classe Utente:
    public class Utente {

    int altezza;
    int eta;

    public Utente(){
    altezza = 0;
    eta = 0;
    }

    public Utente(int altezza, int eta){
    this.altezza = altezza;
    this.eta = eta;
    }

    public void setEta(int n){
    eta = n;
    }

    public void setAltezza(int n){
    altezza = n;
    }

    }

    e ho creato una lista con riferimenti composta da elementi Node, dove ad ogni campo info del node ho un oggetto Utente. come faccio a cercare un oggetto della lista e una volta trovato a modificarlo?
    (cercarlo per esempio per altezza, o in generale per uno degli attributi dell'oggetto)

    Grazie.
    Ipotizziamo che la classe Node sia così definita (all'interno della tua struttura dati Lista):
    codice:
    class Node<T> implements Posizione{
    
      public T info;
      public Node link;
    
      public Node(T o)
      {
         info = o;
         link = null;
      }
    }
    A questo punto, immagino che nella tua struttura dati Lista ci sia un metodo set così definito (lo ipotizzo):

    codice:
    ...
    
    public void set(Posizione p, T e){
        ...scansione...
        nodoTrovato.info = e;
    }
    ...
    ti basta cercare il nodo che corrisponde con p e modificare il suo campo info con e.

    Poi se posti il codice intero è più facile aiutarti.

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    ok, grazie e mille!

    public class ListNode implements List{

    class Node{
    Object info;
    Node next;

    public Node(Object info){
    this(info, null);
    }

    public Node(Object o, Node n){
    info = o;
    next = n;
    }
    }


    public void revInsert(List lista){
    if(!lista.isEmpty()){
    revInsert(lista.tail());
    insert(lista.head());
    }
    }

    private Node node;


    public ListNode(){
    node = null;
    }

    public ListNode(Object o){
    node = new Node(o);
    }

    public ListNode(Object o, List lista){
    if (lista != null){
    revInsert(lista);
    insert(o);
    }
    }

    public boolean isEmpty(){
    return (node == null);
    }

    public void insert(Object o){
    node = new Node(o, node);
    }

    public void remove(Object o){
    if(!isEmpty()){
    Node pred = node;
    Node tmp = node.next;

    if(node.info.equals(o))
    node = node.next;
    else
    while(tmp != null)
    if(tmp.info.equals(o)){
    pred.next = tmp.next;
    return;
    }
    else{
    pred = pred.next;
    tmp = tmp.next;
    }
    }
    }

    public boolean contains(Object o){
    Node tmp = node;
    while(tmp != null){
    if(tmp.info.equals(o))
    return true;
    else
    tmp = tmp.next;
    }
    return false;
    }

    public String toString(){
    String tmp = "";
    for(Node i = node; i != null; i = i.next)
    tmp = tmp + " " + i.info.toString();
    return tmp;
    }
    }

    /////////////////////////////////////////////////////////////////////

    public interface List {

    public boolean isEmpty();

    public Object head();

    public List tail();

    public Object last();

    public void insert (Object o);

    public void remove(Object o);

    public int length();

    public boolean contains();

    }

    Grazie ancora!

  5. #5
    Originariamente inviato da bandofa
    ok, grazie e mille!
    codice:
    public class ListNode implements List{
    	
    	class Node{
    		Object info;
    		Node next;
    		
    		public Node(Object info){
    			this(info, null);
    		}
    		
    		public Node(Object o, Node n){
    			info = o;
    			next = n;
    		}
    	}
    
    	
    	public void revInsert(List lista){
    		if(!lista.isEmpty()){
    			revInsert(lista.tail());
    			insert(lista.head());
    		}
    	}
    	
    	private Node node;
    	
    
    	public ListNode(){
    		node = null;
    	}
    	
    	public ListNode(Object o){
    		node = new Node(o);
    	}
    	
    	public ListNode(Object o, List lista){
    		if (lista != null){
    			revInsert(lista);
    			insert(o);
    		}
    	}
    	
    	public boolean isEmpty(){
    		return (node == null);
    	}
    	
    	public void insert(Object o){
    		node = new Node(o, node);
    	}
    	
    	public void remove(Object o){
    		if(!isEmpty()){
    			Node pred = node;
    			Node tmp = node.next;
    			
    			if(node.info.equals(o))
    				node = node.next;
    			else
    				while(tmp != null)
    					if(tmp.info.equals(o)){
    						pred.next = tmp.next;
    						return;
    					}
    					else{
    						pred = pred.next;
    						tmp = tmp.next;
    					}
    		}
    		}
    	
    	public boolean contains(Object o){
    		Node tmp = node;
    		while(tmp != null){
    			if(tmp.info.equals(o))
    				return true;
    			else
    				tmp = tmp.next;
    		}
    		return false;
    	}
    	
    	public String toString(){
    		String tmp = "";
    		for(Node i = node; i != null; i = i.next)
    			tmp = tmp + " " + i.info.toString();
    			return tmp;
    	}
    }
    
    /////////////////////////////////////////////////////////////////////
    
    public interface List {
    	
    	public boolean isEmpty();
    	
    	public Object head();
    	
    	public List tail();
    	
    	public Object last();
    	
    	public void insert (Object o);
    	
    	public void remove(Object o);
    	
    	public int length();
    	
    	public boolean contains();
    	
    }
    Grazie ancora!
    Nell'interfaccia non vedo un metodo set, quindi dovresti aggiungerlo nella classe ListNode che la implementa.

    Potresti organizzarlo in questo modo:
    codice:
      public void set(Object old, Object current){
             if(node == null)
               throw new NullPointerException("Lista vuota!");
             if(!contains(old))
               throw new NullPointerException(old.toString() + " non esiste!");
    	 
             Node temp = node;
             ...scansione, una volta trovato sostiuisci
      }
    Questo metodo però vuole che gli oggetti passati implementino il metodo equals() ereditato direttamente dalla classe Object, e da quello che ho visto il tuo oggetto Utente non ridefinisce il metodo.
    Alternativamente potresti organizzarlo come già ti ho suggerito, esplicitando la posizione dell'oggetto da sostituire.

    Per il resto nel codice della classe ListNode ci sono cose che non quadrano.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    60
    Ok grazie.
    Ma cose che non quadrano tipo?

  7. #7
    Originariamente inviato da bandofa
    Ok grazie.
    Ma cose che non quadrano tipo?
    Il corpo del metodo insert() e la segnatura del metodo contains è diversa nella classe ListNode rispetto all'interfaccia List; queste sono le due cose che ho notato subito, il resto non l'ho letto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.