Problemi con List e LinkedList

di il
9 risposte

Problemi con List e LinkedList

Ciao ragazzi , sto svolgendo un'esercizio di un vecchio esame sulla programmazione ad oggetti , che mi richiede l'utilizzo di LinkedList e List.

E' un'argomento che non ho ben capito , in special modo non capisco come svolgere la consegna dell'esercizio.

Ora vi mostro il testo dell'esercizio , in particolare non capisco come andrebbe fatta la parte del costruttore:

Data una sequenza di numeri interi, chiamiamo intorno di dimensione k dell'elemento i-esimo della sequenza, l'insieme degli elementi nelle k posizioni precedenti e nelle k posizioni successive all'elemento iesimo (si noti che l'elemento i-esimo non fa parte dell'intorno). Se ci sono meno di k posizioni precedenti o meno di k posizioni successive l'intorno è costituito soltanto dagli elementi nelle posizioni disponibili. Il valore di un intorno è la somma degli elementi che lo costituiscono. Ogni oggetto della classe Sequenza rappresenta una sequenza di numeri interi. La classe ha il seguente scheletro:

class Sequenza {

 private int[] seq;

 /* Riceve come parametro una lista l contenente oggetti Integer e crea una sequenza contenente gli interi presenti nella lista l. I numeri devono apparire nella sequenza nello stesso ordine in cui compaiono nella lista. Si assuma che la lista non sia vuota né nulla. */

public Sequenza(List l){...}

Si scriva la classe Sequenza ed una classe ProvaSequenza che contiene il solo metodo main e che esegue le seguenti azioni: • Fa inserire all'utente una sequenza di numeri interi memorizzandoli in una LinkedList. • Crea un oggetto Sequenza corrispondente alla sequenza inserita e lo visualizza.

Questo è il testo della parte di esercizio che mi interessa(gli altri metodi voglio cercare di farli da solo) , non capisco come dovrei usare questa LinkedList , e mi mette in confusione anche il fatto che ho un'array di interi (int[] seq) come attributo di classe, non capisco come dovrei mettere insieme queste cose.

Grazie a tutti in anticipo , spero di essere stato chiaro.

9 Risposte

  • Re: Problemi con List e LinkedList

    Dato che List è un'interfaccia non la puoi usare direttamente. Il testo ti dice di usare LinkedList (che è una implementazione concreta di List), ma avrebbe potuto tranquillamente dirti di usare un ArrayList (altra implementazione di LinkedList), non avrebbe fatto alcuna differenza ai fini dell'esercizio, quindi non ti focalizzare su LinkedList: è una implementazione concreta di List, un oggetto qualsiasi che implementa List in cui memorizzare i numeri letti in input dall'utente. Ti serve una implementazione di List perchè la classe Sequenza vuole un List come parametro del suo costruttore.

    Il costruttore riceve come parametro un oggetto List e dovrà creare (istanziare) un array di interi in grado di contenere tutti gli elementi di quella lista. Punto. Non c'è molto altro da dire.

    Essendo LinkedList una implementazione di List a te basta sapere che è dotata di un metodo add() per poter aggiungere un elemento in coda alla lista e un metodo get(index) che restituisce l'elemento alla posizione index.

  • Re: Problemi con List e LinkedList

    17/05/2023 - SpiritoLibero ha scritto:


    Dato che List è un'interfaccia non la puoi usare direttamente. Il testo ti dice di usare LinkedList (che è una implementazione concreta di List), ma avrebbe potuto tranquillamente dirti di usare un ArrayList (altra implementazione di LinkedList), non avrebbe fatto alcuna differenza ai fini dell'esercizio, quindi non ti focalizzare su LinkedList: è una implementazione concreta di List, un oggetto qualsiasi che implementa List in cui memorizzare i numeri letti in input dall'utente. Ti serve una implementazione di List perchè la classe Sequenza vuole un List come parametro del suo costruttore.

    Il costruttore riceve come parametro un oggetto List e dovrà creare (istanziare) un array di interi in grado di contenere tutti gli elementi di quella lista. Punto. Non c'è molto altro da dire.

    Essendo LinkedList una implementazione di List a te basta sapere che è dotata di un metodo add() per poter aggiungere un elemento in coda alla lista e un metodo get(index) che restituisce l'elemento alla posizione index.

    Quindi alla fine devo usare la lista per creare l'array , e non il contrario , giusto ?

  • Re: Problemi con List e LinkedList

    17/05/2023 - SpiritoLibero ha scritto:


    Dato che List è un'interfaccia non la puoi usare direttamente. Il testo ti dice di usare LinkedList (che è una implementazione concreta di List), ma avrebbe potuto tranquillamente dirti di usare un ArrayList (altra implementazione di LinkedList), non avrebbe fatto alcuna differenza ai fini dell'esercizio, quindi non ti focalizzare su LinkedList: è una implementazione concreta di List, un oggetto qualsiasi che implementa List in cui memorizzare i numeri letti in input dall'utente. Ti serve una implementazione di List perchè la classe Sequenza vuole un List come parametro del suo costruttore.

