2008-11-29 2 views
0

В приложении, которое я пишу, один из методов позволяет вводить числа, которые пользователь вводил, чтобы их превращать в буквы.Использование double, return string

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

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. Как мне заставить это работать так, как я этого хочу?

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