Risolto Dubbi sul codice che ho scritto

Stato
Discussione chiusa ad ulteriori risposte.

RobotKiller

Utente Iron
24 Ottobre 2022
12
4
0
9
Cattura.PNG

ho dei dubbi su questa parte di esercizio.

Java:
public class MyIntegerList
{
    //Variabili Statiche
    //Campi
    MyIntegerListElement head;
    MyIntegerListElement tail;
    //Costruttori
    public MyIntegerList()
    {
        this.head=null;
    }
    //Metodi
    public void add(int value)
    {
        MyIntegerListElement temp = new MyIntegerListElement(value);
        MyIntegerListElement coda = null;
        
        if(this.head!=null)
        {
            for(coda=this.head; coda.getNext()!=null; coda=coda.getNext());
            coda.setNext(temp);
        }
        else
        {
            this.head=temp;
        }
        
    }
    public void addFirst(int value)
    {
        this.head = new MyIntegerListElement(value, this.head);
    }
    public int get(int pos)
    {
        MyIntegerListElement coda = null;
        int i;
        for(i=0, coda=this.head;i<pos && coda!=null; i++, coda=coda.getNext());
        if(coda!=null)
            return coda.getValue();
        return -1;
    }
//------------------------------------------------------------------------------------------------------------------------------
    public boolean contains(final int[] array, final int value)
    {
        for (final int i : array)
        {
            if (i == value)
            {
                return true;
            }
        }
        return false;
    }
    public void delete(int element)
    {
        if (head == tail)
        {
            head = null;
            tail = null;
        }
        else
        {
            head = head.next;
        }
    }
    public int size()
    {
        node n = head;
        node m = tail;
        if(n == null)
        {
            return 0;
        }
        int size = 1;
        While(n!=m);
        {
            size++;
            n=n.getNext();
        }
        return size;
    }
}
 
Ultima modifica:
Per implementare contains devi scorrere la lista e restituire true quando trovi l'elemento richiesto, altrimenti (se hai finito di scorrere la lista senza mai restituire true) restituisci false.
Java:
public boolean contains(int value) {                                             
    for (MyIntegerListElement elt = this.head; elt != null; elt = elt.getNext()) {
        if (elt.getValue() == value) return true;                                        
    }                                                                            
                                                                                 
    return false;                                                                
}

L'implementazione di size è ancora più semplice. Devi scorrere la lista esattamente come ti ho fatto vedere per contains, incrementando una variabile. Prova ad implementarlo da solo, non penso che avrai problemi.

Quello un po' più complicato è delete, perché devi trovare il predecessore dell'elemento da cancellare e cambiargli il successore. Non ho modo di testare, però dovrebbe essere una roba del genere:
Java:
public bool delete(int value) {                                                         
    MyIntegerListElement pred = null;                                                   
    MyIntegerListElement curr = null;                                                   
                                                                                        
    for (curr = this.head; curr != null; curr = elt.getNext()) {                        
        if (curr.getValue() == value) break;                                            
        pred = curr;                                                                    
    }                                                                                   
                                                                                        
    if (curr == null) return false;               // l'elemento da cancellare non esiste
    if (pred == null) this.head = curr.getNext(); // l'elemento da cancellare è la testa
    else pred.setNext(curr.getNext());            // l'elemento da cancellare è al centro
    return true;                                                                        
}
 
  • Mi piace
Reazioni: RobotKiller
scusa se te lo chiedo ma Elt, Curr e Pred per cosa stanno che faccio sempre un pò di fatica a capire i nomi che non do io hahah
Dare un nome sensato alle cose è uno dei "problemi difficili" della programmazione. Con elt intendo "element", ovvero un generico elemento della lista. Negli altri metodi tu scrivevi "coda", ma a me quel nome non piaceva perché per me la coda è un elemento ben preciso (l'ultimo). Con curr e pred intendo "current" e "predecessor", ovvero l'elemento che sto considerando in questo momento e il suo predecessore.
 
intendevi una cosa del genere?

Java:
    public boolean size(int value, int pos)
    {
        int i;
        for (i=0, element = this.head;i<pos && element!=null; i++, element = element.getNext())
        {
            if (element.getValue() == value)
                return true;
        }
        return false;
    }


o così:

Java:
    public int size(int value, int pos)
    {
        int i;
        for (i=0, element = this.head;i<pos && element!=null; i++, element = element.getNext())
        if(element!=null)
            return element.getValue();
        return -1;
    }
 
No, quel codice non va bene. Questa riga qui for (MyIntegerListElement elt = this.head; elt != null; elt = elt.getNext()) vuol dire "scorri tutti gli elementi della lista" ed elt è l'elemento che stai considerando nell'iterazione corrente. Se vuoi contare quanti elementi ci sono negli array, puoi fare una cosa del genere:
Java:
public int size() {                                                             
    int elements = 0;                                                           
    for (MyIntegerListElement elt = this.head; elt != null; elt = elt.getNext()) {
        elements++;                                                             
    }                                                                           
    return elements;                                                            
}
 
Stato
Discussione chiusa ad ulteriori risposte.