0

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

Сам код:

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;
    }
}

}

aepot
  • 49,560
  • Когда вы пишете ResultOfNums(что-то), то вот это "что-то" должно быть обязательно задано при вызове, вы в методе Main вызвали, но обязательные аргументы не передали. Теперь касательно переменных, тут все просто, вот что создается внутри { ... }, то и используется только внутри, что задается за пределами, то и используется за пределами. У вас переменные создаются в методе Nums, они локальные, доступны только в этом методе, если хотите их за пределами использовать, вынесите их за {...}. Ну и на тему: https://ru.stackoverflow.com/a/835223/220553 – EvgeniyZ May 20 '23 at 16:39
  • @EvgeniyZ благодарю за ответ! :) – Leeroyskiy Games May 20 '23 at 17:40
  • https://www.youtube.com/playlist?list=PLuGqgO5WmeGPTZqDHZDIum3h7HnfBfzmZ во – aepot May 20 '23 at 17:41

1 Answers1

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;
    }
}

}

  • 1
    У человека явное недопонимание того, как работают переменные, их видимость, доступность. Автор ожидал того, что раз он в одном методе написал int height = Convert.ToInt32(num1);, значит и в другом методе он может получить доступ к этой переменной. Ваш ответ конечно решает проблему, да, но не объясняет что, почему, и как, из-за чего для автора вопроса он будет по сути, бесполезным. – EvgeniyZ May 20 '23 at 19:32