【问题标题】:How to write a Method to check if valid number has been enter?如何编写一个方法来检查是否输入了有效数字?
【发布时间】:2014-03-18 04:02:28
【问题描述】:

我正在创建一个计算器,用户可以选择 2 个数字,但他们不能输入“单词”或多个小数点。 我需要创建一个方法来检查用户输入是 0-9、小数点还是减号。该方法可以返回truefalse,它们又可以在决策中用作布尔表达式。

这里是 Invalid entry psuedo-code:

Bool entryIsValid = true;

input = Console.ReadLine();

对字符串输入中的每个字符重复以下操作。提示:input[0]是第一个字符,input.Length是字符串的大小(意思是字符串输入的最后一个索引是Length – 1)。

{ //Start of loop
  //A string is a char array. To see a specific character in the string use:  stringName[indexOfDesiredLetter]
  If input[index] is not 0 and input[index] is not 1 and not 2, 3, 4, 5, 6, 7, 8, 9, decimal, and – then
 the entry is a letter or symbol which is invalid
 Stop looping.

  Otherwise
 the entry is a valid number, but we must check a couple things before we know for sure.
 if current letter equals the minus sign and current string index is not the only valid index position for -
  entry is invalid and loop should stop

 elseif current character is equal to the decimal point
  increment a counter to track the number of decimal points
  When decimal point counter is greater than 1
   entry is invalid and loop should stop
} // End of loop

此时entryIsValid 要么仍设置为初始化值 true,要么已更改为 false。返回T/F

{

        int input = 0;
        double num1 = 0;
        double num2 = 0;
        string inputN1 ="";
        string inputN2 = "";

        string validnum = "";

        do
        {
            Console.WriteLine("Simple Calculator\n\t 1) Add\n\t 2) Subtract\n\t 3) Multiply\n\t 4) Divide\n\t 5) Quit\n\t ", input);
            Console.Write("Enter Selection: ");
            input = Convert.ToInt32(Console.ReadLine());

            if (input == 5)
            {
                Console.WriteLine();
            }
            else if (input > 5)
            {
                Console.WriteLine("Invalid Menu Selection.\t Try Again");
            }

            else
            {
                Console.Write("Enter Number 1: ");
                inputN1 = Valid(Console.ReadLine());
                num1 = Convert.ToDouble(inputN1);
                Console.Write("Enter Number 2: ", num2);
                inputN2 = Valid(Console.ReadLine());
                num2 = Convert.ToDouble(inputN2);


                switch (input)
                {
                    case 1:
                        Console.WriteLine("\tResults: {0}", Add(num1, num2));
                        break;
                    case 2:
                        Console.WriteLine("\tResults: {0}", Subtract(num1, num2));
                        break;
                    case 3:
                        Console.WriteLine("\tResults: {0}", Multiply(num1, num2));
                        break;
                    case 4:
                        if (num2 == 0)
                        {
                            Console.WriteLine("Can't Divide by Zero.\t Try Again");

                        }
                        else
                        {
                            Console.WriteLine("\tResults: {0}", Divide(num1, num2));

                        }
                        break;
                }
                Console.WriteLine("Press any key...");
                Console.ReadKey();
                Console.Clear();
            }

        }
        while (input != 5 && input < 5);

        Console.WriteLine("Press any key...");
        Console.ReadKey();
    } //End of main
    public static string Valid(string validnum)
    {
        string validEntry = "1";
        int signCount = 0;
        int decimalCount = 0;
        int x = validnum.Length;
        for (int i = 0; i < x; i++)
        {
            if (validnum[i] != 0 && validnum[i] != 1 && validnum[i] != 2 && validnum[i] != 3 && validnum[i] != 4 && validnum[i] != 5 && validnum[i] != 6 && validnum[i] != 7 && validnum[i] != 8 && validnum[i] != 9 && validnum[i] != '.' && validnum[i] != '-')
            {
                Console.WriteLine("Invalid Number Entered");
                Console.ReadKey();
                validEntry="0"; 
                break;
            }
            if (validnum[i] == '-')
            {
                signCount++;
                if (decimalCount > 1)
                {
                    Console.WriteLine("Invalid Number Entered");
                    Console.ReadKey();
                    validEntry="0";
                }
            }
            if (validnum[i] == '.')
            {
                decimalCount++;
                if (signCount > 1)
                {
                    Console.WriteLine("Invalid Number Entered");
                    Console.ReadKey();
                    validEntry = "0";
                }
            }

        }


        return validEntry;

    }
    public static double Add(double num1, double num2)
    {
        return num1 + num2;
    }
    public static double Subtract(double num1, double num2)
    {
        return num1 - num2;
    }
    public static double Multiply(double num1, double num2)
    {
        return num1 * num2;
    }
    public static double Divide(double num1, double num2)
    {
        return num1 / num2;

    }

}

