我正在练习c#的数组。我做了这个,但遗憾的是它最终没有用。我想有这个:
例如,用户键入“third”。我希望在int中将其转换为“2”,以便计算机选择第三个输入的数字。正如我编写的那样,它现在崩溃了。Console.WriteLine("Please enter 5 numbers of choice.");
Int32[] Names = new Int32[5];
Names[0] = Convert.ToInt32(Console.ReadLine());
Names[1] = Convert.ToInt32(Console.ReadLine());
Names[2] = Convert.ToInt32(Console.ReadLine());
Names[3] = Convert.ToInt32(Console.ReadLine());
Names[4] = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The number you typed third is " + Names[2]);
Console.Clear();
Console.WriteLine("Which number would you like the computer to remember? first, second, third etc.");
int Choice = Convert.ToInt32(Console.ReadLine());
string ChosenNumber = (Console.ReadLine());
int first = 0;
int second = 1;
int third = 2;
int fourth = 3;
int fifth = 4;
Console.ReadKey();
答案 0 :(得分:1)
最快的解决方案可能是添加switch
语句来测试用户输入
Console.WriteLine("Which item to view");
switch(Console.ReadLine().ToLower())
{
case "first":
Console.WriteLine(Names[0]);
break;
case "second":
//etc
default:
Console.WriteLine("Not a valid entry");
break;
}
答案 1 :(得分:1)
这条线不起作用:
int Choice = Convert.ToInt32(Console.ReadLine());
为什么呢?由于.NET不会将first
转换为1
。只需"1"
到1
。
试试这个:
string input = Console.ReadLine();
// create an array of keywords
string[] choices = new string[] { "first", "second", "third" };
// get the index of the choice
int choice = -1;
for (int i = 0; i < choices.Length; i++)
{
// match case insensitive
if (string.Equals(choices[i], input, StringComparison.OrdinalIgnoreCase))
{
choice = i; // set the index if we found a match
break; // don't look any further
}
}
// check for invalid input
if (choice == -1)
{
// invalid input;
}
答案 2 :(得分:0)
假设失败:int Choice = Convert.ToInt32(Console.ReadLine())
,因为用户输入third
但该字符串无法解析为数值,您可以使用switch语句并根据具体情况将其视为一般情况,或者,拥有Dictionary<string, int>
个字符串及其各自的数字:["FIRST", 1]
,["SECOND", 2]
等。然后,您执行以下操作:int chosenValue = Dictionary[Console.ReadLine().ToUpper()];
。
答案 3 :(得分:0)
它在此行崩溃
int Choice = Convert.ToInt32(Console.ReadLine());
这是因为从string
转换为int
并不适用于自然语言词汇。它适用于string
类型。因此,例如,您可以将字符串"3"
转换为整数3
。但是你无法为单词"three"
做到这一点。
在你的情况下,最明显但又乏味的解决方案是拥有一个将string
映射到int
的庞大词典。
var myMappings = new Dictionary<string, int>
{
{ "first", 0 },
{ "second", 1 },
{ "third", 2 },
{ "fourth", 3 },
{ "fifth", 4 },
}
然后在字典中搜索用户输入。
var input = Console.ReadLine();
var result = myMappings[input]; // safer option is to check if the dictionary contains the key
但它不是最优雅的解决方案。而是一种蛮力。虽然在你的情况下有五个项目并不那么困难。
其他选项,以及唯一合理的选项,如果您允许更大的选择,将尝试&#34;猜测&#34;正确的价值。您需要解析字符串并创建一个算法,如果字符串包含单词&#34; 20&#34;和单词&#34;三&#34;或&#34;第三&#34;然后它就是23.我将为你留下这个想法的实现。