私の割り当ては、これに対して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;
}
}