Visualizzazione dei risultati da 1 a 10 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
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Dario95 Visualizza il messaggio
    ma non capisco perchè devi offendere
    Scusa ma di quale offesa parli? Ti auguro (e ribadisco, in maniera buona e sincera) di ottenere un (buon!) voto da qualcuno che non sia così attento e "pignolo" come invece lo sono io.
    Se ti avessi augurato il contrario ... allora sì, sicuramente sarebbe stato scortese.

    Quote Originariamente inviata da Dario95 Visualizza il messaggio
    3)Voglio proprio vedere se i tuoi codici sono impeccabili...
    Infatti ho detto ragionevolmente impeccabile. Io non ho alcuna presunzione/pretesa di sapere tutto o fare tutto perfettamente.
    Ma sono molto preciso, accurato e scrivo codice meglio di tanti altri, ad esempio di certi tizi che ho conosciuto per lavoro che si "vantavano" di lavorare su progetti di alto livello internazionale ma poi quando si trovavano davanti ad una tastiera... eh ... beh, te lo lascio immaginare.

    Quote Originariamente inviata da Dario95 Visualizza il messaggio
    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.
    Allora ti dò un ultimo indizio ... poi non ti "scoccio" più.
    Il toString() in Prodotto stampa il 'prezzo', quello originale, NON scontato, perché è la variabile di istanza. Ma il tuo comparatore si basa sul getPrezzo(), che per ProdottoScontato calcola il prezzo scontato al volo e lo restituisce.

    Pertanto, come minimo, metti nel toString() anche il getPrezzo() e vedrai che questo prezzo è quello in ordine decrescente!
    E magari in ProdottoScontato metti un override di toString(), invoca la versione "super" e appendi dietro lo sconto (che ora non fai mai vedere) in una forma es. "sconto XX%" (poi scegli tu).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.