`

java中的除数为零问题

    博客分类:
  • Java
阅读更多

今天在项目中遇到了一个除零的问题,很是惊奇。最后结果发现在java中浮点数运算中0作除数并不会出现异常,而是结果为:正数除以0得正无穷,负数除以0得负无穷,0除以0得NaN;同样情况若是整形数运算则会抛出异常。从网上找了一个测试的例子与大家分享一下:

public class DivideTest {

 public static void main(String[] args) {
  DivideTest dt = new DivideTest();
  
  // 整数
  dt.testInt(0, 0);
  dt.testInt(1, 0);
  dt.testInt(-1, 0);
  
  // 长整形
  dt.testLong(0, 0);
  dt.testLong(1, 0);
  dt.testLong(-1, 0);
  
  // 浮点
  dt.testFloat(0, 0);
  dt.testFloat(1, 0);
  dt.testFloat(-1, 0);
  
  // 双精度
  dt.testDouble(0, 0);
  dt.testDouble(1, 0);
  dt.testDouble(-1, 0);
  
  System.out.println("12>(0.0/0.0) "+(12>(0.0/0.0)));
  System.out.println("12>(0.1/0.0) "+(12>(0.1/0.0)));
  System.out.println("12<(0.0/0.0) "+(12<(0.0/0.0)));
  System.out.println("12<(0.1/0.0) "+(12<(0.1/0.0)));
  
  System.out.println("12==(0.0/0.0) "+(12==(0.0/0.0)));

 }

 private void testInt(int dividend, int divisor){
  try {
   System.out.println("testInt: "+dividend+"/"+divisor+" = "+dividend/divisor);
  } catch (RuntimeException e) {
   e.printStackTrace();
  }
 }
 
 private void testLong(long dividend, long divisor){
  try {
   System.out.println("testLong: "+dividend+"/"+divisor+" = "+dividend/divisor);
  } catch (RuntimeException e) {
   e.printStackTrace();
  }
 }
 
 private void testDouble(double dividend, double divisor){
  try {
   System.out.println("testDouble: "+dividend+"/"+divisor+" = "+dividend/divisor);
  } catch (RuntimeException e) {
   e.printStackTrace();
  }
 }
 
 private void testFloat(float dividend, float divisor){
  try {
   System.out.println("testFloat: "+dividend+"/"+divisor+" = "+dividend/divisor);
  } catch (RuntimeException e) {
   e.printStackTrace();
  }
 }

}
结果如下:
java.lang.ArithmeticException: / by zero
        at test.DivideTest.testInt(DivideTest.java:42)
        at test.DivideTest.main(DivideTest.java:12)
java.lang.ArithmeticException: / by zero
        at test.DivideTest.testInt(DivideTest.java:42)
        at test.DivideTest.main(DivideTest.java:13)
java.lang.ArithmeticException: / by zero
        at test.DivideTest.testInt(DivideTest.java:42)
        at test.DivideTest.main(DivideTest.java:14)
java.lang.ArithmeticException: / by zero
        at test.DivideTest.testLong(DivideTest.java:50)
        at test.DivideTest.main(DivideTest.java:17)
java.lang.ArithmeticException: / by zero
        at test.DivideTest.testLong(DivideTest.java:50)
        at test.DivideTest.main(DivideTest.java:18)
java.lang.ArithmeticException: / by zero
        at test.DivideTest.testLong(DivideTest.java:50)
        at test.DivideTest.main(DivideTest.java:19)
testFloat: 0.0/0.0 = NaN
testFloat: 1.0/0.0 = Infinity
testFloat: -1.0/0.0 = -Infinity
testDouble: 0.0/0.0 = NaN
testDouble: 1.0/0.0 = Infinity
testDouble: -1.0/0.0 = -Infinity
12>(0.0/0.0) false
12>(0.1/0.0) false
12<(0.0/0.0) false
12<(0.1/0.0) true
12==(0.0/0.0) false 
 
分享到:
评论

相关推荐

    捕捉除数=0异常.rar

    异常(Exception)是程序执行过程中遇到的不正常情况,例如除数为0就是一种常见的运行时错误。在C#中,我们通常使用try-catch语句来捕获和处理这些异常,以防止程序意外终止。 标题“捕捉除数=0异常.rar”指的是一...

    java 公式计算汇总,直接调用其方法即可进行运算

    - 除法:`/`运算符处理除法,但需要注意浮点数除法可能导致的精度问题,封装方法如`public double divide(double a, double b)`,需要考虑除数为零的情况。 2. **科学计算函数**: - 正弦:Java中的`Math.sin()`...

    Java基础入门教程 第7章 Java中的异常处理(共26页).ppt

    例如,在`ExceptionRaised`类的`calculate`方法中,如果除数为零,就会抛出`ArithmeticException`,这是Java内置的异常类,表示进行除法运算时遇到了除数为零的情况。 Java中处理异常主要依赖于`try`、`catch`和`...

    JAVA基础测试中常见的异常问题汇总-Java-CSDN

    7. **除零异常**:在进行除法运算时,如果除数为0,Java会抛出ArithmeticException。在进行除法运算前,需要检查除数是否为0。 8. **并发异常**:在多线程环境中,死锁(Deadlock)、活锁(Livelock)和资源竞争...

    JAVA几个常见错误简析

    总结,Java 中常见的错误主要包括空指针异常、类型转换异常、数组越界异常、除数为零异常以及未初始化的局部变量异常。这些错误大多可以通过在编程时仔细检查和验证变量状态、类型和边界条件来避免。在遇到这些问题...

    解析Java中所有错误和异常的父类java.lang.Throwable

    而 `Exception` 类则包含了那些可以通过程序逻辑处理的异常情况,比如空指针异常、除数为零异常等,它们需要通过 `try-catch` 语句来捕获并处理。 在Java中,异常处理是通过 `try-catch-finally` 语句块来实现的。...

    java数学表达式计算程序设计报告

    该项目作为课程设计的一部分,旨在让学生应用所学的 Java 语言知识,通过实践提高编程技能和问题解决能力。这种实践活动有助于加深理论理解,并为将来的工作或研究打下坚实基础。 3. 知识点:计算器程序设计 ...

    java 除0发生的算术异常(ArithmeticException)

    在Java编程语言中,当你尝试执行一个除以零的操作时,会抛出一个`ArithmeticException`。这个异常属于运行时异常,表明程序试图进行一个非法或无意义的数学运算,比如整数除以零。在Java中,任何类型的数字(无论是...

    java四则运算

    编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入两个运算数(double 类型)和一个运算符(char 类型),使用(1)中的类输出运算结果(保留两位小数)。...

    java实验一.doc

    在这个实验中,`JAVA_HOME`被设置为JDK的安装路径,`CLASSPATH`包含了JDK的`lib`目录下的`dt.jar`和`tools.jar`,而`PATH`则包含JDK的bin目录,这样可以在任何地方执行Java相关的命令,如`javac`用于编译Java源代码...

    java异常处理机制示例(java抛出异常、捕获、断言)

    例如,在`AssertTest`类的`div`方法中,如果除数为零,会使用`assert`关键字抛出一个异常,并附带自定义消息。 4. **throws** 关键字:在方法签名中使用,表示该方法可能会抛出一个或多个异常。例如,`TryCatchTest...

    java异常机制小结

    Exception 是 Java 语言中非严重错误的 superclass,表示程序中非严重的错误,如除数为零、数组越界等。 三、Java 异常的对象 Java 异常的对象来自两个来源:一是 Java 语言本身定义的一些基本异常类型,二是用户...

    Java程序中图形界面案例的分析与研究.pdf

    例如,在计算器除法运算时,如果除数为零,则需要给用户相应的反馈提示,避免程序出现不可预期的错误。 7. 研究方法和应用: 本文档还体现了作者的研究方法,通过实际案例研究,阐述了理论与实践相结合的教学方法。...

    简易计算器.rar_java 计算器_java 计算_java计算器_计算器

    6. **异常处理**:在处理用户输入时,可能会遇到无效的运算符或除数为零的情况,因此良好的代码会包含异常处理机制,如try-catch块。 7. **编译与运行**:Calculator.class是通过javac命令编译Calculator.java得到...

    JSQ_java_

    在`divide`方法中,我们添加了一个条件判断来检查除数是否为零,因为数学上除以零是未定义的。如果除数为零,我们会抛出一个异常,以防止程序出错。 为了使用这些方法,我们需要创建`Calculator`类的实例,并调用...

    Java异常处理.md

    - 当代码执行过程中出现如除数为零的`ArithmeticException`等错误时,Java会立即转至相应的catch块进行异常处理,如输出错误信息并打印堆栈跟踪。 2. **finally块的使用**: - 不论try块中的代码是否抛出异常,...

    基于GUI的Java课程设计

    对于除法,还需要处理除数为零的情况。 4. **错误处理**:在进行数学运算时,可能出现非法输入,如连续点击两个运算符,或者在没有数字的情况下点击除号。良好的错误处理策略可以提供友好的用户体验,比如显示错误...

    Java中throws用法总结

    在此例中,由于除数为零,将会抛出`ArithmeticException`异常,因此在方法声明中使用`throws ArithmeticException`来声明该异常类型。 ##### 2. 使用场景 - **声明异常**:当一个方法内部可能发生某些异常,但...

    java简单计算器源代码

    在实际开发中,我们还需要考虑错误处理,比如无效的输入格式、除数为零等。这可以通过抛出异常并捕获来处理,同时提供友好的错误信息给用户。 此外,为了提高用户体验,计算器可能还包括一个图形用户界面(GUI)。...

    java实现简易计算器

    4. **错误处理**:良好的计算器设计应考虑错误情况,如除数为零、无效的输入格式等,需要提供友好的错误提示。 5. **显示结果**:最后,程序需要将计算结果以适当的形式展示给用户,无论是打印到控制台还是更新GUI...

Global site tag (gtag.js) - Google Analytics