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.writelines 都改回来。但是,当我这样做时,我收到一个语法错误,告诉我:

不能在此范围内声明名为 score 的局部变量,因为它会给'score' 赋予不同的含义,'score' 已在父范围或当前范围中用于表示其他内容。

所以,我收集到我不能使用score,因为标题已经包含score. 我该如何让它按照我想要的方式工作?

4

3 回答 3

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;
}
于 2008-11-29T19:48:02.653 回答
1

尝试更改 for 循环中的变量名称。

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

我假设scores是一个双打数组。这个对吗?

如果你从一个数组返回,你只会得到第一个分数的成绩......也许你应该返回一个相关的成绩集合。

于 2008-11-29T19:51:36.250 回答
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";
于 2008-11-29T19:55:33.887 回答