Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20
  1. #11
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Quando il testo mi chiedeva di creare un MultiInsieme vuoto, pensavo che mi dicesse di creare un ArrayList MultiInsieme senza elementi al suo interno.
    Intende che quando fai new MultiInsieme() (nota, senza passare nulla in argomento al costruttore!) nel costruttore vai ad inizializzare lo "stato" dell'oggetto MultiInsieme costruendo un ArrayList "vuoto", senza elementi.

    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Avevo capito che questo ArrayList rappresentasse il MultiInsieme e che dovessi inserire i MultiElementi al suo interno. Inoltre non ho capito se le variabili sono le stesse per entrambe le classi e se le dovrei collegare...
    Le due classi SONO in relazione, nel senso che 1 oggetto MultiInsieme PUO' contenere (nel ArrayList) N oggetti MultiElemento.

    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Leggendo quello che scrivi fila tutto, però non saprei come metterlo in pratica al livello di codice :/
    Allora, riassumiamo:

    Classe MultiElemento:
    - variabile di istanza valore (double E final e "privato")
    - variabile di istanza ripetizioni (int e "privato")
    - costruttore che riceve valore e ripetizioni e li assegna alle variabili di istanza. Ricorda la questione del se < 1)
    - metodi getValore() / getRipetizioni() / setRipetizioni(int ripetizioni) che sono banali e ovvi (su cosa fanno)
    - metodo toString() che descrive lo stato dell'oggetto (vedi il testo)

    Classe MultiInsieme:
    - variabile di istanza set (ArrayList<MultiElemento>)
    - costruttore senza argomenti che crea un ArrayList "vuoto", senza elementi
    - metodi getRipetizioni(double valore) / addElemento(double valore, int ripetizioni) come ho già ampiamente descritto.


    All'interno di MultiInsieme ti serviranno solamente 3 metodi di ArrayList. Il size() ti serve per il ciclo, il get(int indice) ti serve per ottenere l'oggetto MultiElemento i-esimo e add(MultiElemento) ti serve per inserire un oggetto MultiElemento (che devi costruire tu nel addElemento) dentro il ArrayList.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #12
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    package provadue;
    public class MultiElemento {

    private final double valore;
    private int ripetizioni;

    public double getValore (){
    return valore;
    }

    public int getRipetizioni(){
    return ripetizioni;
    }

    public void setRipetizioni (int ripetizioni){
    this.ripetizioni=ripetizioni;
    if(ripetizioni<1){
    ripetizioni=1;
    }
    }

    public MultiElemento (double valore){
    this.valore=valore;
    ripetizioni=1;

    }

    public MultiElemento (double valore, int ripetizioni){
    this.ripetizioni=ripetizioni;
    this.valore=valore;
    if(ripetizioni<1){
    ripetizioni=1;
    }
    }

    public String toString(){
    return "elemento " +valore+ "occorrenze " +ripetizioni;
    }
    }

    ----------------


    import java.util.ArrayList;


    public class MultiInsieme {
    MultiElemento x;
    ArrayList<MultiElemento>set;

    public MultiInsieme (){
    new ArrayList<MultiInsieme>();
    }

    public int getRipetizioni (double valore){

    for(MultiElemento i:set){
    if(i==x);
    }
    return x.getRipetizioni();
    }

    public void addElemento (double valore,int ripetizioni){
    for (MultiElemento i:set){
    if (i==x){
    x.setRipetizioni(x.getRipetizioni() + 1);
    }
    set.add(x);
    }
    }
    }


    Mi sto avvicinando ad una versione corretta??

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Mi sto avvicinando ad una versione corretta??
    Ancora un pelino lontano .....

    La classe MultiElemento non è ancora corretta al 100%. Campi ok, metodi getter ok, costruttore MultiElemento(double valore) ok.
    Ma l'altro costruttore e setRipetizioni sono errati perché this.ripetizioni fa riferimento al campo mentre solo ripetizioni fa riferimento al parametro. Peccato che nel if vai a testare e assegnare SOLO al parametro.
    Comunque questa logica si può fare con 1 sola riga usando l'operatore condizionale ? :

    Il toString() è ok, manca solo uno spazio prima di occorrenze.
    Nota che per convenzione, i costruttori tipicamente si mettono prima di tutti i metodi, dopo le variabili di istanza.

    Classe MultiInsieme:
    - ti ripeto che NON serve avere un campo MultiElemento x;
    - getRipetizioni e addElemento sono sbagliatissimi. Non per il for-each (che è ok) ma per il if (i==x) che NON è appropriato in questo contesto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #14
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Non capisco per quale motivo non abbia bisogno di un oggetto "x" di tipo MultiElemento per svolgere l'esercizio, dato che "valore" è una variabile legata ad esso proprio come ripetizione! Pochi giorni fa avevo fatto un'esercizio analogo, dove simulavamo Amazon.
    In poche parole dovevamo creare un Ordine che conteneva delle righeOrdine che a loro volta avevano variabili come quantità, valore e prezzo e ogni volta che richiamavamo queste variabili lo facevamo con la solita forma "x.valore" o x.GetValore se quella variabile aveva delle limitazioni" Qui non capisco perché non dovrei farlo? comunque ti ringrazio, mi stai dando veramente una mano preziosa!

  5. #15
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Quello che mi crea problemi nei ragionamenti è questo:

    Io mi immagino un'oggetto MultiElemento con al suo interno le variabili quantità e valore. Poi penso che per accedere ad esse e quindi svolgere l'esercizio per la seconda classe, prima dovrei accedere all'oggetto che le contiene! Dato che l'oggetto non lo possiedo, me lo devo creare (x).

  6. #16
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Quando mi dici che il if(i==x) è sbagliato, non capisco il motivo :/. Non sto confrontando un'ipotetico oggetto i di tipo MultiElemento con un altro x? (Se sono uguali e che quindi sono oggetti identici, richiamo il metodo SetRipetizioni (che mi modifica la variabile in questione) e aggiungo ad essa una quantità pari ad 1, visto che x è uguale ad i). So che è sbagliato, perché ovviamente mi fido del tuo giudizio, ma vorrei capire il motivo...

  7. #17
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Non capisco per quale motivo non abbia bisogno di un oggetto "x" di tipo MultiElemento per svolgere l'esercizio, dato che "valore" è una variabile legata ad esso proprio come ripetizione!
    Ti ripeto che NON ti serve tenere un campo MultiElemento x. Se sfrutti il "for-each" hai già

    for (MultiElemento elemento : set)

    Questa variabile MultiElemento elemento È sufficiente.

    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Quello che mi crea problemi nei ragionamenti è questo:
    Io mi immagino un'oggetto MultiElemento con al suo interno le variabili quantità e valore.
    Sì, ciascun oggetto MultiElemento ha i SUOI campi valore e ripetizioni distinti da quelli di tutti gli altri oggetti MultiElemento.

    Quote Originariamente inviata da Klibion Visualizza il messaggio
    Poi penso che per accedere ad esse e quindi svolgere l'esercizio per la seconda classe, prima dovrei accedere all'oggetto che le contiene!
    L'oggetto MultiElemento (quello i-esimo nel ArrayList) ce l'hai.

    for (MultiElemento elemento : set)

    Su questo DEVI usare i metodi getValore() ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #18
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    ho provato così, ma ho un problema con il metodo GetRipetizioni, non riesco a ritornare un valore int...


    import java.util.ArrayList;


    public class MultiInsieme {


    private ArrayList<MultiElemento>set;



    public MultiInsieme (){
    new ArrayList<MultiInsieme>();
    }

    public int getRipetizioni (double valore){

    for(MultiElemento elemento:set){
    if(valore!=elemento.getValore()){
    return 0;
    } else {
    return elemento.getRipetizioni();
    }
    }
    return
    }

    public void addElemento (double valore,int ripetizioni){
    for (MultiElemento elemento:set){
    if (valore==elemento.getValore()){
    elemento.setRipetizioni(ripetizioni+1);
    }
    set.add(elemento);
    }
    }
    }

  9. #19
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Klibion Visualizza il messaggio
    ho provato così, ma ho un problema con il metodo GetRipetizioni, non riesco a ritornare un valore int...
    Ora il problema è una questione di "concetto". Quando è che puoi restituire 0 per indicare che NON hai trovato il valore? Pensa: puoi farlo DENTRO il for oppure solo DOPO una volta terminato il for?


    addElemento è ancora sbagliato, per almeno 3 punti:
    - Quando trovi quel valore, se l'oggetto MultiElemento contiene 5 ripetizioni e il ripetizioni passato in argomento vale 6, tu dovresti in quello STESSO oggetto MultiElemento mettere il valore di 11 ripetizioni (5+6). È questo che stai facendo? No.
    - Se trovi quel valore, a parte aggiornare le ripetizioni nel MultiElemento, NON devi fare altro. Non devi continuare con i cicli, non devi aggiungere nulla. In sostanza dovresti far ritornare SUBITO il metodo.
    - Se NON trovi quel valore (e qui ripeto come all'inizio: puoi farlo DENTRO il for oppure solo DOPO terminato il for?), dovresti inserire un NUOVO oggetto MultiElemento.


    Ribadisco quanto avevo già detto in precedenza: bisogna RAGIONARE, è questo che serve nella programmazione
    Ultima modifica di andbin; 23-01-2017 a 16:41
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #20
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Nota sul testo iniziale

    Attenzione ad una cosa: il testo iniziale non è chiarissimo. Dice:

    se nel multinsieme c'è già un elemento con lo stesso valore, viene solo aggiornato il suo campo ripetizioni

    Ma non dice COME deve essere aggiornato: sostituendo le ripetizioni? O addizionando le ripetizioni? Io l'ho inteso nel secondo modo, ovvero come addizione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.