Вернуть строку вместо целого числа - PullRequest
0 голосов
/ 06 июня 2018

Как я могу решить эту проблему?(текст в конце "бра, я сказал ...). Программа хочет, чтобы я вернул int, но я хочу вернуть строку. Как я могу решить эту проблему? Потому что я сказал, чтобудет возвращен int, но я хочу получить это сообщение об ошибке. Большое спасибо, ребята !!

edit проблема именно в том, что программа не будет компилироваться из-заиначе возвращаем Console.WriteLine("brah I've told ya that I want more than 5"); Поскольку моя программа хочет int, без строки.

static void Main(string[] args)
{
    Console.WriteLine("Give me a number over 5 bro");
    int x = int.Parse(Console.ReadLine());

    int result = AddNumbers(x, 5);
    Console.WriteLine(result);

    Console.WriteLine("Press enter to close...");
    Console.ReadLine();
}

public static int AddNumbers(int number1, int number2)
{
    int result = number1 + number2;

    if (result > 10)
    {
        return result;
    }
    else return Console.WriteLine("brah I've told ya that I want more than 5");
}
}
}

Ответы [ 5 ]

0 голосов
/ 07 июня 2018

Самый простой и логичный способ - просто сохранить тип возвращаемого значения метода AddNumbers целочисленным, как это имеет смысл, и либо вернуть значение по умолчанию 0 после записи в консоль следующим образом:

   if (result > 10)
        {
            return result;
        }
        else
        {
        Console.WriteLine("brah I've told ya that I want more than 5");
        return 0;
        }

Или изменить тип возвращаемого значения на Int32?который позволяет вам возвратить ноль, выполнив это:

public static Int32? AddNumbers(int number1, int number2)
    {
        int result = number1 + number2;
    if (result > 10)
    {
        return result;
    }
    else
    {
    Console.WriteLine("brah I've told ya that I want more than 5");
    return null;
    }
}

и не забудьте тип переменной:

Int32? result = AddNumbers(x, 5);

Также убедитесь, что result равен 0 или ноль дляизмените получившееся письменное сообщение.

Этого не было в вопросе, но вы можете продолжать спрашивать пользователя, пока он не введет правильную вещь, подобную этой:

static void Main(string[] args)
    {
        Int32? result = null;
        while (result is null)
        {
            Console.WriteLine("Give me a number over 5 bro");
            int x = int.Parse(Console.ReadLine());
            Int32? result = AddNumbers(x, 5);
            if (result is null) continue;

            Console.WriteLine(result);
            Console.WriteLine("Press enter to close...");
            Console.ReadLine();
        }

    }
0 голосов
/ 07 июня 2018

Просто верните строку

public static string AddNumbers(int number1, int number2)
{
    int result = number1 + number2;

    if (result > 10)
    {
        return result.ToString();
    }
    else
    { 
        return "brah I've told ya that I want more than 5";
    }  
}
0 голосов
/ 06 июня 2018

Вы можете иметь только один тип возврата из метода;и все return заявления должны соблюдать это.Этот тип возврата может быть объектом, один из способов вернуть «несколько» вещей: Как я могу вернуть несколько значений из функции в C #?

Таким образом, вы можетене пиши, что хочешь;по крайней мере, не напрямую.Вы можете вернуть int, string или объект, содержащий оба.

Ваш текущий код чепуха;как Console.WriteLine возвращает void.Вы не можете вернуть void (в качестве значения, вы можете в качестве типа возврата курса).

0 голосов
/ 06 июня 2018

, поэтому, работая в соединениях того, как c # работает как язык программирования, вы не можете иметь сигнатуру метода, возвращающую int, а затем возвращающую строку.Теперь, думая об этом с логической точки зрения, это ошибка.Пользователь не вводил число свыше 5, поэтому выведите исключение и поймайте его.Вот как бы вы это сделали.

static void Main(string[] args)
{
    int result = 0;
    Console.WriteLine("Give me a number over 5 bro");
    int x = int.Parse(Console.ReadLine());

    try{

       result = AddNumbers(x, 5);
       Console.WriteLine(result);

    }catch(Exception e)
    {
       Console.WriteLine(e.Message);
    }


    Console.WriteLine("Press enter to close...");
    Console.ReadLine();


}    



public static int AddNumbers(int number1, int number2)
{
    int result = number1 + number2;

    if (result > 10)
    {
        return result;
    }
    else throw new Exception("brah I've told ya that I want more than 5");
}
0 голосов
/ 06 июня 2018

Лучший способ добиться того, что вы пытаетесь сделать в целом, - это использовать исключение.Подумайте, написали ли мы AddNumbers так:

public static int AddNumbers(int number1, int number2)
{
    int result = number1 + number2;
    if(result <= 10)
    {
        throw new Exception("Should be more than 10");
    }
    return result;
}

и нашу основную логику:

    try
    {
        int result = AddNumbers(3, 3);
    }catch(Exception e)
    {
        Console.WriteLine(e.Message); // must've been > 10
        return; 
    }

Способ, которым это работает, когда AddNumbers встречает поведение, которое не ожидается или недопустимо,это бросит исключение.Теперь, когда мы вызываем AddNumbers, мы должны сделать это в блоке try-catch, чтобы перехватить это исключение, если оно было сгенерировано.Этот подход более чистый и менее запутанный, чем использование Tuple, который по сути заново изобретает колесо в этом сценарии.

Таким образом, если наши числа добавить меньше 10, AddNumbers выдает исключение, которое затем перехватывается внаша основная логика и вошла в консоль, печатая «Должно быть больше 10.»1015 * Это имеет преимущество, заключающееся в том, что оно намного проще, но недостатком является то, что мы должны помнить, что нужно включать это выражение if каждый раз, когда мы используем AddNumbers.Маршрут исключения - лучший дизайн, если мы хотим добавить больше проверок, например, если вы хотите, чтобы результат был меньше 30, делился на 2 и т. Д., Вы можете просто продолжать добавлять новые исключения.Однако, если вам нужно только проверить, больше ли результат, чем 10, в целом, может быть проще использовать этот последний параметр.

...