Как сделать параметр метода необязательным при вводе пользователем?(С #) - PullRequest
0 голосов
/ 02 октября 2018

У меня есть объект под названием «оператор» в C # с методом, который принимает два числовых ввода от пользователя и складывает их вместе.Тем не менее, я хочу сделать второй параметр (2-й ввод) необязательным, чтобы значение по умолчанию было «4», если пользователь не вводит второе число.чем использование значения по умолчанию, если пользователь вводит только одно число и нажимает клавишу ввода при появлении запроса на второй ввод.

Это решение, вероятно, очень очевидно, но оно ускользает от меня.Я был бы признателен, если бы кто-нибудь взглянул на мой код и увидел, что мне не хватает.

Большое вам спасибо!

код программы:

class Program
{
    static void Main(string[] args)
    {
        Operator operatorObject = new Operator();
        Console.WriteLine("Pick a number:");
        int userValue = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Pick another number--optional");
        int userValue2 = Convert.ToInt32(Console.ReadLine());

        int result = operatorObject.operate(userValue, userValue2);

        Console.WriteLine(result);
        Console.ReadLine();
    }
}

код класса:

public class Operator
{
    public int operate(int data, int input=4)
    {
        return data + input;
    }           
}

ОБНОВЛЕНИЕ: Спасибо всем за ваши ответы!Я думаю, что у меня это работает сейчас, благодаря сочетанию предложений.Ваша помощь очень ценится!

Ответы [ 5 ]

0 голосов
/ 03 октября 2018

Если вы не введете значение, входное значение Console.ReadLine вернет пустую строку, которая, безусловно, не может быть преобразована в целое число.

Поэтому, чтобы не указывать параметр, необходимоукажите , если пользователь вообще что-либо ввел:

int userValue2, userValue2;
int result;
Console.WriteLine("Pick a number:");
if(!int.TryParse(Console.ReadLine(), out userValue))
    throw new ArgumentException("no valid number");

Console.WriteLine("Pick another number--optional");
if(int.TryParse(Console.ReadLine(), out userValue2)
    result = operatorObject.operate(userValue, userValue2);
else
    result = operator.operate(userValue);

int.TryParse пытается проанализировать ввод, предоставленный пользователем, и в случае сбоя синтаксического анализа вернет false,Так что это также работает, если пользователь вводит что-то совершенно другое, например "MyString".

0 голосов
/ 03 октября 2018
class Program
{
    static void Main(string[] args)
    {
        Operator operatorObject = new Operator();
        Console.WriteLine("Pick a number:");
        int userValue = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Pick another number--optional");
        var userValue2IsValid = int.TryParse(Console.ReadLine(), out int userValue2);

        int result = 0;
        if (userValue2IsValid) {
            result = operatorObject.operate(userValue, userValue2);
        }
        else {
            result = operatorObject.operate(userValue);
        }

        Console.WriteLine(result);
        Console.ReadLine();
    }
}
0 голосов
/ 02 октября 2018

Проблема в том, что вы вызываете ваш метод с обоими параметрами.Вы должны проверить, передавать ли второй параметр.Примерно так:

public static void Main()
{
    Operator operatorObject = new Operator();
    Console.WriteLine("Pick a number:");
    int userValue = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("Pick another number--optional");

    int userValue2;
    int result;
    if(int.TryParse(Console.ReadLine(), out userValue2))
    {
         result = operatorObject.operate(userValue,userValue2);
    } 
    else 
    {
         result = operatorObject.operate(userValue);
    }

    Console.WriteLine(result);
    Console.ReadLine();
}
0 голосов
/ 02 октября 2018

Что-то вроде:

    static void Main(string[] args)
{
    Operator operatorObject = new Operator();
    Console.WriteLine("Pick a number:");
    var val1 = Console.ReadLine();
    int userValue = 0;
    if (val1 != null && val1.Length > 0)
    {
        userValue = Convert.ToInt32(val1);
    }
    Console.WriteLine("Pick another number--optional");
    var val2 = Console.ReadLine();
    int userValue = 0;
    int userValue2 = 0;
    if (val2 != null && val2.Length > 0)
    {
        userValue2 = Convert.ToInt32(val2);
    }


    int result = operatorObject.operate(userValue, userValue2);

    Console.WriteLine(result);
    Console.ReadLine();
}
public class Operator
{
    public int operate(int data, int input = 4)
    {
        return data + input;
    }
}
0 голосов
/ 02 октября 2018

Как насчет этого:

class Program
{
    static void Main(string[] args)
    {
        Operator operatorObject = new Operator();
        Console.WriteLine("Pick a number:");

        int result = 0;

        int userValue;
        if (int.TryParse(Console.ReadLine(), out userValue))
        {
            Console.WriteLine("Pick another number--optional");
            int userValue2;
            if (int.TryParse(Console.ReadLine(), out userValue2))
            {
                result = operatorObject.operate(userValue, userValue2);
            }
            else
            {
                result = operatorObject.operate(userValue);
            }
        }
        else
        {
            Main(null);
        }

        Console.WriteLine(result);
        Console.ReadLine();
    }

  ...

}

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