Esercizio Lista

di il
5 risposte

Esercizio Lista

Salve a tutti , dovrei fare un esercizio sulle liste.
L'esercizio è il seguente :
Si definisca la classe Lista che rappresenta una lista di interi concatenata tramite riferimenti.
Nella classe Lista si definisca:
• il costruttore (che dato un parametro n costruisce una lista di n valori casuali)
• il metodo verifica che, in modo efficiente, verifica se ogni elemento della lista è
maggiore dei precedenti (la proprietà si considera sempre vera per il primo elemento
della lista).
Si realizzi infine una applicazione che:
• costruisce una lista di 4 elementi;
• stampa a video il risultato della chiamata del metodo verifica.
Tralasciando il passo 1 (banale da fare) , sono passato al secondo , cercando di fare un metodo RICORSIVO.

Ho pensato di farlo e scriverlo cosi.
Intanto , dato che è un metodo ricorsivo , si parte con il passo base cioè if (t==null) , poi si passa al resto.


Ho provato a scriverlo cosi , ma non va, sapreste dirmi il perchè?
  private boolean verifica (Elemento t){
        boolean verificazione=false;
        if (t==null)
            return verificazione;
        
        else {
            if (t.next.info>t.info){
                verificazione=true;
                verifica(testa.next);
            }
            
            
            
       }
        return verificazione;
    }
    public boolean verifica(){
        return verifica(testa);
    }
Inoltre ho fatto una classe elemento in cui ho dichiarato un int chiamato info e l'elemento next che punta al successivo.


Cosa non va bene secondo voi di questo metodo?

5 Risposte

  • Re: Esercizio Lista

    Non serve affatto un metodo ricorsivo. Se ciascun elemento è maggiore del precedente (e quindi dei precedenti), allora l'inteta lista è ordinata. E questo è testabile con una banale iterazione lineare.
  • Re: Esercizio Lista

    andbin ha scritto:


    Non serve affatto un metodo ricorsivo. Se ciascun elemento è maggiore del precedente (e quindi dei precedenti), allora l'inteta lista è ordinata. E questo è testabile con una banale iterazione lineare.
    Quindi facendolo iterativo il metodo diventa
    Public boolean verifica (){
    While(testa!=null)
    {
    If (testa.info.next >testa.info)
    Testa=testa.next
    
    Else
    Return false
    
    }
    }
    Semplicemente cosi?
  • Re: Esercizio Lista

    paloppa ha scritto:


    Semplicemente cosi?
    Nì, innanzitutto stai confrontando un next con un info (cosa sono?). E comunque devi considerare tutti i casi.
    Mostra come è fatta la lista e l'elemento.
  • Re: Esercizio Lista

    andbin ha scritto:


    paloppa ha scritto:


    Semplicemente cosi?
    Nì, innanzitutto stai confrontando un next con un info (cosa sono?). E comunque devi considerare tutti i casi.
    Mostra come è fatta la lista e l'elemento.
    Classe Elemento
    public class Elemento {
        
        int info;
        Elemento next;
        
        public Elemento(int info, Elemento next){
            this.info=info;
            this.next=next;
        }
    }

    Main
    public class Lista16Gennaio2013 {
    
        
        
        public static void main(String[] args) {
           
            Lista a =new Lista(1);
            a.stampa();
            
            System.out.println(a.verifica());
        }
        
    }
  • Re: Esercizio Lista

    E infatti una condizione

    testa.info.next >testa.info

    non avrebbe alcun senso. info è un int, non puoi farci .next !

    Non è affatto difficile, prova a ragionarci. Verifica anche i casi particolari (0 e 1 elementi nella lista). Inoltre io prenderei innanzitutto il primo elemento a parte (se c'è) e solo a quel punto farei il ciclo per i successivi elementi.
Devi accedere o registrarti per scrivere nel forum
5 risposte