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

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2016
    Messaggi
    7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Sì, ma il concetto "senza duplicati" è secondo il criterio fornito dal comparator, quindi sul prezzo. Se hai 3 prodotti con lo stesso prezzo, tiene solo il primo trovato e gli altri li ignora. È davvero quello che vuoi? (giusto per capire io)


    Ok, se è un requisito ... ovviamente, no prob!


    Scusa se ti segnalo queste cose ma è doveroso farlo:

    - le tue classi fanno "troppe" cose, si occupano anche della interazione (con input!) verso l'utente. Non vanno affatto bene.
    E il fatto poi che l'input lo fai nei setPrezzo/setSconto è decisamente brutto e poco pulito, soprattutto per quei try-catch in cui oltretutto invochi ricorsivamente il metodo (noooooo!).

    - in setPrezzo di Prodotto prima fai l'assegnamento poi il controllo per negativo. Magari è meglio il contrario! Altrimenti il vincolo non è poi così un vincolo ... sì lanci una eccezione ma lo stato dell'oggetto in quel momento è cambiato.

    - abituati e tenere le variabili di istanza tipicamente 'private'.

    E ora veniamo al punto importante: getPrezzo in ProdottoScontato è un "override" di quello in Prodotto. Se hai una variabile di tipo Prodotto ma che fa riferimento ad un oggetto ProdottoScontato e invochi prod.getPrezzo(), il getPrezzo invocato è quello dell'oggetto realmente istanziato, ovvero del ProdottoScontato.
    In sostanza, il comparatore, comparando i prezzi, concettualmente compara prezzi normali con prezzi "scontati".

    E tra l'altro, perché fai:

    sconto * 100 / super.getPrezzo()

    ?? Questo non applica uno sconto ... non ha molto senso ....
    1) Non risponderò alle tue segnalazioni non perchè non siano giuste ma perchè fuorvianti rispetto alla domanda principale a cui non siamo ancora riusciti a dare una risposta. Non voglio giustificare le mie scelte, se è per questo ci sono troppe eccezioni, l'input doveva essere da un'altra parte ecc ecc, ma per ora fa nulla.
    2) si hai ragione non avevo notato che eliminasse quelli con lo stesso prezzo, teoricamente doveva eilimanre quelli con lo stesso codice, non avevo pensato che lui eilima quei elementi per i quali il comparator ritorna 0. Vabbe risolviamo facilmente sostituendo al TreeSet un ArrayList e inserendo solo gli elementi che non risultano uguali attraverso il metodo equals, e poi la ordino il .sort() 3) Anche qui hai ragione, ho sbaglaito la formula, errore di distrazione..
    4) Si, so come funziona l'overide, ed era proprio questo lo scopo, confrontare il prezzo finale di ogni prodotto, quindi il prezzo scontato per gli oggetti ProdottoScontato ed il prezzo non scontato per gli oggetti Prodotto.
    5)Tutto ciò però non mi spiega perchè mi ordina i ProdottoScontato in ordine crescente ed i Prodotto in ordine decrescente, sempre per prezzo..

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Rispondo in ordine sparso.

    Quote Originariamente inviata da Dario95 Visualizza il messaggio
    5)Tutto ciò però non mi spiega perchè mi ordina i ProdottoScontato in ordine crescente ed i Prodotto in ordine decrescente, sempre per prezzo..
    Certo che lo spiega!! È proprio quella formula (sbagliata) che causa questo comportamento particolare ma improprio.

    sconto * 100 / super.getPrezzo()

    Essendo il prezzo originale al denominatore di una divisione, a parità di sconto, più il prezzo è grande, più il risultato è piccolo. Ed ecco il senso inverso rispetto al concetto espresso (giustamente) dal Comparatore.


    Quote Originariamente inviata da Dario95 Visualizza il messaggio
    2) si hai ragione non avevo notato che eliminasse quelli con lo stesso prezzo, teoricamente doveva eilimanre quelli con lo stesso codice, non avevo pensato che lui eilima quei elementi per i quali il comparator ritorna 0.
    Sì, con TreeSet il senso del "senza duplicati" è sempre relativo al criterio di comparazione con Comparable oppure Comparator.

    Quote Originariamente inviata da Dario95 Visualizza il messaggio
    1) Non risponderò alle tue segnalazioni non perchè non siano giuste ma perchè fuorvianti rispetto alla domanda principale a cui non siamo ancora riusciti a dare una risposta. Non voglio giustificare le mie scelte, se è per questo ci sono troppe eccezioni, l'input doveva essere da un'altra parte ecc ecc, ma per ora fa nulla.
    Per carità ... non ho nulla da obiettare se non accetti/gradisci dei consigli che potrebbero aiutarti a migliorare molto il tuo codice.
    Presumo che alla fine riceverai un "voto" per l'esercizio. Il voto è tuo ... non mio. Se l'esercizio fosse per me, il codice sarebbe ragionevolmente impeccabile e il voto piuttosto alto.

    Posso solo augurarti di ricevere il voto da qualcuno o non troppo competente o di manica molto larga ..
    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
    Feb 2016
    Messaggi
    7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Rispondo in ordine sparso.


    Certo che lo spiega!! È proprio quella formula (sbagliata) che causa questo comportamento particolare ma improprio.

    sconto * 100 / super.getPrezzo()

    Essendo il prezzo originale al denominatore di una divisione, a parità di sconto, più il prezzo è grande, più il risultato è piccolo. Ed ecco il senso inverso rispetto al concetto espresso (giustamente) dal Comparatore.



    Sì, con TreeSet il senso del "senza duplicati" è sempre relativo al criterio di comparazione con Comparable oppure Comparator.


    Per carità ... non ho nulla da obiettare se non accetti/gradisci dei consigli che potrebbero aiutarti a migliorare molto il tuo codice.
    Presumo che alla fine riceverai un "voto" per l'esercizio. Il voto è tuo ... non mio. Se l'esercizio fosse per me, il codice sarebbe ragionevolmente impeccabile e il voto piuttosto alto.

    Posso solo augurarti di ricevere il voto da qualcuno o non troppo competente o di manica molto larga ..
    1)Ho solo detto che i tuoi commenti se pur giusti erano off-topic, tutto qui.
    2)Non ho mai detto di essere un genio della programmazione ma non capisco perchè devi offendere, sopratutto visto che neanche tu sai rispondere alla domanda e risolvere il problema.
    3)Dopo 16 anni di programmazione sarebbe decisamente strano se tu non scrivessi codice migliore del mio..
    3)Voglio proprio vedere se i tuoi codici sono impeccabili...
    4)Se ti va di darmi una mano fai pure, se devi continuare invece solo a fare il 'professore' astieniti...
    5)
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Essendo il prezzo originale al denominatore di una divisione, a parità di sconto, più il prezzo è grande, più il risultato è piccolo. Ed ecco il senso inverso rispetto al concetto espresso (giustamente) dal Comparatore.
    Scusami non ne capisco il senso, cioè si la formula è sbagliata e quello che dici tu è giusto, ma quello che conta è il risultato, cioè anche se a parità di sconto il risultato era più piccolo rispetto a quanto grande fosse il prezzo, alla fien cmq quella formula restituiva un double che il comparatore doveva confrontare con gli altri, quindi perchè me li ordinava in senso opposto? Attenzione non sto dicendo che quello che dici è sbagliato, sto chiedendo di spiegarmelo.. e cmq ho corretto il calcolo della percentuale e come vedi continua a non confrontare i Prodotto con i ProdottoScontato.
    codice:
    3  Prod 10.0
    1  Prod 4.0
    14  Prod 3.0
    27  Prod 2.0
    18  ProdScontato 9.0
    21  ProdScontato 7.0
    15  ProdScontato 7.0
    22  ProdScontato 5.0
    30  ProdScontato 4.0
    12  ProdScontato 2.0
    Ultima modifica di Dario95; 09-02-2016 a 01:26

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    @Dario95: calma e sangue fresco. Non mi pare di aver letto offese da parte di andbin, al contrario: preziosi consigli per chi sta iniziando a programmare in Java (ps: se guardi nella sua firma puoi capire il suo livello di esperienza e, magari, potresti davvero imparare molto da lui: molti prima di te ci sono passati e ti garantisco che è così). Il problema mi pare te lo abbia spiegato già due volte... se non riesci a mettere in pratica i suggerimenti che ti sta dando, non puoi "incolpare" lui di non riuscire a risolvere. La problematica è chiara, quella formula è sbagliata; non ti dà il prezzo scontato (se ho un prezzo di 100 e lo sconto di 20, dovrei ottenere 80, ma con la tua formula non ottieni 80: 20 * 100 / 100 = 20), quindi non puoi ottenere un ordinamento corretto partendo da dati sbagliati. Sistema la formula e vedrai che le cose cominceranno ad andare nel verso giusto.

    Detto questo, possiamo proseguire con la discussione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Tag per questa discussione

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.