Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62

    [Java] Problemino con Tipo base "int"

    Ciao a tutti, sto svoglendo un po di test per un progetto universitario, adesso una cosa che fa il progetto è valutare le espressioni artmetiche intere, ora ho un piccolo problema nel calcolare il valore dell'espressione, visto che se questa supera il valore massimo dell'intero non lancia l'eccezione ma il valore dell'int svalvola c'è un modo per risolvere questa cosa?
    Faccio un esempio:
    do in input questa espressione "999999999*999999999*999999999*999999999*999999999 "
    invece di lanciare errore da come risultato questo:-1340214785

    come faccio a fare lanciare l'eccezione?

  2. #2
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    Per il momento ho risolto usando il "long" controllo e lancio io l'eccezione se c'è un altro modo ogni suggerimento è ben accetto

    codice:
                long val=o.operazione(valore,temp1);
                if(val<Integer.MAX_VALUE){
                    valore=(int)val;
                }else{throw  new RuntimeException("Valori troppo grandi per essere calcolati!!");}

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    allora, un po' di di background: non è che se si eccede la capacità di int (di qualsiasi altro dato primitivo) questo "svalvola". Si comporta esattamente come previsto (è tutta roba gestita bit-wise):

    Per esempio
    codice:
    int a = 0xffffffff;
    corrisponde a:
    codice:
    int a = -1;
    in quest'ottica
    codice:
    // dato
    int max_int = Integer.MAX_VALUE;
    
    // si ha che
    int not_that_strange = max_value + 1;
    // e
    int min_value = Integer.MIN_VALUE;
    // sono uguali
    Se ti va di approfondire sull'argomento, leggi un po' sul significato del "bit più significativo" (MSB) e sul "complemento a due"

    Per quanto riguarda la soluzione al tuo "problema", vorrai leggere qui:

    Detect or prevent integer overflow

    il primo snippet di codice che trovi ha qualche comodo metodo da cui trarre ispirazione (o da copia-incollare)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.