1

我是学习 Java 的新手,我正在练习它!帮助我理解语言的问题。

我被困在题为 Strange 的问题 1.2.3 上,在这个问题中,他们希望您根据他们提供的代码输入输出。

我的问题是,与输入相比,我不理解输出。

 public class Strange {

 public static void main(String[] args) {
    first();
    third();
    second();
    third();
 }

 public static void first() {
    System.out.println("Inside first method.");
}

public static void second() {
    System.out.println("Inside second method.");
    first();
 }

 public static void third() {
    System.out.println("Inside third method.");
    first();
    second();
 }
}

我认为输出将是:

Inside first method.
Inside third method.
Inside first method.
Inside second method.
Inside second method.
Inside first method.
Inside third method.
Inside first method.
Inside second method.

但它是:

Inside first method.
Inside third method.
Inside first method.
Inside second method.
Inside first method.
Inside second method.
Inside first method.
Inside third method.
Inside first method.
Inside second method.
Inside first method.

为什么是这样?

非常感谢。

4

6 回答 6

7

您可以通过应用一些缩进来理解它:

first
third
    first
    second
        first
second
    first
third
    first
    second
        first

(内部节点代表外部节点的方法调用)

于 2013-09-30T10:02:45.667 回答
5

您应该通过查看每个方法执行的逐步调用来理解这一点。

first();
    Inside first method.
third();
    Inside third method.
        first();
            Inside first method.
        second();
            Inside second method.
                first();
                    Inside first method.
second();
    Inside second method.
        first();
            Inside first method.
third();
    Inside third method.
        first();
            Inside first method.
        second();
            Inside second method.
                first();
                    Inside first method.
于 2013-09-30T10:07:41.530 回答
3

您应该启动一个调试器并单步执行该代码,这样您就会看到它在什么时候做了什么。

在这里解释事情的问题是它做了它应该做的(所以程序输出是我所期望的)。

您可以在您(希望)使用的 IDE 中找到调试器。您必须在first();此处添加一个断点,然后应该能够“进入”您想要的每个方法,或者“跳过” System.out.println.

于 2013-09-30T10:02:12.830 回答
2
public static void first() {
    System.out.println("Inside first method.");
}

public static void second() {
    System.out.println("Inside second method.");
    first();
}

每次调用都second()将连续显示以下行(因为first()之后立即调用):

Inside second method.
Inside first method.

这也是唯一Inside second method.可以打印“”的方式。因此,您期望的输出是不可能的:

...
Inside second method.
Inside second method.
于 2013-09-30T10:08:51.703 回答
1

您的 secondMethod() 调用了 firstMethod() 这就是为什么您在每个“Inside Second Method”之后都会看到“Inside First Method”的原因。在 secondMethod() 中删除 firstMethod() 的调用,您将看到预期的输出

于 2013-09-30T10:02:36.040 回答
-1

输出没有问题。只需检查并再次检查。输出将

Inside first method.
Inside third method.
Inside first method.
Inside second method.
Inside first method.
Inside second method.
Inside first method.
Inside third method.
Inside first method.
Inside second method.
Inside first method.

谢谢。

于 2013-09-30T10:05:08.150 回答