2011-10-27 188 views
0

我已經給了一段代碼(類QuestionTwo)。 我被要求在新創建的Q2類對象上調用方法mQ2之後聲明a,b和c的值。我是否正確調用?

我main.java文件

package openuniversity; 

public class Main 
{ 
    public static void main(String[] args) 
    { 
    QuestionTwo qt = new QuestionTwo(); 
    qt.mQ2(); 
    } 
} 

我QuestionTwo.java類文件:

package openuniversity; 

public class QuestionTwo 
{ 
    int a; 
    int b = 1; 

    public void mQ2() 
    { 
    { 
     int c; 
     int a = 2; 
     c = a; 
    } 

    { 
     int c; 
     int a; 
     c = 3; 
     a = 4; 
    } 

    a++; 

    } 
} 

我到達:

a: 1 
b: 1 
c: 3 

注我還可以選擇'undefined'作爲答案? 那麼它會是1,1,未定義,因爲c不存在於代碼塊之外?

的問題是:

研究下面的代碼,然後從下面的下拉列表是大約的,b和c的值正確的選項方法MQ2被調用一次後一個新創建的Q2類對象。請注意,您爲a,b和c選擇的答案可能彼此不同,也可能不同。

public class Q2 
{ 
    int a; 
    int b = 1; 

    public void mQ2() 
    { 
     { 
      int c; 
      int a = 2; 
      c = a; 
     } 
     { 
      int c; 
      int a; 
      c = 3; 
      a = 4; 

      System.out.println("c: " + c); //correct place? 
     } 
     a++; 
    } 
    System.out.println("a: " + a + "b: " + b); // correct place? 
} 
+0

你是如何到達的?你有沒有想過如何驗證/反駁你的說法? –

+0

你的問題對我來說並不合適。請注意,這裏有本地變量和類變量。當函數退出時局部變量有效地停止存在,所以它們實際上沒有IMO值。 –

+1

如果你在一個塊('{...}')中聲明瞭一個變量,那麼它將在該塊完成後停止存在。因此,有多個不同的變量名爲'a'和'c',正如Adrian所說,在'mQ2()'運行後沒有'c'。 –

回答

0

我建議你打電話MQ2後首次印出使用System.out.println()的所有值,然後通過在你的心中步執行代碼,試圖找出爲什麼的值是什麼,他們是。請記住,所聲明的任何變量僅在範圍內可見(爲簡單起見,{...}),但這些變量可以與其他變量具有相同的名稱,因此即使它們不是這樣,它們也可能看起來像相同。

我想特別指出c不在該方法之外存在。

+0

謝謝你的幫助雷神,很高興:) –

1

由於這是功課,我會限制我的答案几個指針。

  1. 您可以驗證通過調用mQ2()後打印出的變量您的解決方案(提示:你可以使用System.println()爲)。
  2. 這是一個技巧性問題或部分不明確(提示:想想其中ab,特別是c你被問到了)。
+0

感謝您的提示,我欣賞他們。我的困惑是在哪裏放我的System.out.println? 我會把(a + b)放在最後一個大括號的上方嗎?和(c)在哪裏a = 4? –

+0

你必須從你自己的類中打印它們(變量沒有公開/私人指定,所以他們默認保護,意味着只要你在同一個包中就可以訪問),或者只是製作在打印/ b(您可以從mQ2的最後一行調用)的問題Class中使用單獨的toString()方法。你只能在mQ2方法中打印c,但我猜這是問題的一部分 - 它沒有任何價值,因爲它在執行方法*之後不存在*。 – Thor84no

+0

感謝aix,我感謝您的幫助! –