坚持C#并行阵列和范围匹配作业

时间:2017-10-30 02:31:39

标签: c# arrays range matching

Picture of hw problem 我完成了这个家庭作业,我必须编写一个程序,根据用户输入的数字显示用户收到的等级。我认为我做的一切都是正确的,但是我收到的错误是“使用未分配的本地变量' usersGrade'"我做错了什么?请帮忙。

private void button1_Click(object sender, EventArgs e)
{
    int numOfWords; //user's input
    int[] numRanges = new int[] {0, 16, 31, 51, 76};
    char[] gradeLetter = new char[] { 'F', 'D', 'C', 'B', 'A' }; 
    bool found = false;
    double usersGrade;

    numOfWords = Convert.ToInt32(textBox1.Text); 

    int index = numRanges.Length - 1; 

    while (index >= 0 && !found)
    {
        if (numOfWords >= numRanges[index])
            found = true;
        else
            --index;
    }

    if (found)
        usersGrade = gradeLetter[index];

    label2.Text = $"You received an {usersGrade}";
}

3 个答案:

答案 0 :(得分:2)

看看这些代码:

 double usersGrade;
...
 if (found)
            usersGrade = gradeLetter[index];

        label2.Text = $"You received an {usersGrade}";

如果它不是(found)怎么办?

答案 1 :(得分:1)

正如其他人所说,错误是由于如果foundfalse,则usersGrade将被取消分配。要解决此问题,您只需将其分配给0即可开始,这是变量的最低合法值。可是等等! usersGrade不应该是char吗?我们为什么宣称它为double?您不会收到编译错误,因为存在从chardouble的隐式转换,但如果用户获得A,则我们不希望显示65 }(这是double的{​​{1}}表示。所以,让我们用A

开始吧
F

有了这个,你也可以取消整个char usersGrade = 'F'; 块,只需在if (found)循环中进行分配:

while

但是现在我们看一下这个循环,看起来似乎还有一些额外的东西:手动设置和递减int index = numRanges.Length - 1; while (index >= 0 && !found) { if (numOfWords >= numRanges[index]) { usersGrade = gradeLetter[index]; found = true; } else --index; } 值,并跟踪index变量。如果我们使用found循环,它会更清晰。 for循环已经为我们提供了一个构造,用于在条件为真时分配变量,循环,并减少变量。我们可以在分配值时使用for语句来突破循环。我们还可以将break;的声明移至作业:

numOfWords

答案 2 :(得分:0)

found分支上,userGrade已设置,但在!found分支上,未设置。

if (found) 
{
    usersGrade = gradeLetter[index]; 
    label2.Text = $"You received an {usersGrade}";
}
else label2.Text = $"Error not found";

或者,您可以避免整体声明userGrade并执行此操作。

if (found)
    label2.Text = $"You received an {gradeLetter[index]}";
else label2.Text = $"Error not found";