2013-06-22 149 views
-5

這個程序的輸出是:0 0程序輸出什麼和爲什麼?

任何人都可以告訴我爲什麼會有這種輸出?

namespace ConsoleApplication 
{ 
    class Sample 
    { 
     int i; 
     Single j; 
     public void SetData(int i, Single j) 
     { 
      i = i; 
      j = j; 
     } 

     public void Display() 
     { 
      Console.WriteLine(i + " " + j); 
     } 
    } 

    class MyProgram 
    { 
     static void Main(string[ ] args) 
     { 
      Sample s1 = new Sample(); 
      s1.SetData(10, 5.4f); 
      s1.Display(); 
     } 
    } 
} 
+0

你執行這個程序一旦自己呢?那麼請提及您*觀察到的輸出。如果您沒有Visual Studio,請參閱:http://www.compileonline.com/compile_csharp_online.php向我們顯示您的輸出,然後詢問您輸出的具體問題。 – inquisitive

+4

好吧,現在只是懶惰。我們不是編譯器......當然,你可以通過逐行跟隨它來爲自己推薦程序的功能。 –

+1

同意@Jayram。運行該程序並親自查看。爲了理解它,只需放置一個斷點並進行調試即可。 Visual Studio Express是免費的。從這裏得到它http://www.microsoft.com/visualstudio/eng/downloads#d-express-windows-desktop – unlimit

回答

1

由於SetData方法中的變量ij是該方法的局部變量,因此您得到0,0作爲輸出。因爲這個,你的班級變量ij沒有被分配。

public void SetData(int i, Single j) 
    { 
     i = i; 
     j = j; 
    } 

改變上面的代碼:

public void SetData(int i, Single j) 
    { 
     this.i = i; // using this will refer to the class level variables 
     this.j = j; 
    } 

或者你也可以命名局部變量不同,那麼局部變量不會隱藏類級別的變量。

public void SetData(int a, Single b) 
    { 
     i = a; 
     j = b; 
    } 

現在輸出將是10和5.4

+0

謝謝。得到它了。 – user1932288

+0

如果這回答了您的問題,您應該將其標記爲答案。 (你也獲得2點聲望點。) –

1

該程序的輸出爲0 0。如方法SetData(),您正在將值分配給相同的變量,這些變量僅在該範圍內。因此,該值不會被分配給該類的變量。如果您想要的值賦給類變量,那麼就修改SetData()方法

public void SetData(int i, Single j) 
    { 
     this.i = i; 
     this.j = j; 
    } 

這將工作。

我希望這個解釋能幫助你。 :)