【问题标题】:Using double, return string使用双精度,返回字符串
【发布时间】:2010-09-24 13:58:38
【问题描述】:

在我正在编写的应用程序中,其中一种方法允许将用户输入的数字转换为字母。

例如,用户将输入成绩(作为双打),程序将决定(当满足条件时)返回与数字相关联的字母。最初,我是这样写的:

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。 我该如何让它按照我想要的方式工作?

【问题讨论】:

  • 看起来像是明显的名称冲突。你能发布整段代码吗?
  • 这一种方法九种左右。那将是相当多的。我设法在其他三种方法中使用相同的 foreach 语句,但这些方法的标题名称与此方法不同。因此,我认为您对名称冲突的评估是正确的。我现在才确定如何更改它。
  • 尝试删除代码,直到 (a) 它足够简单,可以在此处发布或 (b) 问题消失。在(b)的情况下,名称冲突发生在被删除的代码中。

标签: c# arrays string double


【解决方案1】:

您的问题令人困惑。

因为它在一个数组中......

但您的示例均不包含数组。你的方法可以正常工作

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;
}

【讨论】:

    【解决方案2】:

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

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

    我假设scores 是一个双精度数组。这是正确的吗?

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

    【讨论】:

      【解决方案3】:
      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";
      

      【讨论】:

      • 它在 c# 中,这就是为什么你会得到一些 -1(不是来自我,tho)
      • 我希望人们将其他语言发布到标记为“作业”的问题中,因为我使用该标签来学习示例。 +1
      猜你喜欢
      • 2014-06-11
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多