1

对于家庭作业,我必须创建一个简单的程序,它将两个数字作为参数,并将它们相乘。如果其中一个数字为零,则程序抛出 ArithmeticException

当我阅读文档时,我总是觉得 AritmeticException 只处理除以零错误和其他数学不可能的事情。但是,分配希望这个内置处理程序完成工作,那么如何让它接受乘以零作为错误呢?

到目前为止我的代码(编码为仅处理除以零和其他“标准”数学错误)

public class MultTwo {

public static void main(String[] args) {

    try {
        int firstNum = Integer.parseInt(args[0]);
        int secondNum = Integer.parseInt(args[1]);
        System.out.println(firstNum*secondNum);
    }
    catch (ArithmeticException a) {
        System.out.println("You're multplying by zero!");
    }

}//end main
}//end MultTwo Class
4

6 回答 6

4

关于什么

if (firstNum == 0 || secondNum == 0) {
   throw new ArithmeticException("You're multplying by zero!");
}

虽然这不是一个好的做法,但我猜你的老师想用它给你看一些东西。

于 2012-11-26T12:26:51.250 回答
3

如您所见,在这种情况下不会自动抛出该异常,因此您需要自己抛出它:

if (firstNum == 0 || secondNum == 0) {
    throw new ArithmeticException("Numbers can't be null");
}
//continue with the rest of your code.

笔记:

  • 你不需要抓住ArithmeticException
  • NumberFormatException如果输入不是有效的整数,您可能应该知道。
于 2012-11-26T12:27:05.423 回答
3

我知道您应该抛出异常,而不是处理它。就像是:

int multiply(int firstNum, int secondNum)
{
    if(firstNum == 0 || secondNum == 0)
        throw new ArithmeticException("Multplying by zero!");
    return firstNum * secondNum;
}
于 2012-11-26T12:27:48.403 回答
1

jvm永远不会抛出ArithmeticException任何数字与零相乘,你必须明确地抛出它。

你可以这样做:

try {
    int firstNum = Integer.parseInt(args[0]);
    int secondNum = Integer.parseInt(args[1]);
    if(firstNum == 0 || secondNum == 0){
          throw new ArithmeticException();
    }
    else{
          System.out.println(firstNum*secondNum);
    }
}
catch (ArithmeticException a) {
    System.out.println("You're multplying by zero!");
}
于 2012-11-26T12:27:03.100 回答
1

算术系统永远不会抛出乘以零的异常,因为这是完全有效的,例如

double res = 3.141 * 0.0;

给出 0.0。

相反,您需要检测零,如果有,则抛出,例如

if (res == 0.0) {
   throw new ArithmeticException("You have a zero");
}

您可以检查任一输入是否为零。您可以改为检查结果是否为零,因为(理论上)如果一个或两个输入为零,您只能获得零输出。然而,Java 不能以无穷小精度存储数字,两个非常小的输入可能会产生零。例如

Double.MIN_NORMAL * Double.MIN_NORMAL

给我 0.0

上面的部分不适用于Integers,因此您可以在这种情况下检查您的结果。

于 2012-11-26T12:27:31.437 回答
0

尝试这个...................

import java.util.Scanner;


public class T {

    public static void main(String[] args) {


            int firstNum = new Scanner(System.in).nextInt();
            int secondNum = new Scanner(System.in).nextInt();

            if (firstNum == 0 || secondNum == 0) {

                throw new ArithmeticException("Numbers can't be zero");
            }

            else{
            System.out.println(firstNum*secondNum);
            }



    }

}
于 2012-11-26T12:30:17.683 回答