2015-10-14 61 views
0

如果這是一個愚蠢的問題,我很抱歉,但作爲編程的初學者,我發現很難記住我創建的變量的限制/範圍。我正在嘗試在下面的GetLetters()方法中創建一個臨時數組,但我後來需要根據其名稱在EstimateGrade()方法中訪問此信息,以便爲用戶「」估計等級嘗試以另一種方法訪問臨時陣列

我得到「名稱‘threeLetters’不會在目前情況下」

是否有訪問threeLetters陣列,而無需創建一個公共陣列的方式存在錯誤。

public int[] GetLetters(String userName) 
    { 
     //Creating an array that will hold the 3 values that determine grade 
     int[] threeLetters = new int[3]; 

     char firstLetter = userName[0]; 
     threeLetters[0] = userName[0]; 
     char thirdLetter = userName[2]; 
     threeLetters[1] = userName[2]; 
     char fifthLetter = userName[4]; 
     threeLetters[2] = userName[4]; 

     if(userName.Length > 5) 
     { 
      threeLetters = new int[0]; 
     } 

     return threeLetters; 
    } 

    public int EstimateGrade(int[] grade) 
    { 
     int sum = (threeLetters[0] + threeLetters[1] + threeLetters[2]) * 85; 
     int result = sum % 101; 
     return result; 
    } 
+3

看起來你幾乎就在那裏。嘗試將'EstimateGrade'中的參數名稱從'grade'更改爲'threeLetters'。 –

+0

是的。如果您查看EstimateGrade方法,您提供的參數沒有在方法中使用,並且正在使用的參數是'threeLetters',由於它未在此處聲明,因此無法訪問。如果你在參數中聲明它,你將能夠使用它。請記住,當您使用EstimateGrade方法並希望從'GetLetters'中獲取名稱時,則必須將'GetLetters'方法的返回值傳遞到您的EstimateGrade方法中。例如EstimateGrade(GetLetters(用戶名));我希望這是有道理的。 –

+0

@GrantWinney謝謝:) – corinne

回答

1

threeLetters[]是本地GetLetters(),即threeLetters[]不是GetLetters()外部訪問。既然你逝去的threeLetters[]作爲參數傳遞給EstimateGrade()與別名grade[]噸母雞改變三個等級。請參閱下面的代碼。

public int EstimateGrade(int[] grade) 
{ 
    int sum = (grade[0] + grade[1] + grade[2]) * 85; 
    int result = sum % 101; 
    return result; 
} 
0

在大多數情況下,你可以通過{}括號推斷任何成員的範圍。就類而言,訪問修飾符爲此添加了另一個層。

因此,在你舉例而言,所有變量是本地的方法,但不只是他們,裏面的一切{}

public int[] GetLetters(String userName) 
{  
    int[] threeLetters = new int[3]; 

    char firstLetter = userName[0];  
    char thirdLetter = userName[2]; 
    char fifthLetter = userName[4]; 

    if(userName.Length > 5) 
    { 
     threeLetters = new int[0]; 
    } 

    return threeLetters; 
} 

在極少數情況下,您可能需要爲不同的情況下,相同的名稱,以便您可以變量添加更多的模塊是單獨的部件,其中每個嵌套塊都可以訪問它的父塊的成員:

public int[] GetLetters(String userName) 
{  
    int[] threeLetters = new int[3]; 

    // some special block 1 
    { 
     char firstLetter = userName1[0];  
     threeLetters[0] = firstLetter; 
    } 

    // some special block 2 
    { 
     char firstLetter = userName2[0]; 
     threeLetters[1] = firstLetter ;    
    } 

    if(userName.Length > 5) 
    { 
     threeLetters = new int[0]; 
    } 

    return threeLetters; 
} 

裏面默認情況下所有成員都是私人和本地的類的類:

class A 
{ 
    // private by default 
    static string Foo() 
    { 
     return "This is class A"; 
    } 
} 

class B 
{ 
    public void Foo() 
    { 
     var name = A.Foo(); // error, cannot access, A.Foo must be public 
    } 
} 

如果您想從其他方法來訪問這些變量,你需要定義threeLetters爲您的類的字段(或移動它的父/類範圍):

class A 
{ 
    int[] threeLetters = new int[3]; 
} 

同樣適用對於嵌套類,每個嵌套類可以訪問其父類的成員:

class A 
{ 
    static string Foo() { return "Class A"; } 

    public class B 
    { 
     public static string Foo() { return A.Foo(); } // no error 
    } 
} 

Console.WriteLine(B.Foo()); 
相關問題