Quiz Costruttori

di il
13 risposte

Quiz Costruttori

Ciao ragazzi , sto svolgendo un quiz di java, la domanda è la seguente:

Si consideri la seguente classe della quale sono stati omessi tutti i metodi/costruttori. Dire quale dei metodi/costruttori proposti contiene almeno un errore:

public class MiaClasse{ 
int n; 
int[] a;
 ...
  }

Risposte:

1)public boolean metB(MiaClasse m){
 return n==m.n;
  }
2)public MiaClasse(){
 n=0;
 a=new int[10];
 }
3)public int metA(int i){
 int r=-1; 
if(i>=0&&i<=a.length)
 r=a[i]; return r;
 }

Ho provato a fare un programma uguale utilizzando tutti questi 3 metodi/costruttori , ma anche in esecuzione , non mi danno errore…

13 Risposte

  • Re: Quiz Costruttori

    Quindi la risposta è…?

    Attenzione, perchè un errore c'è. :)

  • Re: Quiz Costruttori

    A questo punto non saprei , in esecuzione non ho nessun errore , neanche nel codice(almeno credo, non mi viene segnalato dall'editor).

  • Re: Quiz Costruttori

    Nessun editor ti segnalerà mai quell'errore: è un errore concettuale che ti si presenterebbe solamente a runtime.

    Ti dò un aiutino: l'errore è nel terzo metodo. A te scoprire dove si nasconde.

  • Re: Quiz Costruttori

    Non riesco a capiro , alla fine sembra scritto bene, scusami .

  • Re: Quiz Costruttori

    E allora non rimane che provare: scrivi una classe come quella, con il costruttore proposto al punto 2 e il metodo proposto al punto 3 (quello del punto 1 non serve, è corretto e l'abbiamo capito).

    A questo punto, data la classe MiaClasse come sopra, la proviamo:

    public class Test {
       public static void main(String[] args) {
          MiaClasse mc = new MiaClasse();
          for(int i=-10; i<20; i++) {
             System.out.print("Invoco il metodo con i=" + i + ": ");
             System.out.println( mc.metA(i) );
          }
       }
    }

    Cosa ottieni in output?

  • Re: Quiz Costruttori

    Se il numero è negativo , avrò -1 , se è positivo , 0 , ma visto che l'array comunque è vuoto alla fine non fa quello che deve fare ?

  • Re: Quiz Costruttori

    Veramente no: dovresti avere -1 se il valore passato è fuori dai limiti dell'array (sia sotto che sopra), mentre dovresti avere 0 se è dentro ai limiti dell'array.

    Questo in teoria… ma se provi ti accorgi che…

  • Re: Quiz Costruttori

    Dal 10 in poi mi dà errore in effetti .. Ma come mai?Alla fine se gli passo subito 11, ad esempio , mi da -1 come dovrebbe essere ,quindi  l'errore è che una volta entrato nell'if, se il valore viene settato a quello dell'array , non può più tornare a -1?

  • Re: Quiz Costruttori

    Non dà errore dal 10 in poi. Da errore proprio nel 10. Perchè? Leggi bene quella if.

  • Re: Quiz Costruttori

    Penso di aver capito. Avendo un'array di n elementi , l'indice va da 0 a n-1 , mentre abbiamo un =, i mi permette di prendere anche l'elemento n  che non esiste  nell'array, giusto?

  • Re: Quiz Costruttori

    Ti faccio poi un'ultima domanda e chiudo . Sulle collezioni.

    Da quello che ho capito , non posso definire ad esempio :

    Collection<String> c= new Collection<String>();

    List<String> c = new List<String>();

    perchè sono delle interface , mentre posso fare ad esempio:

    Collection<String>  d= new LinkedList<String>();

    o

    List<String> d = new ArrayList<String>();

    Giusto?

    Che differenza ci sono sostanzialmente tra una LinkedList e un'ArrayList , e tra una Collection(so che è il super-tipo) e una List?(so tipo che List aggiunge dei metodi).

  • Re: Quiz Costruttori

    06/06/2023 - biagio-23 ha scritto:


    Penso di aver capito. Avendo un'array di n elementi , l'indice va da 0 a n-1 , mentre abbiamo un =, i mi permette di prendere anche l'elemento n  che non esiste  nell'array, giusto?

    Esatto. Quello è l'errore concettuale.

  • Re: Quiz Costruttori

    06/06/2023 - biagio-23 ha scritto:


    Giusto?

    Sì.

    06/06/2023 - biagio-23 ha scritto:


    Che differenza ci sono sostanzialmente tra una LinkedList e un'ArrayList , e tra una Collection(so che è il super-tipo) e una List?(so tipo che List aggiunge dei metodi).

    ArrayList e LinkedList sono due implementazioni diverse di oggetti che rappresentano delle liste (implementano List). ArrayList sostanzialmente è implementata come array, mentre LinkedList come lista doppiamente linkata. Leggi la loro documentazione:

    Collection è un'interface da cui deriva List (e altre) e il suo scopo è modellare tutto ciò che rappresenta una “collezione” di elementi (liste, code, insiemi, mappe, ecc.). List è una sua specializzazione e rappresenta tutto ciò che è una lista (liste linkate, liste basate su array, vettori, ecc).

    Ovviamente ogni specializzazione aggiunge dei metodi che hanno senso per il tipo di specializzazione o che devono comportarsi in modo diverso a seconda della specializzazione. Esempio: il metodo add(int, E) di List consente l'aggiunta di un elemento ad una posizione specifica della lista. Non restituisce alcun valore perchè l'inserimento di un elemento è sempre possibile. Diverso il caso di Set: il suo metodo add(E) deve restituire un boolean che indica se l'elemento è stato effettivamente inserito (perchè non era già presente) o meno (perchè già presente nell'insieme).

    Anche List possiede un metodo add(E) che restituisce un boolean, ma se guardi la documentazione è scritto che restituisce sempre true (per il motivo visto prima: è sempre possibile inserire un elemento in una lista) e che è stato implementato in quel modo perchè così è definito nella sua super-interface Collection.

Devi accedere o registrarti per scrivere nel forum
13 risposte