1

宿題の場合、2つの数字を引数として取り、それらを乗算する簡単なプログラムを作成する必要があります。数値の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は数値を無限の精度で格納できず、2つの非常に小さい入力がゼロになる可能性があります。例えば

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 に答える