2013-09-30 46 views
1

我是學習Java的新手,我做的是Practice-It!問題來幫助我理解語言。練習它! 1.2.3:奇怪

我被困在問題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. 

這是爲什麼?

非常感謝。

+3

只需按照您的代碼並再次檢查。你認爲是錯的。 – Chen

回答

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. 
3

您應該啓動一個調試器並逐步執行該代碼,以便您瞭解它在何時執行操作。

在這裏解釋的事情的問題是,它做它應該做的(所以程序輸出是我所期望的)。

您可以在IDE中找到調試器,您可以(希望)使用該調試器。 您將不得不在這裏添加一個斷點first();,然後應該能夠「步入」您想要的每種方法,或者「跳過」System.out.println

1

您的secondMethod()調用了firstMethod(),這就是爲什麼您在每個「Inside Second Method」後面都看到「Inside First Method」。刪除firstMethod()內secondMethod(的通話),你會看到你的預期輸出

+0

我懷疑如果從第二個刪除第一個會給OP期望的輸出! – SudoRahul

+0

好吧,差不多。他還必須在主 – SrikanthLingala

+0

中的secondMethod()調用之後再次調用firstMethod(),您沒有提到這一點!編輯你的答案來提及它。 – SudoRahul

7

你可以理解它通過應用一些縮進:

first 
third 
    first 
    second 
     first 
second 
    first 
third 
    first 
    second 
     first 

(內部節點代表了外部節點的方法調用)

-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. 

謝謝。

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.