2015-06-19 4 views
0

Я хочу ввести идентификаторы и метки учащихся в массив. Проблема заключается в том, что если пользователь вводит идентификатор студента, тогда должен отображаться знак этого учащегося. Ниже приведен мой код. Не могли бы вы мне помочь?Извлечь данные из массивов

int [] mark = new int [5] ; 
string [] studentsid = new string [5]; 
string userInput = ""; 
bool found = false; 
int i = 0;  

string[] answer = new string[5]; 
for (i = 0; i < answer.Length; i++) 
{ 
    Console.WriteLine("Enter Student " + (i + 1) + " 's ID Number: "); 
    studentsid[i] = Console.ReadLine(); 
    Console.WriteLine("Enter student" + (i + 1) + "'s mark: "); 
    mark[i] = Convert.ToInt32(Console.ReadLine()); 
} 
Console.WriteLine("Enter one of you student's id number"); 

userInput = Console.ReadLine(); 
if (studentsid[i].ToUpper() == userInput.ToUpper()) 
{ 
    found = true; 
    Console.WriteLine(mark[i]);       
} 

if (mark[i] >=85 && mark[i] <= 100) 
{ 
    Console.WriteLine("Distinction"); 
} 
Console.ReadKey(); 
+1

Какова фактическая проблема, с которой вы сталкиваетесь? –

+0

Это хороший * старт * на вопрос, но особенно когда вы учитесь кодировать, вам нужно лучше определить фактическую проблему. См. Http://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question – BradleyDotNET

+1

Вам не хватает петли вокруг части вашего кода, где вы хотите чтобы найти правильный идентификатор, остальная часть кода выглядит нормально (ish). – fvu

ответ

4

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

Прямо сейчас вы проверяете, соответствует ли только один ученик (последний студент в массиве) пользователю. Вы также используете переменную управления for-loop вне цикла, что обычно считается плохой практикой.

Рассмотрим что-то вроде этого:

Console.WriteLine("Enter one of you student's id number"); 

userInput = Console.ReadLine(); 
for (int i = 0; i < studentsid.length; i++) 
{ 
    if (studentsid[i].ToUpper() == userInput.ToUpper()) 
    { 
     found = true; 
     Console.WriteLine(mark[i]);       
    } 
} 

Кроме того, ваш "ответ" массив не служит никакой цели. Вы только создаете его, чтобы проверить его жестко закодированную длину 5. Вместо этого используйте длину ученика.

И, наконец, два массива на самом деле не идеальный способ хранения данных такого типа. Карта, использующая идентификатор студента в качестве ключа и знака в качестве значения, будет гораздо более эффективным способом хранения и доступа к этим данным.

+0

Отличный ответ, поскольку он включает исправление + конструктивную обратную связь. – 40Alpha

Смежные вопросы