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}";
}
答案 0 :(得分:2)
看看这些代码:
double usersGrade;
...
if (found)
usersGrade = gradeLetter[index];
label2.Text = $"You received an {usersGrade}";
如果它不是(found)
怎么办?
答案 1 :(得分:1)
正如其他人所说,错误是由于如果found
为false
,则usersGrade
将被取消分配。要解决此问题,您只需将其分配给0
即可开始,这是变量的最低合法值。可是等等! usersGrade
不应该是char
吗?我们为什么宣称它为double
?您不会收到编译错误,因为存在从char
到double
的隐式转换,但如果用户获得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";