将字符串转换为数字以供数组使用
本文关键字:数组 数字 字符串 转换 | 更新日期: 2023-09-27 18:35:03
我正在使用 c# 数组进行练习。我已经做到了,但遗憾的是它最终不起作用。我想要这个:
例如,用户键入"第三"。我希望在 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();
最快的解决方案可能是添加一个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;
}
此行不起作用:
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;
}
假设失败:int Choice = Convert.ToInt32(Console.ReadLine())
,因为用户输入third
但该字符串无法解析为数值,您可以使用switch语句并将其作为个案基础,或者,具有字符串及其各自数字的Dictionary<string, int>
:["FIRST", 1]
,["SECOND", 2]
等。然后,你做这样的事情:int chosenValue = Dictionary[Console.ReadLine().ToUpper()];
.
它在此行崩溃
int Choice = Convert.ToInt32(Console.ReadLine());
这是因为从string
转换为int
不适用于自然语言单词。它适用于string
类型。因此,例如,您可以将字符串"3"
转换为整数3
。但是你一言以蔽之"three"
都做不到.
在您的情况下,最明显但最乏味的解决方案是拥有一个巨大的字典,将string
映射到int
s。
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
但这不是最优雅的解决方案。而是蛮力。虽然在你的五个项目的情况下,这并不难。
其他选择,也是唯一合理的选择,如果您允许更大的选择,是尝试"猜测"正确的值。您需要解析字符串并创建一个算法,如果字符串包含单词"二十"和单词"三"或"第三",则为 23。我会把这个想法的实现留给你。