0

次のエラーを削除するtry/catchプログラム計算機を作成しようとしていますが、機能していません。私が間違っていることを教えてください。不正なオペランド演算とゼロ除算をテストすることになっています。

do // do while is for many operations
{
    try
    {
        System.out.println("Enter num1 and num2 : ");
        int num1 = new Scanner();
        int num2 = new Scanner();
        System.out.println("Enter sign : ");
        char sign = new Scanner();
    }
    catch(IllegalArgumentException ex) // This will check for illegal inputs
    {
        System.out.println(ex.Message()); //Will print error message
    }

    if(sign == '+')
    { // part of code where you will write the plus operation
        System.out.println(num1+num2);
    }
    if(sign == '-')
    {
        System.out.println(num1-num2);
    }
    if(sign == '*')
    {
        System.out.println(num1*num2);
    }
    if(sign == '/')
    {
        try
        {
            System.out.println(num1/num2);
        }
        catch(ArithmeticException ex)// Check for divide by zero exception
        {
            System.out.println("Divide by zero");
        }
    }

    if(sign == 'x') // to exit
    {
        flag = false
    }

    else
    {
        System.out.println("Error : Unknown Operator\n");
    }

}while(flag == true) // flag will be true until user enters 'x' as the choice to exit.
4

2 に答える 2

4

Scannerオブジェクトをint変数に割り当て、コンパイルはしません。

あなたが探しているのは:

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

スキャナーのドキュメントを読むことをお勧めします:http: //docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

于 2012-08-02T01:13:33.050 に答える
0

まず、おそらくもっと差し迫った問題として、あなたのコードにはいくつかの明白な構文の問題があります。前に、特定のステートメントはコンパイルさえしないと述べました -int num1 = new Scanner()は不適切です。なぜなら、 anintはオブジェクトではなく、空のコンストラクターは new の選択肢の 1 つにならないからScannerです。

2 つ目は、おそらく最も重要なことですが、プログラムに固定された直線的な流れがあることです。 2 つの数値のみを追加するとします。運が悪いのは、毎回数値を足し算、引き算、掛け算、割り算をしなければならないからです。

この場合、コードを合理的にスコープアウトすることが非常に重要です。メソッドを使用してこれを実現します。

public Long add(Long value1, Long value2) {
    return value1 + value2;
}

// and so forth

特定の操作を実行したいときはいつでも、「追加」という単語、テキストベースのメニュー (追加の場合は 1 を入力)、またはその他の方法から入力をキャプチャすることで実行できます。

ゼロ除算に関しては、ブロックを使用しません。try...catch 通常、これは壊したくないコードの周りで行うので、除算方法や除算を試みるときに役立ちます。

public Long divide(Long value1, Long value2) throws ArithmeticException {
    return value1 / value2;
}

その方法を使用するときは、次のことが必要です。

Long a = new Long(300);
Long b = new Long(0);

try {
    divide(a, b);
} except(ArithmeticException, ae) {
    System.out.println("Can't divide by zero");
}

プロジェクトの全体的な流れと構築はあなたにお任せしますが、これで良いスタートが切れるはずです。

于 2012-08-02T01:26:55.363 に答える