私は現在、ユーザーが入力した数値の階乗を見つけるために再帰を使うと言われていたプログラミング割り当てを行っていました。私は正常にそれを行い、それは働いたが、私はコードを少し拡張し、キックのための例外を追加することに決めた。Javaの再帰と例外
基本的には、プログラムにユーザーに0以上の数値を入力するように要求し、ユーザーが0未満の数値を入力すると例外がスローされ、捕捉され処理されます。私はこのコードでは、私はStringTooLong
である間違った例外を使用して知っているが、私は頭の上から他の例外を知りません。ところで、コードを実行すると、throw lengthException
にシンボルが見つからないというエラーが表示されます。ここで
は私のコードです:
import java.util.Scanner;
public class Recursion {
public static void main(String args[]) {
long userNum;
System.out.println("Enter a number to check it's factorial");
Scanner scnr = new Scanner(System.in);
userNum = scnr.nextLong();
StringTooLongException lengthException =
new StringTooLongException ("String has too many characters");
System.out.println(fact(userNum));
}
public static long fact(long userNum) {
try {
if(userNum < 0) {
throw lengthException;
} else if(userNum == 1 || userNum == 0) {
return 1;
} else {
return userNum*fact(userNum-1);
}
} catch(Exception e) {
System.out.println("Enter a number that is greater or equal to 0," + e);
}
}
}
[IllegalArgumentException](https://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html)が適しています。また、あなたが* "ユーザーが0よりも** **少ない数字を入力した場合、私は例外がスローされるようにしたい"と言っていると思います* –
'new StringTooLongException()'を投げているはずです。 'lengthException'ではありません。または、 'length'を' if'節に移動することもできます。 – Tacocat
特定のエラーは、lengthExceptionがメソッド 'fact(long userNum)'の有効範囲外であるためです。個人的には、私はIllegalArgumentExceptionを検討します。 – KevinO