Часть метода не запущена

#c#

#c#

Вопрос:

  static void getGrades()
    {
        Console.WriteLine("How many grade level classes are you taking?");
        int standardNumber = int.Parse(Console.ReadLine());
        Console.WriteLine();
        Console.WriteLine("How many honors level classes are you taking?");
        int honorsNumber = int.Parse(Console.ReadLine());
        Console.WriteLine();
        Console.WriteLine("How many AP level classes are you taking?");
        int apNumber = int.Parse(Console.ReadLine());
        Console.WriteLine();
        Console.WriteLine("Enter your letter grades when prompted.");
        Console.WriteLine("=======================================");
        for (int a = 1; a == standardNumber; a  )
        {
            int num = 1;
            Console.WriteLine("Enter letter grade for honors class {0}:", num);
            switch (num)
            {
                case 1:
                    string class1 = Console.ReadLine();
                    break;
                case 2:
                    string class2 = Console.ReadLine();
                    break;
                case 3:
                    string class3 = Console.ReadLine();
                    break;
                case 4:
                    string class4 = Console.ReadLine();
                    break;
                default:
                    break;
            }


            Console.WriteLine();

        }
    }
 

Я пытаюсь вызвать этот метод для сбора количества классов и букв классов из сочетания 4 классов. Когда я вызываю метод, первая часть (ниже) выполняется нормально.

     Console.WriteLine("How many grade level classes are you taking?");
    int standardNumber = int.Parse(Console.ReadLine());
    Console.WriteLine();
    Console.WriteLine("How many honors level classes are you taking?");
    int honorsNumber = int.Parse(Console.ReadLine());
    Console.WriteLine();
    Console.WriteLine("How many AP level classes are you taking?");
    int apNumber = int.Parse(Console.ReadLine());
 

Однако остальная часть кода (ниже) не выполняется.

     Console.WriteLine();
    Console.WriteLine("Enter your letter grades when prompted.");
    Console.WriteLine("=======================================");
    for (int a = 1; a == standardNumber; a  )
    {
        int num = 1;
        Console.WriteLine("Enter letter grade for honors class {0}:", num);
        switch (num)
        {
            case 1:
                string class1 = Console.ReadLine();
                break;
            case 2:
                string class2 = Console.ReadLine();
                break;
            case 3:
                string class3 = Console.ReadLine();
                break;
            case 4:
                string class4 = Console.ReadLine();
                break;
            default:
                break;
        }


        Console.WriteLine();

    }
}
 

Кто-нибудь знает, почему это может происходить. Заранее спасибо

Комментарии:

1. что вы пытаетесь здесь сделать?

2. Я пытаюсь получить количество классов каждого типа (например, 2 класса с отличием и 2 класса ap), а затем использовать цикл, чтобы получить буквенную оценку из любого числа этого класса.

Ответ №1:

Согласно вашей логике, если вы введете ввод standardNumber только как 1, он будет запускать эти строки,

  for (int a = 1; a == standardNumber; a  )
 {
   int num = 1;    
}
 

кстати, для этого вам не нужен цикл for.

Редактировать:

Вам нужно сохранить входные данные в коллекции и выполнить цикл для этого

 static void Main(string[] args)
        {
            List<int> inputs = new List<int>();
            Console.WriteLine("How many grade level classes are you taking?");
            int standardNumber = int.Parse(Console.ReadLine());
            inputs.Add(standardNumber);
            Console.WriteLine();
            Console.WriteLine("How many honors level classes are you taking?");
            int honorsNumber = int.Parse(Console.ReadLine());
            inputs.Add(honorsNumber);
            Console.WriteLine();
            Console.WriteLine("How many AP level classes are you taking?");
            int apNumber = int.Parse(Console.ReadLine());
            inputs.Add(apNumber);
            Console.WriteLine();
            Console.WriteLine("Enter your letter grades when prompted.");
            Console.WriteLine("=======================================");
            for (int i = 0; i < inputs.Count; i  )
            {                
                Console.WriteLine("Enter letter grade for honors class {0}:", inputs[i]);
                switch (i)
                {
                    case 1:
                        string class1 = Console.ReadLine();
                        break;
                    case 2:
                        string class2 = Console.ReadLine();
                        break;
                    case 3:
                        string class3 = Console.ReadLine();
                        break;
                    case 4:
                        string class4 = Console.ReadLine();
                        break;
                    default:
                        break;
                }
                Console.WriteLine();
            }
            Console.Read();
        }
 

Ответ №2:

Ваш метод содержит эти две строки подряд:

 int apNumber = int.Parse(Console.ReadLine());
Console.WriteLine();
 

Есть два способа, с помощью которых возможно выполнить первую строку, но вторая строка не выполняется:

  • Вызов метода Console.ReadLine() никогда не возвращается, потому что пользователь никогда не нажимает «ввод».
  • Либо метод Console.ReadLine , либо метод int.Parse генерируют исключение.

Я предполагаю, что int.Parse это создает исключение.


Более теоретический ответ:

Если я не ошибаюсь, когда выполняется код, который я процитировал, всегда должно происходить одно из следующих действий, несмотря ни на что:

  • Первая строка продолжает выполняться вечно.
  • Первая строка выдает исключение.
  • Поток завершается до выполнения второй строки.
  • Первая строка возвращает, а вторая строка выполняется.

Если последнее не происходит, должно произойти что-то другое.