Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [java] Confronto tra razionali

    Ciao a tutti!
    ho una classe che ha come variabili
    codice:
    BigInteger numeratore
    BigInteger denominatore
    ora, creo due istanze di questa classe, ad esempio 2/5 (numeratore=2, denominatore=5)e 3/4.

    dovrei creare un metodo compareTo che funzioni su questi razionali, dicendo quindi se 2/5 è maggiore, uguale o minore di 3/4, lavorando sui BigInteger.

    Fare num/div e confrontare non funziona, perché sono BigInteger e quindi il risultato viene arrotondato, col problema che per due numeri simili si ottiene lo stesso intero.

    Ho pensato di convertire i BigInteger in float, ma per numeri molto grandi non funziona (e a me serve pensare anche al fatto che la classe possa essere utilizzata con numeri molto grandi).

    L'interfaccia "Comparable" potrebbe risolvere il problema? Se sì, non ho ben capito come

    Vi ringrazio in anticipo
    (Sicuramente mi sarò dimenticato di specificare qualcosa..nel caso chiedete pure!)

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

    Re: [java] Confronto tra razionali

    Originariamente inviato da Lasentinella
    Ho pensato di convertire i BigInteger in float, ma per numeri molto grandi non funziona.
    Allora puoi usare BigDecimal.

    Originariamente inviato da Lasentinella
    L'interfaccia "Comparable" potrebbe risolvere il problema?
    Visto che hai definito una "tua" classe che rappresenta un valore nel modo spiegato, puoi certamente implementare Comparable per rendere gli oggetti comparabili.
    Ma non è che "risolve il problema" ... è solo il modo per dichiarare che oggetti della tua classe sono comparabili tra di loro.
    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 L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    A dire il vero, ragionando un pochino in termini matematici, esiste una soluzione che non necessita di fare divisioni, visto anche e sopratutto (altrimenti probabilmente non la dicevo) il fatto che un BigInteger è un valore a precisione "arbitraria".

    Dati due valori espressi come numeratore/denominatore, se uno dei due dati (numeratore o denominatore) fosse uguale, sarebbe facile. Ad esempio 1/4 e 1/5, è chiaro che 1/5 è più piccolo. Idem con 1/4 e 3/4, dove 1/4 è più piccolo.

    Ma prendiamo ad esempio 1/5 e 2/3, quale è il maggiore? A prima vista bisognerebbe fare la divisione per saperlo. Ma ragioniamo un momento. Quale è il minimo comune multiplo (mcm) di 3 e 5? È 15. Quindi potrei fare:

    codice:
    1   3       2   5
    - * -   e   - * -
    5   3       3   5
    Risultato: avrei 3/15 e 10/15. Ora è facile: 3/15 è più piccolo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Hai ragione, così funziona..non ci avevo pensato!!
    Grazie mille

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 © 2025 vBulletin Solutions, Inc. All rights reserved.