我编写了该方法,但即使我输入了正确的数字,它也会打印invalid number。我不知道我做错了什么。请帮忙。

【问题讨论】:

  • 更改 num1 = Convert.ToDouble(inputN1);并检查
  • 我做了,也一样。
  • 请查找 TryParse()。
  • @Abhi 已经在 OP 的 previous question 中建议了 Double.TryParse()。但是..没有回应??
  • 我只是想知道为什么我写的方法不起作用。

标签: c# string validation if-statement methods


【解决方案1】:

为什么不使用 Convert.ToDouble 方法并尝试一次检查条目。

如果无法转换,请不要忘记使用 try catch。

http://msdn.microsoft.com/fr-fr/library/zh1hkw6k(v=vs.110).aspx

【讨论】:

  • TryParse 确实是一种更好的方法。这不需要在处理时间方面很昂贵的 try/catch。
【解决方案2】:

好的。我为你修好了:-D

class Program
    {
        static void Main(string[] args)
        {
            int input = 0;
            double num1 = 0;
            double num2 = 0;
            string inputN1 = "";
            string inputN2 = "";

            do
            {
                Console.WriteLine("Simple Calculator\n\t 1) Add\n\t 2) Subtract\n\t 3) Multiply\n\t 4) Divide\n\t 5) Quit\n\t ", input);
                Console.Write("Enter Selection: ");
                input = Convert.ToInt32(Console.ReadLine());

                if (input == 5)
                {
                    Console.WriteLine();
                }
                else if (input > 5)
                {
                    Console.WriteLine("Invalid Menu Selection.\t Try Again");
                }

                else
                {
                    Console.Write("Enter Number 1: ");
                    inputN1 = Valid(Console.ReadLine());
                    num1 = Convert.ToDouble(inputN1);
                    Console.Write("Enter Number 2: ", num2);
                    inputN2 = Valid(Console.ReadLine());
                    num2 = Convert.ToDouble(inputN2);


                    switch (input)
                    {
                        case 1:
                            Console.WriteLine("\tResults: {0}", Add(num1, num2));
                            break;
                        case 2:
                            Console.WriteLine("\tResults: {0}", Subtract(num1, num2));
                            break;
                        case 3:
                            Console.WriteLine("\tResults: {0}", Multiply(num1, num2));
                            break;
                        case 4:
                            if (num2 == 0)
                            {
                                Console.WriteLine("Can't Divide by Zero.\t Try Again");

                            }
                            else
                            {
                                Console.WriteLine("\tResults: {0}", Divide(num1, num2));

                            }
                            break;
                    }
                    Console.WriteLine("Press any key...");
                    Console.ReadKey();
                    Console.Clear();
                }

            }
            while (input != 5 && input < 5);

            Console.WriteLine("Press any key...");
            Console.ReadKey();
        } //End of main
        public static string Valid(string validnum)
        {
            string validEntry = "1";

            double number = 0;
            bool result = Double.TryParse(validnum, out number);
            if (!result)
            {
                validEntry = "0";
            }
            else
            {
                validEntry = number.ToString();
            }

            return validEntry;

        }
        public static double Add(double num1, double num2)
        {
            return num1 + num2;
        }
        public static double Subtract(double num1, double num2)
        {
            return num1 - num2;
        }
        public static double Multiply(double num1, double num2)
        {
            return num1 * num2;
        }
        public static double Divide(double num1, double num2)
        {
            return num1 / num2;

        }
    }

【讨论】:

  • 您遇到的错误是什么?而且,输入是什么?适合我
  • 实际上,您是否尝试用我发布的代码替换类 Program?我也修复了一些其他错误
  • 是的,但它没有捕捉到“字符串”输入
  • 我没有让你感到抱歉。 “字符串”输入是什么意思?
【解决方案3】:

您是否尝试过“TryParse”方法?比如……

var input = Console.Readline();
double test value;

while(!double.TryParse(input, out double))
{
    Console.WriteLine("Invalid input. Please try again...");
    input = Console.ReadLine();
}

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多