Newsgroup: it.comp.java
Titolo: lista

Cercando di implementare una lista in java ho pensato a qualcosa del 
genere: 
class lista {
	private int el;
	private lista resto;
 
	lista(int a) {
	el=a;
	resto=null;
	}
	void aggiungi(int a) 
	{
		if (resto==null) resto = new lista(a);
		else resto.aggiungi(a);
	}
	void stampa() 
	{
		System.out.print(el);
		if (resto != null) 
		{	
			System.out.print(" -> ");
			resto.stampa();
		}
		else System.out.println("");
	}
	void togli(int a) 
	{
		if (el==a) {
			System.out.println("questo sarebbe da togliere"); 
			//this = resto; perche' non funziona?
			}
		if (resto != null) resto.togli(a);
	}
 
}
Non so se e' il metodo migliore, ma sembra funzionare tutto, a parte
il metodo togli: la riga commentata mi da il seguente errore:
lista.java:28: cannot assign a value to final variable this
solo che this e resto sono entrambi oggetti della lista class quindi
cosa c'e' che non va? come si puo' realizzare altrimenti una funzione 
che preso come parametro un intero elimina tutte le occorrenze di 
quell'intero dalla lista?
Eugenio
eug...@openbeer.it
 

Eugenio wrote:

Guarda che Java dovrebbe avere gia' una classe che fa queste cose, prova a 
guardare nelle API (scaricabili in 
java.sun.com
) occhio che sono 100 MB, ma 
cmq sono anche online...


java.util.List;
ciao, gianluca


grazie ma io cercavo di farlo giusto per esercizio.
e' possibile guardare il sorgente di questa libreria java?

 ha scritto nel messaggio
news:rYSC9.46761$Yw.21...@news2.tin.it...

Dovrebbero esserci i sorgenti nel file src.zip ... cerca su 
java.sun.com
 ...
a essere onesti io non li ho mai guardati...
ciao, Gianluca

 genere:
prova cosi', non ti garantisco nulla (ci ho fatto solo 2 3 test) ^_^
ma ci puoi lavorare sopra ^_^
class Cella {	
  public int el;
  public Cella resto;
 
  Cella(int a) {
    el = a;
    resto = null;
  }	
}
public class Lista {		
  Cella head = null;
 
  Lista(int a) {
    head = new Cella(a);
  }
  void aggiungi(int a){
    Cella pos = head;
    while (pos.resto != null) 
      pos = pos.resto;
    pos.resto = new Cella(a);
  }
 
  void stampa(){
    Cella pos = head;
 
    while (pos != null) { 
      System.out.print(pos.el + " ");		
      pos = pos.resto;
    }
  }
 
  void togli(int a) {
    if (head != null) {
      if (head.el == a)
        head = head.resto;
      else {
        Cella pos = head;
        while (pos.resto != null) {
          if (pos.resto.el == a) 
            pos.resto = pos.resto.resto;
          else pos = pos.resto;
	}
      }
    }
  }
  public static void main(String[] args) {
    Lista l = new Lista(10);
 
    System.out.print("Lista(10) [");		
    l.stampa();
    System.out.println("]");
    System.out.print("aggiungo 5 8 3  [");
    l.aggiungi(5); l.aggiungi(8); l.aggiungi(3); l.stampa();
    System.out.println("]");
    System.out.print("tolgo 4 [");
    l.togli(4); l.stampa();
    System.out.println("]");
    System.out.print("tolgo 3 [");
    l.togli(3); l.stampa();
    System.out.println("]");
    System.out.print("tolgo 8 [");
    l.togli(8); l.stampa();
    System.out.println("]");
    System.out.print("tolgo 10 [");
    l.togli(10); l.stampa();
    System.out.println("]");
    System.out.print("tolgo 5 [");
    l.togli(5); l.stampa();
    System.out.println("]");
    System.out.print("tolgo 7 [");
    l.togli(7);	l.stampa();
    System.out.println("]");
  }	
}
prova: $ java  Lista
Lista(10) [10 ]
aggiungo 5 8 3  [10 5 8 3 ]
tolgo 4 [10 5 8 3 ]
tolgo 3 [10 5 8 ]
tolgo 8 [10 5 ]
tolgo 10 [5 ]
tolgo 5 []
tolgo 7 []

     pos.resto = new Cella(a);
ho fatto una cazzata, si comporta come una coda ^_^
gli devi passare una posizione in cui scrivere...