试图理解为什么我在数组中的选择不起作用

时间:2011-07-05 22:29:30

标签: c#-2.0

对于含糊不清的标题感到抱歉。我对编程很陌生,这个问题有点奇怪,所以我不知道怎么说。

我只是在练习创建一个填充了颜色的数组,用户只需选择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(); 
    }

4 个答案:

答案 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()之后,您需要返回。