Java - каталонские числа IllegalArgumentException и булевы для проблем int
Я пытаюсь написать программу, которая принимает целочисленное значение (n) от пользователя, проверяет, что оно больше 0 и меньше 30. Если это так, она вызывает мой метод каталонских чисел и подставляет n в. Если введенный число меньше 0 или больше 30, оно должно бросить и IllegalArgumentException.
Кажется, нет проблем с методом каталонских чисел, но бывают случаи, когда я пытаюсь вызвать метод каталонских чисел и ввести в него 'n'. Все проблемы ограничиваются оператором switch, где он не будет принимать функции n.equals("quit"), (n>30), (n < 0) и не будет вызывать мой метод каталонских чисел.
Вот мой код до сих пор:
public class Exercise_3 {
public static long catalan(int n) throws IllegalArgumentException {
int res = 0;
// Base case
if (n <=1) {
return 1;
}
for (int i = 0; i < n; i++) {
res += catalan(i) * catalan( n - i - 1);
}
return res;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Exercise_3 cn = new Exercise_3();
System.out.println("Please enter an integer greater than 0 and less than 30 or type 'quit' to exit.");
boolean n = scan.nextBoolean(); {
switch(n) {
if (n.equals("quit")) {
break;
}
else
case (n > 30):
throw IllegalArgumentException;
break;
case (n < 0):
throw IllegalArgumentException;
break;
case (0 < n <= 30):
int i = cn(n);
break;
}
System.out.println(i);
}
}
}
Если у кого-то есть какие-либо решения для этого, я был бы очень благодарен.
1 ответ
Ваш подход в использовании switch, извините за это, совершенно неверен. Это не JavaScript, где вы можете передать результат Promise логическому значению. Если вы хотите использовать Java, вы должны научиться совершенно другому мышлению при решении проблем. Переключатель является худшим выбором для вашей проблемы. Попробуйте вместо этого использовать вложенные If-утверждения.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Please enter an integer greater than 0 and less than 30 or type 'quit' to exit.");
String input = scan.next();
if(!input.equals("quit")) {
int number = Integer.parseInt(input);
if(number < 0 || number > 30) {
throw new IllegalArgumentException("number out of range");
}
else {
int i = catalan(number);
System.out.println(i);
}
}
}