2008-11-29 46 views
0

在我寫的應用程序,方法之一允許用戶輸入要變成字母數字。採用雙層,返回字符串

例如,用戶將進入等級(如加倍),程序將決定(當標準被滿足),以返回與號碼相關聯的字母。最初,我是這樣寫的:

public void GetGrade(double scores) 
Console.Write("Score of {0} earns: ", score); 

if (score >= 95.0) 
    Console.WriteLine("A+"); 
else if (score >= 90.0) 
    Console.WriteLine("A"); 
else if (score >= 85.0) 
    Console.WriteLine("B+"); 
else if (score >= 80.0) 
    Console.WriteLine("B"); 
else if (score >= 75.0) 
    Console.WriteLine("C+"); 
else if (score >= 70.0) 
    Console.WriteLine("C"); 
else if (score >= 65.0) 
    Console.WriteLine("D+"); 
else if (score >= 60.0) 
    Console.WriteLine("D"); 
else 
    Console.WriteLine("F"); 

但它需要寫在一個RETURN記。 所以,我覺得應該是公共字符串GetGrade(double scores) 而且因爲它是一個數組,我需要:

foreach(double score in scoress) 
{ 
THE CODE I POSTED ABOVE 
} 

除了我會改變所有的console.writeline要返回的。 然而,當我這樣做,我得到一個語法錯誤,告訴我:

命名得分的局部變量不能在此範圍內聲明,因爲它會給予不同的含義爲「分數」,這已經是在父母使用或當前範圍來表示別的東西。

所以,我推測,我不能使用score因爲頭已經包含score。 我如何去獲得這個工作,我希望它的方式?

+0

看起來像一個明顯的名稱衝突。你能發佈整段代碼嗎? – axk 2008-11-29 19:39:33

+0

這是九個左右的方法。那會相當多。 我試圖在其他三種方法中使用相同的foreach語句,但這些方法並沒有像這樣的標題名稱。所以我認爲你對這個名稱衝突評估是正確的。 我現在才知道如何改變它。 – Harris 2008-11-29 19:48:27

回答

3

你的問題是混亂的。

而在一個陣列,因爲它的...

但沒有你的例子包括數組。你的方法將工作細如

public string ToGrade(double score) 
{ 
    if (score >= 95.0) 
     return "A+"; 
    else if (score >= 90.0) 
     return "A"; 
    /* snip */ 
    else 
     return "YOU GET NOTHING! YOU LOSE! GOOD DAY SIR!"; 
} 

在我看來,你的方法是不是問題,它在你叫它這就是問題的代碼。你將不得不張貼,以獲得你的問題的正確答案。

如果您收到「等級」的陣列,並將它們轉化成一串字母等級的,你必須有一個數組來存儲字母等級。像這樣的東西可能是你需要的東西:

public static string[] ToGrade(double[] grades) 
{ 
    // sanity checks go here 
    string[] result = new string[grades.Length]; 
    for(int i = 0; i < grades.Length; i++) 
    result[i] = ToGrade(grades[i]); 
    return result; 
} 
1

嘗試更改for循環中的變量名稱。

Foreach (double s in scores){...} 

我假定scores是雙打的陣列。它是否正確?

如果你從一個數組返回,你只會得到第一個分數的分數......也許你應該返回一個相關的分數集合。

0
var list = [ 
    [95.0, "A+"], 
    [90.0, "A"], 
    [85.0, "B+"], 
    [80.0, "B"], 
    [75.0, "C+"], 
    [70.0, "C"], 
    [65.0, "D+"], 
    [60.0, "D"] 
]; 

for (var i in list) 
    if (score >= list[0]) 
     return list[1]; 
return "F";