Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143

    Nodo e Lista concatenata

    Ciao a tutti,
    stavo facendo degli esercizi sulle liste e mi sono accorta di non aver capito bene la teoria e vorrei chiedervi aiuto.
    Io ho queste due classi: la classe Node (che mi rappresenta un singolo nodo) e la classe ListaConcatenata.

    Node:
    codice:
    class Node {
    	private int cargo;
    	private Node next;
    
    	/* Costruttore vuoto */
    	public Node () {
    		cargo = 0;
    		next = null;
    	}
    
    	/* Costruttore passando il valore intero */
    	public Node (int cargo) {
    		this.cargo = cargo;
    		next = null;
    	}
    
    	/* Costruttore passando sia il valore intero sia il nodo successivo */
    	public Node (int cargo, Node next) {
    		this.cargo = cargo;
    		this.next = next;
    	}
    
    	public int getCargo() {
    		return cargo;
    	}
    
    	public Node getNext() {
    		return next;
    	}
    
    	public void setCargo(int i) {
    		this.cargo = i;
    	}
    
    	public void setNext(Node j) {
    		this.next = j;
    	}
    
    	public String toString() {
    		return cargo + "";
    	}
    
    } // end Node
    e Lista:
    codice:
    class Lista {
    
    	private Node first;
    
    	/* Costruttore vuoto */
    	public Lista() {
    		first = null;
    	}
    
    	/* Costruttore passando un nodo */
    	public Lista(Node nodo) {
    		first.setNext(nodo);
    	}
    
    	/* Inserimento di un nodo in testa */
    	public void insert_front(Node nodo) {
    		first.setNext(nodo);
    	}
    
    	/* Inserimento di un nodo in coda */
    	public void insert_back(Node nodo) {
    		Node iterator = first;
    		if (first == null)
    			return;
    		while(iterator.getNext() != null) {
    			iterator = iterator.getNext();
    		}
    		iterator.setNext(nodo);
    	}
    
    	public String toString() {
    
    	}
    	
    
    } // end Lista
    Il secondo costruttore della classe Lista è sbagliato vero? Perchè? Ho provato a farlo in diversi modi ma mi sembra sempre sbagliato...
    Inoltre, finchè devo aggiungere un nodo alla lista passando come parametro un intero ci riesco, ma quando devo passargli un nodo (come sopra) non sono capace. Qualcuno può aiutarmi? Come faccio poi a stampare la lista?
    Bu..è tutto il pomeriggio che ci provo a fare questi metodi che sono sicuramente facilissimi...

    Grazie!

  2. #2
    codice:
    	/* Costruttore passando un nodo */
    	public Lista(Node nodo) {
    		first.setNext(nodo);
    	}
    Questo metodo costruttore credo vada modificato perché il dato membro first nella classe lista non è stato instanziato ma hai solo creato il reference, perciò se utilizzi il metodo di un oggetto non instanziato da errore.
    Comunque potresti specificare meglio gli errori che ti da, postandone qui qualcuno magari?

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    Grazie per la risposta, quindi come dovrei modificare quel costruttore?

    codice:
    public class UsaLista {
    	public static void main(String[] args) {
    
    		Lista lista = new Lista();
    
    		Node n1 = new Node(5);
    		Node n2 = new Node(3);
    		Node n3 = new Node(7);
    		Node n4 = new Node(2);
    
    		System.out.println(n1);
    
    		lista.insert_front(1);
    		lista.insert_front(2);
    		lista.insert_front(3);
    		lista.insert_front(4);
    
    		lista.printList();
    
    
    	}
    }
    Usando questo come main mi da questi errori:
    C:\...\UsaLista.java:13: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(1);
    ^
    required: Node
    found: int
    reason: actual argument int cannot be converted to Node by method invocation conversion
    C:\...\UsaLista.java:14: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(2);
    ^
    required: Node
    found: int
    reason: actual argument int cannot be converted to Node by method invocation conversion
    C:\...\UsaLista.java:15: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(3);
    ^
    required: Node
    found: int
    reason: actual argument int cannot be converted to Node by method invocation conversion
    C:\...\UsaLista.java:16: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(4);
    ^
    required: Node
    found: int
    reason: actual argument int cannot be converted to Node by method invocation conversion
    4 errors

    Procedura completata con codice di uscita 1

  4. #4
    E' ovvio che dia quegli errori perché il tuo metodo di inserimento nella lista richiede come parametro un oggetto di tipo Node non di tipo int quindi devi passargli un Node non un numero.
    Ad esempio:

    codice:
    public class UsaLista 
    {
    	public static void main(String[] args) 
           {
    
    		Lista lista = new Lista();
    
    		Node n1 = new Node(5);
    
    		System.out.println(n1);
                    
                    //Qui passi un nodo.
    		lista.insert_front(n1);
    
    		lista.printList();
    
    
    	}
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    ah si si hai ragione, inizialmente avevo fatto così poi ho fatto un pò di modifiche e mi sono dimenticata di rimettere a posto il main. Comunque anche facendo così mi dice

    C:\..\UsaLista.java:13: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(n1);
    ^
    required: Lista.Node
    found: Node
    reason: actual argument Node cannot be converted to Lista.Node by method invocation conversion
    C:\..\UsaLista.java:14: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(n2);
    ^
    required: Lista.Node
    found: Node
    reason: actual argument Node cannot be converted to Lista.Node by method invocation conversion
    C:\..\UsaLista.java:15: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(n3);
    ^
    required: Lista.Node
    found: Node
    reason: actual argument Node cannot be converted to Lista.Node by method invocation conversion
    C:\..\UsaLista.java:16: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(n4);
    ^
    required: Lista.Node
    found: Node
    reason: actual argument Node cannot be converted to Lista.Node by method invocation conversion
    4 errors

    Procedura completata con codice di uscita 1

    -.-

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Le strutture dati non vanno fatte così, un conto è il tipo dei dati e un conto è quello che ci fa internamente la struttura, come/dove li incapsula ecc...; se vuoi fare una lista di interi, i metodi della tua classe Lista dovrebbero avere solo parametri di tipo intero, non "nodi".
    L'utilizzatore della tua struttura non dovrebbe avere a che fare con i nodi, infatti io preferirei un approcio del genere:

    codice:
    class SinglyLinkedList {
    
    	private class Node {
        
    		int info;
    		Node next;
    
    		Node(int info, Node next) {
    			// costruttore...
    		}
    
    	}
    
    	Node head = null;
    
    	void add(int element) {
    		// codice per l'aggiunta
    	}
    
    	// costruttore ed altri metodi...
    
    }
    Insomma, dovresti implementare un'interfaccia del genere:

    codice:
    interface IntegerList {
    	
    	void add(int element);
    	void removeAll(int element);
    	// ecc...
    	
    }
    In questo modo ci si obbliga ad agire nel modo corretto, visto che non puoi mettere parametri di tipo Node essendo una classe interna privata. Inoltre non c'è bisogno di menarsela con getter/setter/toString ecc... nella classe nodo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    Anche io farei così peccato che mi è stato richiesto di aggiungere un nodo e non un intero...
    Comunque grazie

  8. #8
    codice:
    public class Lista 
    {
    	private Node first = null;
    	
    	public Lista(Node nodo) 
    	{
    		this.first = nodo;
    	}
    	
    	public void insert_front(Node nodo)
    	{
    		Node temp = this.first;
    		this.first = nodo;
    		nodo.setNext(temp);
    	}
    }
    Con una cosa del genere dovrebbe funzionare.

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    143
    Originariamente inviato da Itachi1991
    codice:
    public class Lista 
    {
    	private Node first = null;
    	
    	public Lista(Node nodo) 
    	{
    		this.first = nodo;
    	}
    	
    	public void insert_front(Node nodo)
    	{
    		Node temp = this.first;
    		this.first = nodo;
    		nodo.setNext(temp);
    	}
    }
    Con una cosa del genere dovrebbe funzionare.
    Non va lo stesso..

    C:\...\UsaLista.java:9: error: method push_front in class Lista cannot be applied to given types;
    lista.insert_front(n1);
    ^
    required: Lista.Node
    found: Node
    reason: actual argument Node cannot be converted to Lista.Node by method invocation conversion

  10. #10
    O_O
    Da me funziona, posta il main.

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.