【问题标题】:Java - Catalan numbers IllegalArgumentException and boolean to int problemsJava - 加泰罗尼亚数字 IllegalArgumentException 和布尔到 int 问题
【发布时间】:2017-04-25 05:10:22
【问题描述】:

我正在尝试编写一个程序,该程序从用户那里获取一个整数值 (n),检查它是否大于 0 且小于 30。如果是这种情况,它会调用我的 catalan numbers 方法并替换 n。如果输入的数字小于 0 或大于 30,它应该抛出 IllegalArgumentException。

加泰罗尼亚数字方法似乎没有问题,但是当我尝试调用加泰罗尼亚数字方法并在其中输入“n”时会出现问题。所有的问题都局限于 switch 语句,它不会接受函数 'n.equals("quit")、(n>30)、(n

到目前为止,这是我的代码:

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 函数放在 switch 中
  • 你也想从用户那里得到整数,但为什么scan.nextBoolean?为什么不scan.nextInt() 但如果您让用户输入字符串quit,这又是一个问题

标签: java illegalargumentexception catalan


【解决方案1】:

抱歉,您使用 switch 的方法是完全错误的。这不是 JavaScript,您可以将 Promise 的结果传递给布尔值。如果你想使用Java,你必须学习一种完全不同的思维来解决问题。 Switch是解决您问题的最糟糕的选择。尝试使用嵌套的 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);
        }

    }

}

【讨论】:

  • 没有必要抱歉,如果我有什么可怕的错误我想知道,所以谢谢。然而,现在在 'int i = cn(number) 行中说 'method call expected'。有关如何解决此问题的任何想法?
  • 对不起,我的错。我重新编辑了我的答案。现在它正确地调用了你的 catalan() 方法。
猜你喜欢
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 2012-04-19
  • 1970-01-01
相关资源
最近更新 更多