【问题标题】:Methods inside methods [duplicate]方法中的方法[重复]
【发布时间】:2013-02-23 20:27:05
【问题描述】:

在 Java 的 main 方法中包含一个方法在语法上是否正确?例如

class Blastoff {

    public static void main(String[] args) {

        //countdown method inside main
        public static void countdown(int n) {

            if (n == 0) {
                System.out.println("Blastoff!");
            } else {
                System.out.println(n);
                countdown(n - 1);
            }
        }
    }
}

【问题讨论】:

  • 不是方法中的方法,这叫递归。是的,你的算法看起来是对的。
  • @LuiggiMendoza 虽然countdown 是递归的,但它也在词法上嵌套在main 中。
  • 我问的是main方法中有倒计时方法的部分,因为我的编译器说那行有错误
  • @LuiggiMendoza 这就是问题,呃!
  • @LuiggiMendoza 我没有资格回答 Java 问题(请参阅 ruakh 的答案?我不会想到匿名内部类)。我只有在人们错过问题时才有资格指出;-)

标签: java methods


【解决方案1】:

不,不是直接;然而,一个方法可以包含一个本地内部类,当然这个内部类也可以包含方法。 This StackOverflow question 给出了一些例子。

但是,在您的情况下,您可能只想从main 内部调用countdown;您实际上并不需要将其整个定义放在main 中。例如:

class Blastoff {

    public static void main(String[] args) {
        countdown(Integer.parseInt(args[0]));
    }

    private static void countdown(int n) {
        if (n == 0) {
            System.out.println("Blastoff!");
        } else {
            System.out.println(n);
            countdown(n - 1);
        }
    }
}

(请注意,我已将 countdown 声明为 private,因此它只能从 Blastoff 类中调用,我假设这是您的意图?)

【讨论】:

  • 是的,这是我的本意,谢谢。我仍然掌握整个类/方法/对象结构的窍门,countdown(Integer.parseInt(args[0])); 行到底是做什么的?
  • @user1940007:mainargs 参数是一个命令行参数数组,作为 String 实例。 args[0] 是第一个命令行参数,作为 StringThe Integer.parseInt methodString 解析为基数为 10 的整数,并返回 int。所以countdown(Integer.parseInt(args[0])) 将第一个命令行参数解析为base-10 整数,并用它调用countdown。 (尝试以java Blastoff 10 运行你的程序,你就会明白我的意思了。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2016-07-31
  • 1970-01-01
  • 2019-10-28
  • 2016-03-31
  • 2016-01-06
相关资源
最近更新 更多