Используя двойную строку возврата - PullRequest
0 голосов
/ 29 ноября 2008

В приложении, которое я пишу, один из методов позволяет вводить введенные пользователем цифры в буквы.

Например, пользователь будет вводить оценки (как двойные), и программа примет решение (при соблюдении критериев) вернуть букву, связанную с номером. Изначально мне было написано так:

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");

Но это должно быть написано с учетом ВОЗВРАТА. Итак, я думаю, что это должна быть публичная строка GetGrade(double scores) И поскольку он находится в массиве, мне нужно:

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

За исключением того, что я изменил бы все console.writeline, чтобы вернуться. Однако, когда я делаю это, я получаю синтаксическую ошибку, говорящую мне:

Локальная переменная с именем Score не может быть объявлена ​​в этой области, поскольку она будет давать другое значение для «оценки», которая уже используется в родительской или текущей области для обозначения чего-то другого.

Итак, я понял, что не могу использовать score, потому что заголовок уже содержит score. Как мне заставить это работать так, как я хочу?

Ответы [ 3 ]

3 голосов
/ 29 ноября 2008

Ваш вопрос сбивает с толку.

А так как в массиве ...

но ни один из ваших примеров не содержит массив. Ваш метод будет работать нормально, как

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 голос
/ 29 ноября 2008

Попробуйте изменить имя переменной в цикле for.

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

Я полагаю, scores - это массив значений типа double. Это правильно?

Если вы вернетесь из массива, вы получите оценку только за первый балл ... Возможно, вам следует вернуть соответствующий набор оценок.

0 голосов
/ 29 ноября 2008
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";
...