    Il costruttore riceve come parametro un oggetto List e dovrà creare (istanziare) un array di interi in grado di contenere tutti gli elementi di quella lista. Punto. Non c'è molto altro da dire.

    Essendo LinkedList una implementazione di List a te basta sapere che è dotata di un metodo add() per poter aggiungere un elemento in coda alla lista e un metodo get(index) che restituisce l'elemento alla posizione index.

    package ProveEsame;
    import java.util.LinkedList;
    import java.util.List;
    public class Sequenza {
        private int[] seq;
        public Sequenza(List l){
        seq=new int[l.size()];
            for(int i=0;i<l.size();i++){
                seq[i]=l.get(i);
            }
        }
    }
    Questo è il codice che ho scritto fino adesso , solo che mi dà errore in  seq[i]=l.get(i); in quanto mi dice che non posso convertire un tipo Object in intero , come posso fare ? 
  • Re: Problemi con List e LinkedList

    Posta il codice all'interno dell'apposito strumento per il codice… e quando lo incolli in linea col testo, togli le formattazioni dei colori. Io così non leggo assolutamente nulla.

    Per quanto riguarda la conversione del tipo Object in intero, significa che stai usando delle liste non tipizzate (quel testo di esercizio dev'essere vecchissimo perchè non usa i generics). Se hai costruito correttamente una List con i generics, non hai quel problema:

    List<Integer>

    Se stai usando gli oggetti raw, ovvero List non tipizzato devi forzare un cast da Object a Integer e, se stai davvero usando Java < 5, devi anche effettuare l'unboxing a mano richiamando il metodo intValue().

    List l ... ;
    
    seq[i] = ((Integer) l.get(i)).intValue();
  • Re: Problemi con List e LinkedList

    17/05/2023 - SpiritoLibero ha scritto:


    Posta il codice all'interno dell'apposito strumento per il codice… e quando lo incolli in linea col testo, togli le formattazioni dei colori. Io così non leggo assolutamente nulla.

    Chiedo scusa , non sapevo di questa funzione , modificato!

  • Re: Problemi con List e LinkedList

    Ho integrato la mia risposta precedente.

  • Re: Problemi con List e LinkedList

    17/05/2023 - SpiritoLibero ha scritto:


    Posta il codice all'interno dell'apposito strumento per il codice… e quando lo incolli in linea col testo, togli le formattazioni dei colori. Io così non leggo assolutamente nulla.

    Per quanto riguarda la conversione del tipo Object in intero, significa che stai usando delle liste non tipizzate (quel testo di esercizio dev'essere vecchissimo perchè non usa i generics). Se hai costruito correttamente una List con i generics, non hai quel problema:

    List<Integer>

    Se stai usando gli oggetti raw, ovvero List non tipizzato devi forzare un cast da Object a Integer e, se stai davvero usando Java < 5, devi anche effettuare l'unboxing a mano richiamando il metodo intValue().

    List l ... ;
    
    seq[i] = ((Integer) l.get(i)).intValue();

    Ecco come ho costruito la lista nella classe prova:

    package ProveEsame;
    
    import fond.io.InputWindow;
    import java.util.LinkedList;
    public class ProvaSequenza {
        public static void main(String[] args){
       
        InputWindow in= new InputWindow();
        LinkedList<Integer> seq = new LinkedList<Integer>();
       
       int dim=in.readInt("Quanti elementi vuoi inserire nella lista ?");
    
    
       for(int i=0;i<dim;i++){
        seq.add(in.readInt("Inserisci elemento nella lista\n"));
       }
       Sequenza s= new Sequenza(seq);
    }
    }
    
    

    Però continua a darmi sempre errore in quella riga della classe Sequenza.

  • Re: Problemi con List e LinkedList

    Alla luce dell'introduzione dei generics, il costruttore di Sequenza dovrebbe essere:

    public Sequenza(List<Integer> l) {
       ...
    }

    ovvero, dovrebbe ricevere un List tipizzato e non un raw-type.

  • Re: Problemi con List e LinkedList

    17/05/2023 - SpiritoLibero ha scritto:


    Alla luce dell'introduzione dei generics, il costruttore di Sequenza dovrebbe essere:

    public Sequenza(List<Integer> l) {
       ...
    }

    ovvero, dovrebbe ricevere un List tipizzato e non un raw-type.

    Si , però devo seguire lo scheletro del costruttore che mi dà l'esercizio . Comunque utilizzando il secondo metodo che mi hai scritto , funziona !

    Ovvero:

    seq[i] = ((Integer) l.get(i)).intValue();

    Grazie mille!!!

Devi accedere o registrarti per scrivere nel forum
9 risposte