我创建了一个玩家类,并为我的菜单驱动的播放器系统制作了一个数组,我试图验证用户输入。我创建了一个GetChar和一个GetInt方法来检查用户是否已经使用了char和Int但是我不确定如何验证用户是否已经为玩家号码,目标和助手提供了一个正数而不是负数。
任何帮助将不胜感激
//Creates a player in the tables if the array is not already full and the name is not a duplicate
static void ProcessCreate(Int32 number, String firstName, String lastName, Int32 goals,
Int32 assists, Player[] players, ref Int32 playerCount, Int32 MAXPLAYERS)
{
string message;
//Int32 player = 0;
if (playerCount < MAXPLAYERS)
{
message =("\nCreate Player: please enter the player's number");
number = IOConsole.GetInt32(message);
//(Console.ReadLine());
if (GetPlayerIndex(number, firstName, lastName, goals, assists, players, ref playerCount) == -1)
{
message =("\nCreate Player: please enter the player's First Name");
firstName = IOConsole.Getstring(message);
//Console.ReadLine();
message = ("\nCreate Player: please enter the player's Last Name");
lastName = IOConsole.Getstring(message);
//Console.ReadLine();
message =("\nCreate Player: please enter the player's goals");
goals = IOConsole.GetInt32(message);
//Int32.Parse(Console.ReadLine());
message =("\nCreate Player: please enter the player's assists");
assists = IOConsole.GetInt32(message);
//Console.ReadLine();
InsertPlayer(number, firstName, lastName, goals, assists, players, ref playerCount);
Console.WriteLine("\n{0,7} {1,-20}{2, -20}{3,8}{4,8}{5,8}\n", "Number", "First Name", "Last Name", "Goals", " Assists", "Points");
for (Int32 player = 0; player < playerCount; player++)
Console.WriteLine("{0,7} {1,-20}{2, -20}{3,8}{4,8}{5,8}",
players[player].Number, players[player].FirstName, players[player].LastName,
players[player].Goals, players[player].Assists, players[player].Points());
Console.WriteLine();
}
else
Console.WriteLine("\nCreate Player: the player number already exists");
}
else
Console.WriteLine("\nCreate Player: the player roster is already full");
}
答案 0 :(得分:2)
从正确的数据类型开始 - 如果您使用不能的类型为负数,那么您就已经领先了。
所以 - 您可以使用byte
,ushort
,uint
或ulong
,具体取决于您的模型(最多8位玩家 - 使用{{1} })。
用户输入这些值的方式尚不清楚 - 如果程序员使用您的图书馆,上述内容将大大有助于确保根据您的意愿进行操作。
如果这些是用户输入的文本(例如,在UI或命令行上),则需要解析这些值 - .NET框架在所有上提供byte
和Parse
整数类型(如上面的那些)。这些将允许您根据验证规则检查用户输入的值是否有效。
如果你有一个更复杂的用户界面,选择正确类型的用户界面元素可以确保这些问题永远不会出现(例如,玩家数量的单选按钮,其中值完全在你的控制之中) - 不说这个是一个很棒的用户界面,只要你有选项和控件)。
检查这些并向用户返回错误是很正常的。
如果你是&#34;卡住&#34;对于已签名的类型(即,可以具有负值),只需检查0:
的值TryParse
作为一个注释 - 如果你不能验证输入,那么崩溃无效输入可能是一件好事。
答案 1 :(得分:0)
只需使用简单的while while循环。获取用户输入,然后检查该值是否小于0.如果小于0,则输入该值。
do
{
// get user input
} while(message < 0);