【发布时间】:2014-03-18 04:02:28
【问题描述】:
我正在创建一个计算器,用户可以选择 2 个数字,但他们不能输入“单词”或多个小数点。
我需要创建一个方法来检查用户输入是 0-9、小数点还是减号。该方法可以返回true 或false,它们又可以在决策中用作布尔表达式。
这里是 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