Проверьте отрицательное значение с помощью TryParse C # - PullRequest
0 голосов
/ 10 октября 2018

я знаю, что есть несколько тем на эту тему, но я не нашел ответа для себя.Поэтому я проверяю правильные значения с помощью double.TryParse, но я также должен проверить, являются ли они отрицательными:

static void Main(string[] args)
{
    double radius, hoehe, umfang, volumen, oberfl;

    Console.WriteLine("Radius des Zylinders eingeben: ");

    while (!double.TryParse(Console.ReadLine(), out radius))
    {
        Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
    }

    Console.WriteLine("Hoehe des Zylinders eingeben: ");

    while (!double.TryParse(Console.ReadLine(), out hoehe))
    {
        Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
    }

    umfang = 2 * Math.PI * radius;
    volumen = Math.PI * Math.Pow(radius, 2) * hoehe;
    oberfl = umfang * (radius + hoehe);

    Console.WriteLine("Umfang: {0:f2}", umfang);
    Console.WriteLine("Volumen: {0:f2}", volumen);
    Console.WriteLine("Oberfläche: {0:f2}", oberfl);

    Console.ReadKey();
}

Сначала я подумал просто добавить его в оператор while, например

while (!double.TryParse(Console.ReadLine(), out radius) && radius <=0)

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

Ответы [ 4 ]

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

Вы можете использовать перегрузку double.TryParse, которая принимает NumberStyles флаги.Если вы ожидаете число с плавающей запятой без знака (например, только неотрицательное), вы можете указать, что:

double.TryParse(
    Console.ReadLine(),
    NumberStyles.AllowDecimalPoint,
    CultureInfo.CurrentCulture,
    out var radius)

Это вернет false, если число имеет знак (оба - или +) и вы знаете, что указанное число всегда неотрицательно.

Обратите внимание, что это возвращает true, если число 0.0 не совсем то, что вы хотите.

Если вы также хотите разрешить пробелэкспоненциальная запись и т. д. Вы должны предоставить дополнительные NumberStyles флаги.

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

Ваше состояние неверно.Следует читать:

while (!(double.TryParse(Console.ReadLine(), out radius) && radius > 0))
0 голосов
/ 10 октября 2018

Ваш код будет работать ... Это должно быть ИЛИ, а не И:

while (!double.TryParse(Console.ReadLine(), out radius) || radius <=0)
0 голосов
/ 10 октября 2018

Измените && на ||.Поскольку || останавливается после того, как первое выражение будет оценено как истинное, то:

  • Если входное значение не является двойным, оно будет повторяться снова (и не будет проверять второе условие, как && -что было проблемой)
  • Если входное значение является двойным, но равно <= 0, оно будет повторяться снова.

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

while (!double.TryParse(Console.ReadLine(), out radius) || radius <=0)

Кроме того, поскольку вы используете этот код дважды (по крайней мере), может быть, заключите его в функцию?

public double GetPositiveDouble()
{
    double result;
    while (!double.TryParse(Console.ReadLine(), out result))
    {
        Console.WriteLine("Wert ist ungültig! Bitte erneut versuchen.");
    }
    return result;
}
...