0

I am trying to write a program that takes an integer value (n) from the user, checks that it is greater than 0 and less than 30. If this is the case it calls my catalan numbers method and substitutes n in. If the inputted number is less than 0 or greater than 30 it should throw and IllegalArgumentException.

There doesn't seem to be a problem with the catalan numbers method, but there are when I try and call the catalan numbers method and input 'n' into it. All the problems are confined to the switch statement, where it will not accept the functions 'n.equals("quit"), (n>30), (n < 0), and it won't call my catalan numbers method.

Here is my code so far:

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);
        }
    }
}

If anybody has any solutions to this I would be very grateful.

Guy Coder
  • 24,501
  • 8
  • 71
  • 136
Shaun
  • 97
  • 9

1 Answers1

0

Your approach in using switch is, sorry for that, completely wrong. This is no JavaScript where you can pass the result of a Promise to a boolean. If you want to use Java, you have to learn a totally different thinking in solving problems. Switch is the worst choice to your problem. Try it with nested If-Statements instead.

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);
        }

    }

}
  • No need to be sorry, if I get something horribly wrong I want to know, so thank you. It is, however, now saying 'method call expected' at the 'int i = cn(number) line. Any ideas on how to fix this? – Shaun Apr 23 '17 at 13:44
  • Sorry, my bad. I've re-edited my answer. Now it correctly calls your catalan()-method. –  Apr 23 '17 at 13:46