在我正在编写的应用程序中,其中一种方法允许用户输入的数字变成字母。
例如,用户将输入成绩(作为双打),程序将决定(满足标准时)以返回与该数字相关联的字母。最初,我写的是这样的:
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”赋予不同的含义,“score”已在父级或当前范围中用于表示其他内容。
因此,我认为我无法使用score
,因为标头已包含score
。
我该怎么做才能按照我想要的方式工作?
答案 0 :(得分: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 :(得分:1)
尝试更改for循环中的变量名称。
Foreach (double s in scores){...}
我认为scores
是一个双打数组。这是对的吗?
如果你从一个阵列返回,你将只获得第一个分数的分数......也许你应该返回一个相关的分数集合。
答案 2 :(得分: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";