1

私の割り当ては、これに対してtryとcatchをスローするように言っています:

  • ユーザーが少なくとも 3 つのトークンを入力しない場合
  • ユーザーがトークン 1 と 3 に有効な番号を入力しなかった場合。

私はそれを調査しようとしましたが、これによる例外が見つからないようです。現在、私の例外は上記の 2 つの条件で機能しているようですが、私のインストラクターは、1 つではなく 2 つのキャッチを希望しています。

このプログラムをクラッシュさせて、最終的に別のスローを取得し、このプログラムをキャッチまたは変更して、例外が特定のものをキャッチできるようにしたい (ユーザーが少なくとも 3 つのトークンを入力しない場合など)。

ちなみに、上記のいずれかを実行してこのプログラムをクラッシュさせようとすると、常にエラーメッセージが表示されるため、上記の2つのことを明確にカバーしているようです.

私の例外は、キャッチする必要がある 2 つのことをカバーしていますが、1 つではなく 2 つのキャッチが必要です。

import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Driver {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        StringTokenizer st;
        String input, tok1, tok2, tok3;
        double dtok1, dtok3;
        boolean loop = true;

        //input
        System.out.println("Simple calculator program");
        System.out.println("This program will only except a math expression with");
        System.out.println("2 operands and 1 operator. Exceptable operators");
        System.out.println("are +, -, *, /, and %. For example, 2*3 or 6%4.");
        while (loop) {
            System.out.print("\nplease enter an expression or q to quit: ");
            try {
                input = sc.next();

                if (input.equalsIgnoreCase("q")) {
                    loop = false;
                } else {
                    //calculations
                    st = new StringTokenizer(input,"+-*/%",true);
                    tok1 = st.nextToken();
                    tok2 = st.nextToken();
                    tok3 = st.nextToken();
                    dtok1 = Double.parseDouble(tok1);
                    dtok3 = Double.parseDouble(tok3);
                    System.out.println(input + "=" + 
                    singleExpression(dtok1,dtok3,tok2));
                }
            } catch (Exception NoSuchElementException) {
                System.out.println ("Error! Please enter 2 operands and 1 operator!");
            }
        }
    }

    static double singleExpression (double num1, double num2, String operator) {
        double output = 0.0;
        if (operator.equals("+")) {
            output = num1 + num2;
        } else if (operator.equals("-")) {
            output = num1 - num2;
        } else if (operator.equals("*")) {
            output = num1 * num2;
        } else if (operator.equals("/")) {
            output = num1 / num2;
        } else if (operator.equals("%")) {
            output = num1 % num2;
        } else {
            output = 0;
        }
        return output;
    }
}
4

2 に答える 2

1

例外クラスを変数名として使用していると思いますが、Class var.

例外は何でもキャッチします(数と少数の要素の両方)

try{
..
}  catch (NoSuchElementException nse) {
    System.out.println ("Exception for the String Tokenizer");
}catch (NumberFormatException nfe) {
    System.out.println ("Exception for the Number format");
}
catch (Exception otherException) {
    System.out.println ( "Something else.. " + otherException.getMessage() );
}
于 2012-05-16T22:28:08.000 に答える
1

st.nextToken()NoSuchElementExceptionこのトークナイザの文字列にトークンがなくなると、 がスローされます。あなたはすでにそれを見ました。

Double.parseDoubleNumberFormatException文字列に解析可能な double が含まれていない場合は、がスローされます。

2 コメント:

  • StringTokenizer はレガシー クラスString#splitです (非推奨ではありませんが) 。代わりに使用できます。
  • あなたのキャッチ句は次のようになります:catch (NoSuchElementException e)
于 2012-05-16T09:19:05.647 に答える