Метод в точке входа не видит входных данных

Рейтинг: 0Ответов: 1Опубликовано: 20.05.2023

Хочу понять как работает обращение методов внутри класса. Т.е. хочу разобраться как один метод может получать некоторые значения у другого и далее выводить это все в итоговом методе который инициализирую в точке старта. Проблема следующая: метод в точке старта просто не видит входных значений...

Сам код:

namespace MyNamespace
{
    class Calc
    {
        public static void Main(string[] args)
        {
            ResultOfNums();
        }

        public static void Nums()
        {
            Console.WriteLine("Введите высоту");
            string num1 = Console.ReadLine();
            int height = Convert.ToInt32(num1);

            Console.WriteLine("Введите ширину");
            string num2 = Console.ReadLine();
            int width = Convert.ToInt32(num2);
        }

        public static int ResultOfNums(int height, int width)
        {
            int area = height * width;
            Console.WriteLine(area);
            return area;
        }
    }
}

Ответы

▲ 0Принят

Проблема вашего кода в том, что вы вызываете метод ResultOfNums не передав в него нужных аргументов (длину и ширину).

Метод Nums(), который должен получать эти значения у пользователя - нигде не вызывается.

Чтобы код работал правильно - должна быть правильная последовательность выполнения:

  1. Запуск программы из точки входа (Main).
  2. Сбор ввода пользователя (Nums).
  3. Вычисление результата (ResultOfNums).

В вашем случае, чтобы получить в методе ResultOfNums нужные значения - вы, во-первых, сперва должны вызывать метод ввода.

public static void Main(string[] args)
{
    Nums();
}

Теперь, при запуске программы - вы увидите сообщения о вводе высоты и ширины из метода Nums().

Затем, когда данные будут введены - вы должны вызвать метод ResultOfNums, указав ему как аргументы - введённые числа.

Сделать это удобнее всего из метода Nums():

public static void Nums()
{
    Console.WriteLine("Введите высоту");
    string num1 = Console.ReadLine();
    int height = Convert.ToInt32(num1);

    Console.WriteLine("Введите ширину");
    string num2 = Console.ReadLine();
    int width = Convert.ToInt32(num2);
    
    var area = ResultOfNums(height, width)
}

Что даст итоговый код вида:

namespace MyNamespace
{
    class Calc
    {
        public static void Main(string[] args)
        {
            // Вызываем диалог с пользователем
            Nums();
        }
        
        public static void Nums()
        {
            // Определяем значение высоты
            Console.WriteLine("Введите высоту");
            string num1 = Console.ReadLine();
            int height = Convert.ToInt32(num1);

            // Определяем значение ширины
            Console.WriteLine("Введите ширину");
            string num2 = Console.ReadLine();
            int width = Convert.ToInt32(num2);

            // Имея значения от пользователя - вызываем подсчёт результата.
            // Обратите внимание - этот метод будет вызван только после того, 
            // как была выполнена прошлая часть кода
            var area = ResultOfNums(height, width); 
        }

        public static int ResultOfNums(int height, int width)
        {
            int area = height * width;
            Console.WriteLine(area);
            return area;
        }
    }
}