Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92

    Eccezione inesistente?

    Scusate ho scritto il seguente programma per le equazioni i primo grado:

    public class EquazioniPrimoGrado
    {
    private float a;
    private float b;
    private float x;

    public EquazioniPrimoGrado()
    {

    try {}
    finally
    {System.out.println("si deve inserire qualche cosa nel Cotruttore!");}
    }


    public EquazioniPrimoGrado(float a, float b)
    {
    this.a = a;
    this.b = b;
    }

    public float getSol()
    {
    try{x = -(b / a);}
    catch(ArithmeticException e){System.out.println("Nessun Valore");}
    return x;
    }


    public static void main(String argv[])
    {
    Float m = Keyboard.readFloat();
    Float n = Keyboard.readFloat();
    EquazioniPrimoGrado eq = new EquazioniPrimoGrado(m,n);
    System.out.println(eq.getSol());
    }

    }

    Ora il mio problema è che java non segna la divisione di un numero per zero come eccezione,, ma mi ritorna il valore Infinity, se metto poi zero e zero come valori mi ritorna NaN, ma non odvrebbero essere eccezioni da catturare nel metodo getSol?

  2. #2
    Se provi a fare
    codice:
    float a = 1/0;
    vedrai che ti ritornerà l'eccezione che citi tu, perché prima calcola la divisione tra interi, e poi la assegna ad a.

    Probabilmente l'operatore di divisione tra float non guarda se il divisore è la rappresentazione float dello zero. Io risolverei con un if... ;-)
    Il mio Blog

    Nella vita come sul tram, quando ti siedi sei al capolinea.
    Camillo Sbarbaro

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    non centra nulla con il tuo problema... ma togli il costruttore senza argomenti!!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    56
    Il tipo float, come da standard IEEE, include valori a rappresentare POSITIVE_INFINITY, NEGATIVE_INFINITY e NaN (vedi la documentazione della classe java.lang.Float) e tali valori sono usati per rappresentare i risultato delle divisioni per zero.
    Il senso sta nel fatto che i numeri in virola mobile sono complicati: infatti un float non è da intendersi come una rappresentazione esatta di un numero (com'è invece un int), ma solo come una rappresentazione approssimata. Dunque il float 0f non rappresenta lo zero, ma un numero sufficientemente piccolo in valore assoluto da non poter essere risolto in una rappresentazione diversa da zero. Dunque per i float la divisione per zero "non esiste".
    Se vuoi l'eccezione, come ti diceva taita, dopo la divisione fai un test sul risultato e lanci l'eccezione esplicitamente:

    codice:
    public float getSol() {
         x = -(b / a);
         if (Float.isInfinite(x) || Float.isNan(x))
              throw new ArithmeticException();
         return x;
    }

  5. #5
    engiman, hai dato una spiegazione veramente molto chiara!
    Il mio Blog

    Nella vita come sul tram, quando ti siedi sei al capolinea.
    Camillo Sbarbaro

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    92
    Hai ragione! Credo sia l'unico modo per generare l'eccezione con i float.

    Thanx!

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.