对于含糊不清的标题感到抱歉。我对编程很陌生,这个问题有点奇怪,所以我不知道怎么说。
我只是在练习创建一个填充了颜色的数组,用户只需选择1-9就可以选择一种颜色。问题是我收到一条错误消息:
使用未分配的局部变量'UserPickNum'
我已经将它分配给一个int,并且唯一的解决方案就是如果我创建了另一个构造,运行Console.WriteLine(colors[UserPickNum]);
选择颜色,那么程序运行正常。
我想我的问题是,为什么它不会像这样工作而不必创建并调用另一个构造。
using System;
using System.Collections.Generic;
using System.Text;
class Program
{
static void Main()
{
string[] colors;
string Pick;
int PickNum;
int UserPickNum;
Console.WriteLine("Which color do you want? Pick 1-9");
Pick = Console.ReadLine();
if (int.TryParse(Pick, out PickNum))
{
UserPickNum = Convert.ToInt32(Pick);
}
else
{
Console.WriteLine("This isn't a valid number");
Console.ReadKey();
Main();
}
colors = new string[10] { "black", "white", "green", "purple", "red", "brown", "blue", "gray", "yellow", "indigo" };
Console.WriteLine(colors[UserPickNum]);
Main();
}
答案 0 :(得分:1)
如果Pick
结果不是数字,因此int.TryParse
返回false,则UserPickNum
将不会分配给某个值。解决此问题的最简单方法可能是为您声明它的UserPickNum
分配一个值,即:
int UserPickNum = Int32.MinValue;
答案 1 :(得分:1)
您的代码只有一条路径通过您设置if
的{{1}}语句 - 因此警告。但是,您不需要在UserPickNum
上调用Convert.ToInt32
,因为您已将数字作为整数 - 在Pick
中 - 假设用户输入了有效整数。这意味着您根本不需要PickNum
。因此,您可以将代码更改为:
UserPickNum
在尝试将其用作数组索引之前,您还应该检查它是否在范围内:
if (!int.TryParse(Pick, out PickNum))
{
Console.WriteLine("This isn't a valid number");
Console.ReadKey();
Main();
}
colors = new string[10] { "black", "white", "green", "purple", "red", "brown", "blue", "gray", "yellow", "indigo" };
Console.WriteLine(colors[PickNum]);
Main();
答案 2 :(得分:0)
您收到的错误消息是因为您的变量UserPickNum
未初始化(它未在else
块中设置,因此您的代码中可能存在路径设置为一个值。
当您声明它以解决此问题时,可以将其设置为默认值:
int UserPickNum = 0;
我注意到的其他事情是你甚至不需要UserPickNum
变量。在这部分代码中:
Pick = Console.ReadLine();
if (int.TryParse(Pick, out PickNum))
{
UserPickNum = Convert.ToInt32(Pick);
}
变量PickNum
包含用户以整数键入的值。您可以简化这部分代码:
Pick = Console.ReadLine();
if (!int.TryParse(Pick, out PickNum))
{
// code you are currently doing in your else block
Console.WriteLine("This isn't a valid number");
Console.ReadKey();
Main();
}
// code you are currently doing after your if else block
colors = new string[10] { "black", "white", "green", "purple", "red", "brown", "blue", "gray", "yellow", "indigo" };
Console.WriteLine(colors[PickNum]);
Main();
答案 3 :(得分:0)
该错误意味着您正在尝试使用尚未赋予其值的变量。你说“我已经把它分配给了一个int”,但这不是一个真正的任务。赋值是指给它一个值(例如int UserPickNum = 0)。
在您的代码中,它看起来您正在尝试确保使用if / else语句分配值,但else子句在执行后实际上不会停止其余代码。在递归调用Main()之后,您需要返回。