logo

Aritmeettinen poikkeus Javassa

The Poikkeus Käsittely on yksi tehokkaimmista mekanismeista ajonaikaisten virheiden käsittelemiseksi, jotta sovelluksen normaali kulku voidaan ylläpitää. Javassa poikkeus on epänormaali tila. Java-ohjelmointikieli määrittelee useita poikkeuksia. Tässä osiossa käsittelemme yhtä merkittävistä poikkeuksista Aritmeettinen poikkeus Javassa.

Aritmeettinen poikkeus on eräänlainen epätavallinen lopputulos tai koodin tarkistamaton virhe, joka heitetään tai nostetaan aina, kun koodissa esiintyy virheellinen matemaattinen tai aritmeettinen operaatio ajon aikana. Ajonaikainen ongelma, jota kutsutaan myös poikkeukseksi, tulee näkyviin aina, kun murto-osan nimittäjä on 0, eikä JVM pysty selvittämään tulosta. näin ollen ohjelman suoritus lopetetaan ja tehdään poikkeus. Huomaa, että kohdassa, jossa poikkeus on esitetty, ohjelma päättyy. Sitä aikaisempi koodi kuitenkin suoritetaan ja oikea tulos näytetään.

Aritmeettinen poikkeusrakenne

Aritmeettisen poikkeuksen perusluokka on java.lang.ArithmeticException, joka on java.lang.RuntimeExceptionin aliluokka, joka puolestaan ​​on java.lang.Exceptionin aliluokka.

Aritmeettisen poikkeuksen konstruktori

    Aritmeettinen poikkeus():Sitä käytetään aritmeettisen poikkeuksen määrittämiseen, kun parametreja on nolla.Aritmeettinen poikkeus (merkkijono s):Sitä käytetään aritmeettisen poikkeuksen määrittämiseen yhdellä parametrilla.

Kuinka aritmeettinen poikkeus esiintyy?

Seuraavassa on kaksi tilannetta, joissa aritmeettinen poikkeus voi tapahtua.

  1. Kun teemme jaon, jossa 0 käytetään jakajana, eli 0 tulee nimittäjäksi.
  2. Pitkä desimaaliluku, joka ei päätä isolla desimaaliluvulla.

Jaa 0:lla

Tiedoston nimi: Aritmeettinen poikkeus.java

 public class ArithmeticException { void divide(int a, int b) { // performing divison and storing th result int res = a / b; System.out.println('Division process has been done successfully.'); System.out.println('Result came after division is: ' + res); } // main method public static void main(String argvs[]) { // creating an object of the class ArithmeticException ArithmeticException obj = new ArithmeticException(); obj.divide(1, 0); } } 

Lähtö:

 Exception in thread 'main' java.lang.ArithmeticException: / by zero at ArithmeticException.divide(ArithmeticException.java:6) at ArithmeticException.main(ArithmeticException.java:16) 

Päättymätön iso desimaali

Tiedoston nimi: Aritmeettinen poikkeus1.java

 // import statement import java.math.BigDecimal; public class ArithmeticException1 { // main method public static void main(String[] argvs) { // creating two objects of BigDecimal BigDecimal a1 = new BigDecimal(11); BigDecimal a2 = new BigDecimal(17); // 11 / 17 = 0.6470588235294118... a1 = a1.divide(a2); System.out.println(a1.toString()); } } 

Lähtö:

 Exception in thread 'main' java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.base/java.math.BigDecimal.divide(BigDecimal.java:1766) at ArithmeticException1.main(ArithmeticException1.java:9) 

Selitys: Yllä olevassa ohjelmassa Big Decimal -luokka ei tiedä tarkkaa näytettävää tulosta, joka tulee jaon jälkeen. Tämä johtuu siitä, että tulos on päättymätön desimaalilaajennus. Yksi tapa ratkaista se on tarjota raja. Voimme esimerkiksi kertoa nimenomaisesti ohjelmassa, että tulosteen tulee olla rajoitettu 6 desimaalin tarkkuudella. Huomioi seuraava ohjelma.

Tiedoston nimi: Aritmeettinen poikkeus2.java

 // import statement import java.math.BigDecimal; public class ArithmeticException2 { // main method public static void main(String[] argvs) { // creating two objects of BigDecimal BigDecimal a1 = new BigDecimal(11); BigDecimal a2 = new BigDecimal(17); // 11 / 17 = 0.6470588235294118... // rounding up to decimal places a1 = a1.divide(a2, 6, BigDecimal.ROUND_DOWN); System.out.println(a1.toString()); } } 

Lähtö:

 0.647058 

Aritmeettisen poikkeuksen käsittely

Pystymme käsittelemään aritmeettisen poikkeuksen itse käyttämällä try-catch-lohkoa. Huomioi seuraavat ohjelmat.

Tiedoston nimi: HandleArithmeticException.java

 public class HandleArithmeticException { void divide(int a, int b) { int res; try { // performing divison and storing th result res = a / b; System.out.println('Division process has been done successfully.'); System.out.println('Result came after division is: ' + res); } // handling the exception in the catch block catch(java.lang.ArithmeticException ex) { System.out.println('Should avoid dividing by 0 ' + ex); } } // main method public static void main(String argvs[]) { // creating an object of the class ArithmeticException ArithmeticException obj = new ArithmeticException(); obj.divide(1, 0); } } 

Lähtö:

 Should avoid dividing by 0 java.lang.ArithmeticException: / by zero 

Ei-päättyvää desimaalilaajennusta varten meidän tarvitsee vain kääriä rivi, jossa jako tapahtuu, try-lohkon sisään.

Tiedoston nimi: HandleArithmeticException1.java

 // import statement import java.math.BigDecimal; public class HandleArithmeticException1 { // main method public static void main(String[] argvs) { // creating two objects of BigDecimal BigDecimal a1 = new BigDecimal(11); BigDecimal a2 = new BigDecimal(17); try { // 11 / 17 = 0.6470588235294118... a1 = a1.divide(a2); System.out.println(a1.toString()); } // handling the exception in the catch block catch(ArithmeticException ex) { System.out.println('Should avoid dividing by an integer that leads to non-terminating decimal expansion. ' + ex); } } } 

Lähtö:

 Should avoid dividing by an integer that leads to non-terminating decimal expansion. java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.