входные данные в методы в visual c # 2005

#c# #visual-studio #arrays #methods

#c# #visual-studio #массивы #методы

Вопрос:

Я столкнулся с проблемой при создании консольного приложения в Visual Studio c # 2005

Я создал следующую программу, в которой в программе вызывается метод (для суммирования 2 предопределенных значений)

вот его код

 class program
{
    static void Main()
    {
        program a;
        a = new program();
        Console.WriteLine(a.am1(1,2));
        Console.ReadLine();
    }
    int sum;
    public int am1(int num1, int num2)
    {
        sum = num1   num2;
        return sum;
    }
}
  

Теперь вот основная проблема, с которой я сталкиваюсь, ну, в этой программе предопределены два целых числа (num1 и num2), я хотел, чтобы эти 2 числа были взяты у пользователя, это означает, что пользователь вводит два числа, а затем выполняется та же программа, что и выше. Как это должно быть сделано?

P.S помните, что все должно быть сделано в методах

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

1. пожалуйста, отформатируйте свой код в следующий раз!

2. А также приведенный ответ об использовании программных аргументов (args[]), вы можете взаимодействовать с пользователем с помощью консоли и the Console. Метод ReadLine(), который: считывает следующую строку символов из стандартного потока ввода.

3. @David Hall: в зависимости от пользовательского интерфейса вы также можете взаимодействовать с пользователем с помощью текстовых полей и тому подобных 🙂

4. @Andreas верно 🙂 на самом деле, я только что заметил, что OP использовал ReadLine() в своем первоначальном вопросе, поэтому мой комментарий был немного излишним. Я пытался помочь, учитывая, что OP, похоже, обладает очень базовыми знаниями C #. Кстати, очень полезный ответ.

5. @David: это был сарказм? … слышал это … каким-то образом 🙂

Ответ №1:

я надеюсь, что понял ваши требования… если нет, пожалуйста, уточните!

 public sealed class Program
{
    private readonly int _number1;
    private readonly int _number2;

    public Program(int number1, int number2)
    {
        this._number1 = number1;
        this._number2 = number2;
    }

    public int Sum()
    {
        return this._number1   this._number2;
    }

    public static void Main(string[] args)
    {
        // this one here is really brutal, but you can adapt it
        int number1 = int.Parse(args[0]);
        int number2 = int.Parse(args[1]);
        Program program = new Program(number1, number2);
        int sum = program.Sum();
        Console.WriteLine(sum);
        Console.ReadLine();
    }
}
  

извините, это не мой основной стиль кодирования … тьфу… действительно уродливо!

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

  1. не давайте слепого доверия int.Parse() . параметры поступают от пользователя, вам лучше перепроверить их!
  2. вам лучше трижды проверить их, поскольку вы выполняете sum … к счастью, c # компилируется с unchecked — этот код может завершиться ошибкой с OverflowException , если он скомпилирован в vb — запомните диапазоны int
  3. почему вы хотите выполнить простое добавление в дополнительном классе?
  4. вам следует разработать свой стиль (в отношении вашего комментария): отделите код пользовательского интерфейса от кода бизнес-уровня!
  5. вам не нужно создавать переменную экземпляра для каждой задачи — вы можете сделать это и с переменными области видимости …!

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

1. Чей это стиль кодирования? Вы имеете в виду, что обычно вы не пишете на C #?

2. нет 🙂 … обычно я не адаптируюсь к стилю OP … но этот здесь был таким жестоким… вау … напоминает мне о моих первых днях 🙂

3. вау .. это так жестоко .. в вашем коде есть несколько вещей, которые я еще не изучил. упростите, пожалуйста

4. жестокое слово дня 🙂 каков ваш уровень в c #? таким образом, я могу адаптировать свой ответ…

5. класс Program {int sum; public int am1(int num1, int num2) { Консоль. WriteLine(«Введите 1-е значение:»); num1 = Int32.Parse (консоль. ReadLine()); Консоль. WriteLine(«n Введите 2-е значение:»); num2 = Int32.Parse(консоль. ReadLine()); sum = num1 num2; возвращает сумму; } статическая пустота Main(строка[] аргументов) { Program a; a = новая программа(); Консоль. Строка записи(a.am1(1, 2)); Консоль. ReadLine(); } }

Ответ №2:

Используйте аргументы командной строки консольного приложения. Если это вас устраивает. Ниже приведен пример из MSDN.

  public class Functions
    {
        public static long Factorial(int n)
        {
            // Test for invalid input
            if ((n < 0) || (n > 20))
            {
                return -1;
            }

            // Calculate the factorial iteratively rather than recursively:
            long tempResult = 1;
            for (int i = 1; i <= n; i  )
            {
                tempResult *= i;
            }
            return tempResu<
        }
    }

    class MainClass
    {
        static int Main(string[] args)
        {
            // Test if input arguments were supplied:
            if (args.Length == 0)
            {
                System.Console.WriteLine("Please enter a numeric argument.");
                System.Console.WriteLine("Usage: Factorial <num>");
                return 1;
            }

            // Try to convert the input arguments to numbers. This will throw
            // an exception if the argument is not a number.
            // num = int.Parse(args[0]);
            int num;
            bool test = int.TryParse(args[0], out num);
            if (test == false)
            {
                System.Console.WriteLine("Please enter a numeric argument.");
                System.Console.WriteLine("Usage: Factorial <num>");
                return 1;
            }

            // Calculate factorial.
            long result = Functions.Factorial(num);

            // Print result.
            if (result == -1)
                System.Console.WriteLine("Input must be >= 0 and <= 20.");
            else
                System.Console.WriteLine("The Factorial of {0} is {1}.", num, result);

            return 0;
        }
    }
    // If 3 is entered on command line, the
    // output reads: The factorial of 3 is 6.