Help Java

di il
35 risposte

Help Java

Ciao a tutti, avrei bisogno di un aiuto. Mi hanno dato questa consegna da svolgere:
"Creare una lista di 1000 oggetti (Quadrato) ognuno dei quali ha lato = numero random(tra 1 e 20).
Eliminare i duplicati dei 1000 quadrati.
Stampa il lato di quei 20 quadrati.] =

Siccome sto studiando java e adesso sono al java Collection, mi hanno dato questo esercizio. Per creare una lista da 1000 oggetti come posso fare?
e inoltre a questi 1000 oggetti devo passare il paramentro "int lato = (int) math.random()*20);" essendo un quadrato l'oggetto della lista.
Grazie mille per l'aiuto.

35 Risposte

  • Re: Help Java

    AleX3mE ha scritto:


    Per creare una lista da 1000 oggetti come posso fare?
    Per lista intesa come collezione Java, dovrai istanziare un ArrayList e se hai già studiato i generics, dovresti parametrizzarlo: ArrayList<Quadrato>
    Esiste anche LinkedList (una lista linkata) ma non posso sapere cosa ti è stato chiesto/imposto di usare.

    AleX3mE ha scritto:


    e inoltre a questi 1000 oggetti devo passare il paramentro "int lato = (int) math.random()*20);" essendo un quadrato l'oggetto della lista.
    Devi fare una classe Quadrato, con un campo (variabile di istanza) per il lato, poi un costruttore che riceve il lato e lo assegna al campo. Più altro che può servire: metodi getter/setter (setter se deve essere mutabile), toString() ecc...
    Da qualche altra parte istanzierai gli oggetti Quadrato passando appunto al costruttore il lato "casuale" e ciascun oggetto Quadrato lo aggiungerai nel ArrayList.
  • Re: Help Java

    Conta l'esercizio è perchè sto studiando Java collection. per il costruttore:
    public class Quadrato
    {
    private int lato;

    public Quadrato(int lato)
    {
    this.lato = lato;
    }

    public void setLato(int lato)
    {
    this.lato = lato;
    }
    }

    e la classe quadrato:
    public class LatoRandom
    {
    public static void main(String[] args)
    {
    Quadrato myQuadrato = new Quadrato((int) (Math.random()*20));

    }
    }

    giusto?

    non capisco la lista, cioè io devo creare una lista che ha 1000 quadrati ed ogni quadrato deve avere il lato che corrisponde ad un numero tra 1 e 20.
    Per creare una lista che stampa 1000 quadrati con lato tra 1 e 20, come faccio?
    devo utilizzare il ciclo for?
  • Re: Help Java

    AleX3mE ha scritto:


    public class Quadrato 
    {
    	private int lato;
    	
    	public Quadrato(int lato)
    	{
    		this.lato = lato;
    	}
    	
    	public void setLato(int lato)
    	{
    		this.lato = lato;
    	}
    }
    Corretto. Metti anche il metodo "getter" per il lato. E magari un toString() per avere una descrizione dell'oggetto.

    AleX3mE ha scritto:


    e la classe quadrato:
    public class LatoRandom
    {
    public static void main(String[] args)
    {
    Quadrato myQuadrato = new Quadrato((int) (Math.random()*20));

    }
    }

    giusto?

    non capisco la lista, cioè io devo creare una lista che ha 1000 quadrati ed ogni quadrato deve avere il lato che corrisponde ad un numero tra 1 e 20.
    Per creare una lista che stampa 1000 quadrati con lato tra 1 e 20, come faccio?
    devo utilizzare il ciclo for?
    Quasi ...
    Devi istanziare prima un ArrayList (possibilmente parametrizzato sfruttando i generics, se li conosci). Quindi fai un for e all'interno istanzi un Quadrato con lato casuale e lo inserisci nella lista.

    Occhio che (int) (Math.random()*20) crea valori da 0 a 19 ... NON da 1 a 20 come hai detto all'inizio.
  • Re: Help Java

    Ho provato in questo modo e mi stampa 1000 oggetti.
    public class provaLista
    {
    public static void main(String[] args)
    {
    Quadrato[] q;

    q = new Quadrato[1000];

    for(int x = 0; x < q.length; x++)
    {
    System.out.println(x);
    }
    }
    }

    ora però come integro il tutto? ahaha
  • Re: Help Java

    AleX3mE ha scritto:


    public class provaLista
    {
    public static void main(String[] args)
    {
    Quadrato[] q;

    q = new Quadrato[1000];

    for(int x = 0; x < q.length; x++)
    {
    System.out.println(x);
    }
    }
    }
    Intanto hai usato un array ... non una lista (=collezione). Quindi cosa ti è stato chiesto davvero di usare? array o lista?

    Come seconda cosa, hai sì istanziato un array di 1000 elementi ma i 1000 oggetti Quadrato NON sono istanziati automaticamente insieme all'array. Li devi istanziare tu.
  • Re: Help Java

    Io devo fare una lista, quindi il semplice array non va bene da quanto ho capito, e mi serve l'ArrayList. ma con l'arrayList devo scrivere 1000 volte ad esempio:
    quadrato.add();?

    e poi come faccio ad implementare il metodo per far si che abbia come valore da 1 a 20?
  • Re: Help Java

    AleX3mE ha scritto:


    Io devo fare una lista, quindi il semplice array non va bene da quanto ho capito, e mi serve l'ArrayList. ma con l'arrayList devo scrivere 1000 volte ad esempio:
    quadrato.add();?
    Non 1000 .... 1 volta sola nel ciclo!

    AleX3mE ha scritto:


    e poi come faccio ad implementare il metodo per far si che abbia come valore da 1 a 20?
    Somma 1. Il concetto da sapere è che Math.random() fornisce un valore casuale tra 0 (compreso) e 1 (ESCLUSO!). Vuol dire che non sarà mai 1 ma al max. es. 0,999999.......
    Quindi, se devi ampliare il range, moltiplichi. Se devi spostare il range, sommi o sottrai. Semplice matematica ...

    E' chiaro che se moltiplichi Math.random() per 20, non ottieni 1..20 ma 0..19, perché il valore max è es. 19.999.... che troncato a int fa appunto 19, non 20.
  • Re: Help Java

    andbin ha scritto:


    AleX3mE ha scritto:


    Io devo fare una lista, quindi il semplice array non va bene da quanto ho capito, e mi serve l'ArrayList. ma con l'arrayList devo scrivere 1000 volte ad esempio:
    quadrato.add();?
    Non 1000 .... 1 volta sola nel ciclo!

    AleX3mE ha scritto:


    e poi come faccio ad implementare il metodo per far si che abbia come valore da 1 a 20?
    Somma 1. Il concetto da sapere è che Math.random() fornisce un valore casuale tra 0 (compreso) e 1 (ESCLUSO!). Vuol dire che non sarà mai 1 ma al max. es. 0,999999.......
    Quindi, se devi ampliare il range, moltiplichi. Se devi spostare il range, sommi o sottrai. Semplice matematica ...

    E' chiaro che se moltiplichi Math.random() per 20, non ottieni 1..20 ma 0..19, perché il valore max è es. 19.999.... che troncato a int fa appunto 19, non 20.

    Si la cosa del math random mi basta incrementare a 21 ed ottengo fino a 20 praticamente . quindi :
    import java.util.ArrayList;

    public class EsempioArrayList
    {
    public static void main(String[] args)
    {
    ArrayList quadrato = new ArrayList();

    for(int x = 0 ;x < quadrato.size(); x++);

    System.out.println(quadrato);
    }
    }

    però mi stampa un: [ ].
  • Re: Help Java

    AleX3mE ha scritto:


    però mi stampa un: [ ].
    Non va comunque bene. Non puoi usare quadrato.size() nella condizione del for. Questo size() è la dimensione "logica" (numero effettivo di elementi) del ArrayList. E all'inizio è 0 poiché il ArrayList è vuoto.

    Quindi, fai il classico ciclo con una variabile che parte da 0 e prosegue con condizione < 1000, poi DENTRO il for:
    1) Determina un lato casuale
    2) Crea un oggetto Quadrato con il lato casuale
    3) Aggiungi l'oggetto Quadrato nel ArrayList con il metodo add

    Puoi fare queste tre cose in tre righe separate o componendo tutto insieme.

    Terminato il ciclo il tuo ArrayList avrà 1000 oggetti Quadrato.
  • Re: Help Java

    Se ho capito bene:
    import java.util.ArrayList;

    public class EsempioArrayList
    {
    public static void main(String[] args)
    {
    ArrayList quadrato = new ArrayList();
    quadrato.add();

    for(int x = 0 ;x < 1000; x++)
    {
    int lato = (int) Math.random()*21;
    Quadrato myQuadrato = new Quadrato(lato);
    }

    }
    }

    ma non capisco che mettere dentro l'add devo creare un metodo tramite un interfaccia?
  • Re: Help Java

    La add la devi fare dentro il ciclo, passando ovviamente l'oggetto Quadrato.

    Comunque l'ArrayList non chiamarlo quadrato. Es. listaQuadrati o simile.
  • Re: Help Java

    Occhio:

    (int) Math.random()*21

    Fa da 0 a 20 .... Non 1..20 come chiesto!
  • Re: Help Java

    andbin ha scritto:


    La add la devi fare dentro il ciclo, passando ovviamente l'oggetto Quadrato.

    Comunque l'ArrayList non chiamarlo quadrato. Es. listaQuadrati o simile.
    ok capito, poi per stampare il tutto ho provato con:

    System.out.println(ListaQuadrati);

    ma stampa: [Quadrato@106d69c, Quadrato@52e922, Quadrato@25154f, etc.
  • Re: Help Java

    AleX3mE ha scritto:


    ma stampa: [Quadrato@106d69c, Quadrato@52e922, Quadrato@25154f, etc.
    Sugli oggetti contenuti viene invocato toString(). La tua classe Quadrato non ridefinisce toString() (rimane il toString() "ereditato" da Object che sa solo fornire quella forma tipo Quadrato@25154f). L'avevo già detto prima: ridefinisci toString() per fornire una descrizione significativa e utile dell'oggetto (es. Quadrato[lato=xxxx] )
Devi accedere o registrarti per scrivere nel forum
35 risposte