В настоящее время я выполнил свое назначение программирования, которое, как говорили, использовало рекурсию для поиска факториала числа, которое вводит пользователь. Я успешно это сделал, и это сработало, но я решил немного расширить код и добавить исключения для ударов.Рекурсия и исключения 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, я хочу, чтобы исключение было выбрано». * –
Вы должны бросать «новое StringTooLongException()», не 'lengthException'. Или вы можете переместить 'lengthException' в предложение' if'. – Tacocat
Конкретная ошибка связана с тем, что исключение lengthException не подходит для метода 'fact (long userNum)'. Лично я бы рассмотрел IllegalArgumentException. – KevinO