Вызов переменной осуществляется пользователем из другого метода - PullRequest
0 голосов
/ 11 июля 2020

Я исправил вопрос:

Код работает до тех пор, пока не попадет в MultyMethod, он остановится, потому что я попытался получить вывод SumMethod и выполнить еще один расчет в MultyMethod.

Итак, мой вопрос: я пытался использовать тот же ввод из SumMethod в MultyMethod, но он не работает. Я использовал все ссылки в уме или мог придумать, но все же он сказал мне: имя «SumMethod» нужно ссылку на нее назвать или вы забываете использовать ссылку. Итак, как я мог использовать тот же ввод из SumMethod в MultyMethod !!

using System;

namespace example
{
    class Program
    {

        public int number1 { set; get; }
        public int number2 { set; get; }
        public int sum { set; get; }
        public int multy { set; get; }
        static void Main(string[] args)
        {
            var value = SumMethod();
            var values = MultyMethod();

            ResultMethod(value.number1, value.number2, value.sum, values.multy);
        }
        public static Program SumMethod()
        {
                var input = new Program();
                int i = 0;
                Console.WriteLine(" Please Enter your first number: ");
                input.number1 = int.Parse(Console.ReadLine());
                Console.WriteLine(" Please Enter your second number: ");
                input.number2 = int.Parse(Console.ReadLine());

                int[] arr = new int[] { input.number1, input.number2 };
                do
                {
                    input.sum += arr[i];
                    i++;
                } while (i < 2);

                return input;
            }
            public static Program MultyMethod()
            {
                var input = new Program();
                // here is the issue i am trying to get the input from the previous method instead of asking the user to input the numbers again
                // i have tried this 
                //input.number1 = new input.SumMethod();

                // and also have tried to use this reference 
                //value.SumMethod(); // since the inputs store in this variable but it does not make since to call it this way ><

                // i have also tried to use this way

                //input.number1 = new SumMethod();
            return input;

            }

            public static void ResultMethod(int number1, int number2, int sum, int multy)
            {
                Console.WriteLine(" The first number is: ");
                Console.WriteLine(number1);
                Console.WriteLine(" The second number is: ");
                Console.WriteLine(number2);
                Console.WriteLine(" The sum of the number is: ");
                Console.WriteLine(sum);
                Console.WriteLine(" The multiplication of the numbers is: ");
                Console.WriteLine(multy);
            }
        }
    }

1 Ответ

1 голос
/ 12 июля 2020

Хорошо, ваша основная проблема c в том, что переменная input, на которую вы sh ссылаетесь в MultyMethod, является внутренней для SumMethod. Следовательно, MultyMethod не может получить к нему доступ.

Вы определяете другую переменную с именем input в MultyMethod, но это НЕ та же переменная. Это отдельная область, область действия которой равна MultyMethod, и к ней нельзя получить доступ за ее пределами.

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

Во-первых, вы можете определить input вне SumMethod как класс- уровень статистики c переменная. В этом случае к нему могут получить доступ как SumMethod, так и MultyMethod. Ниже приводится краткая выдержка (некоторые строки удалены для экономии места):

class Program
{

    public int number1 { set; get; }
    public int number2 { set; get; }
    public int sum { set; get; }
    public int multy { set; get; }

    public static Program input = null;

    static void Main(string[] args)
    {
       // etc.
    }

    public static Program SumMethod()
    {
        input = new Program();
        // rest of the code
        return input;
    }
  
    public static Program MultyMethod()
    {
        input = Program.input; // this is a static reference.
        // desired multiplication code
        return input;
    }

Другой вариант - параметризовать MultyMethod, чтобы он принимал Program в качестве параметра, представляющего ввод:

public static Program MultyMethod(Program input)
{
    // You probably don't want to have the same variable have both your sum
    // and your multiplication results.
    Program newVar = new Program() { number1 = input.number1, number2 = input.number2 };   

    // Do things with newVar in place of "input"
   
    return newVar;
}

Тогда вы бы изменили Main, чтобы он выглядел так:

var value = SumMethod();
var values = MultyMethod(value);

Еще лучшая версия будет отделять получение ввода от выполнения суммирования. Итак, вы можете сделать это:

static void Main(string[] args)
{
    var input = GetInput();
    var value = SumMethod(input);
    var values = MultyMethod(input);
    
    // do other things
}

Наконец, все было бы лучше, если бы у вас были отдельные классы для всех трех из следующих:

  • Сама программа
  • Входные параметры и результаты
  • Методы умножения и суммирования
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...