我在下面的代码中遇到了一些问题。我还在学习,我不知道如何解决它。
1.我想要做的是创建一个方法(GetInt)来存储变量,就像我试图在第二个方法(GetTrack)中那样进入我的main方法。< / p>
2. - 当无效输入时我无法循环GetInt方法,我猜测try / catch和boolean thingy有什么问题
谢谢
//Get int Method
static public void GetInt(string sPrompt, int iMin, int iMax)
{
int iNum;
bool bError = false;
do
{
bError = true;
try
{
Console.Write(sPrompt);
iNum = int.Parse(Console.ReadLine());
if ((iNum < iMin) || (iNum > iMax))
{
Console.WriteLine("The value is out of range.");
bError = true;
}
}
catch (ArgumentException)
{
Console.WriteLine("An invalid number was entered, please try again.");
bError = true;
}
}
while (bError == false);
}
//Get Track Method
static public void GetTrack()
{
int iMin;
int iSec;
iMin = GetInt("Enter the minutes: ", 0, 10);
iSec = GetInt("Enter the seconds: ", 0, 59);
}
答案 0 :(得分:6)
在GetInt
的开头,您立即将bError
设置为true。这很可能是假的,所以你实际上会循环,因为你没有把它设置为假。
此外,您不会从该方法返回任何内容,因此您无法获得任何回报。您必须更改方法以返回int
,并在获得该值时实际返回该值。
答案 1 :(得分:0)
您的GetInt
方法的声明应更改为以下内容:
//Get int Method
static public int GetInt(string sPrompt, int iMin, int iMax)
从do ... while循环的开头删除bError = true;
语句。
在do ... while循环之后,添加以下语句:
return iNum;
此外,您的while
条件应该从bError == false
更改为bError == true
或简单地更改为bError
,这意味着同样的事情,如果您的目的是继续提示用户直到输入可以接受。
答案 2 :(得分:0)
以下是我从控制台“获取”用户输入的方法:
string choice = string.Empty;
bool goodChoice = false;
while (!goodChoice)
{
Console.Clear();
Console.WriteLine(string.Empty);
Console.WriteLine("Do you really want to hurt me?");
Console.WriteLine(string.Empty);
Console.WriteLine(string.Empty);
Console.WriteLine("Please Y or N (or 0 to exit)");
choice = Console.ReadLine().Trim();
if (choice.Equals("Y", StringComparison.OrdinalIgnoreCase))
{
goodChoice = true;
}
if (choice.Equals("N", StringComparison.OrdinalIgnoreCase))
{
goodChoice = true;
}
if (choice.Equals("0"))
{
goodChoice = true;
return; /* exist the routine */
}
}
根据您的情况修改
string choice = string.Empty;
bool goodChoice = false;
while (!goodChoice)
{
Console.Clear();
Console.WriteLine(string.Empty);
Console.WriteLine("Enter an Integer between {0} and {1}", minValue, maxValue);
Console.WriteLine(string.Empty);
Console.WriteLine(string.Empty);
Console.WriteLine("Please enter an integer (or X to exit)");
choice = Console.ReadLine().Trim();
int intParseResult = 0;
bool intParseAttempt = int.TryParse(choice, out intParseResult);
if(!intParseAttempt)
{
goodChoice = false;
}
else
{
if ((intParseResult < minValue) || (intParseResult > maxValue))
{
Console.WriteLine("Out of Range");
}
else
{
goodChoice = true;
}
}
if (choice.Equals("X"))
{
goodChoice = true;
return -99999; /* you'll have to figure out how to handle exits on your own */
}
}