Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20

Hybrid View

  1. #1
    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??

  2. #2
    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

  3. #3
    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).

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    22
    Leggendo quello che scrivi fila tutto, però non saprei come metterlo in pratica al livello di codice :/

  5. #5
    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!

  6. #6
    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. #7
    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);
    }
    }
    }

  8. #8
    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

  9. #9
    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.