我参加了一个在线c#课,它让我这样做:
您的解决方案可以使用一系列分支语句,如if(),else-if()和else(),但不需要任何迭代循环。
等级转换级别应如下:
- 等级" A"被赋予90-100之间的任何值
- 等级" B"给予80-89
之间的任何值- 等级" C"给予70-79之间的任何值
- 等级" D"给予60-69之间的任何值
- 所有其他值将获得等级" F"
我的代码是
private char convertToLetterGrade(int numberGrade)
{
// replace with student code(Which I have done)
if (numberGrade >= 90 && numberGrade <= 100)
{
MessageBox.Show("A");
}
else if (numberGrade >= 80 && numberGrade <= 90)
{
MessageBox.Show("B");
}
else if (numberGrade >= 70 && numberGrade <= 80)
{
MessageBox.Show("C");
}
else if (numberGrade >= 60 && numberGrade <= 70)
{
MessageBox.Show("D");
}
else if (numberGrade <= 70)
{
MessageBox.Show("F");
}
}
它还说
通过运行程序测试算法,在屏幕上的文本框中输入值,然后单击&#34;转换为字母等级&#34;按钮。
我该怎么办?
编辑:对不起我需要更清楚我有一个号码我必须进入一个盒子(丢弃神奇的数字)
我得到了错误:AlgorithmTest.convertToLetterGrade(int): Not all paths return a value
。
答案 0 :(得分:1)
AlgorithmTest.convertToLetterGrade(int):并非所有路径都返回值
该方法应为每个案例返回一个值;
private char convertToLetterGrade(int numberGrade)
{
// replace with student code(Which I have done)
char letter = 'F';
if (numberGrade >= 90 && numberGrade <= 100)
{
MessageBox.Show("A");
letter = 'A'
}
else if (numberGrade >= 80 && numberGrade < 90)
{
MessageBox.Show("B");
letter = 'B'
}
else if (numberGrade >= 70 && numberGrade < 80)
{
MessageBox.Show("C");
letter = 'C'
}
else if (numberGrade >= 60 && numberGrade < 70)
{
MessageBox.Show("D");
letter = 'D'
}
return letter;
}
另外,请谨慎使用<=
和<
。
答案 1 :(得分:0)
您收到错误是因为您的功能是
private CHAR ConvertToLetterGrade(int numberGrade)
但您没有在函数中返回char。如果没有必要返回值,则将其更改为
private void ConvertToLetterGrade(int numberGrade)
修改强> 由于您所做的只是显示一个消息框,因此您无需返回值。如果您的函数不需要返回值,则应将其设置为void。您与第一组代码非常接近,但只需要进行一些更改。
private void convertToLetterGrade(int numberGrade)
{
// replace with student code(Which I have done)
if (numberGrade >= 90 && numberGrade <= 100)
{
MessageBox.Show("A");
}
else if (numberGrade >= 80 && numberGrade < 90)
{
MessageBox.Show("B");
}
else if (numberGrade >= 70 && numberGrade < 80)
{
MessageBox.Show("C");
}
else if (numberGrade >= 60 && numberGrade < 70)
{
MessageBox.Show("D");
}
else
{
MessageBox.Show("F");
}
}
还要确保您在if语句中比较正确的内容。最初你有numberGrade >= 80 && numberGrade <= 90
的字母等级&#39; B&#39;。如果数字等级为90,则会返回true,因为<=
(小于或等于)这是不正确的,因为&#39; B&#39;在80-89之间。
答案 2 :(得分:0)
有两种方法可以解决您的问题。如果您不需要返回值(仅显示),则只需将函数的char
类型更改为void
。否则,您必须为每种情况添加return
操作,例如:
if (numberGrade >= 90 && numberGrade <= 100
{
MessageBox.Show("A");
return 'A';
}
此函数也应该返回一些默认值,而不管numberGrade
值。可以在所有条件块之后添加return 'O'
。
答案 3 :(得分:0)
首先,convertToLetterGrade
需要返回char
,因为这是您自己选择方法所强加的条件&#39}。签名。好的,让我们返回char
:
private char convertToLetterGrade(int numberGrade)
{
// replace with student code(Which I have done)
if (numberGrade >= 90 && numberGrade <= 100)
{
return `A`;
}
else if (numberGrade >= 80 && numberGrade <= 90)
{
return `B`;
}
else if (numberGrade >= 70 && numberGrade <= 80)
{
return `C`;
}
else if (numberGrade >= 60 && numberGrade <= 70)
{
return `D`;
}
else if (numberGrade <= 60)
{
return `F`;
}
}
但这仍然是错误的。你明白为什么吗?如果numberGrade
是110
,那么在精神上计算出会执行的路径?在这种情况下,此方法是否会返回任何内容?
您的方法规范规定,任何不属于[100, 60)
的值必须是F
,因此,如果您严格遵循此方法,则您的方法应为:
private char convertToLetterGrade(int numberGrade)
{
// replace with student code(Which I have done)
if (numberGrade >= 90 && numberGrade <= 100)
{
return `A`;
}
else if (numberGrade >= 80 && numberGrade <= 90)
{
return `B`;
}
else if (numberGrade >= 70 && numberGrade <= 80)
{
return `C`;
}
else if (numberGrade >= 60 && numberGrade <= 70)
{
return `D`;
}
else
{
return `F`;
}
}
你看到了区别吗?现在,任何numberGrade
都将遵循返回某些内容的路径。让convertToLetterGrade(110)
返回F
似乎很奇怪,但是嘿,这就是你给出的规范!
但我们仍然可以做得更好。请注意if else
子句按顺序进行评估,因此您可以对此进行优化,执行以下操作:
private char convertToLetterGrade(int numberGrade)
{
// replace with student code(Which I have done)
if (numberGrade > 100)
{
return `F`
}
if (numberGrade >= 90)
{
return `A`;
}
else if (numberGrade >= 80)
{
return `B`;
}
else if (numberGrade >= 70)
{
return `C`;
}
else if (numberGrade >= 60)
{
return `D`;
}
else
{
return `F`;
}
}
没有必要检查每个else if
子句的上限,因为如果您已经在前一个中检查了它;避免不必要的检查
最后(并且这主要是意见)基于,如果可能的话,通常你应该避免在方法中避免多次返回。您将看到许多书籍以下列方式实现类似的方法:
private char convertToLetterGrade(int numberGrade)
{
// replace with student code(Which I have done)
char grade;
if (numberGrade > 100)
{
grade = `F`;
}
if (numberGrade >= 90)
{
grade = `A`;
}
else if (numberGrade >= 80)
{
grade = `B`;
}
else if (numberGrade >= 70)
{
grade = `C`;
}
else if (numberGrade >= 60)
{
grade = `D`;
}
else
{
grade = `F`;
}
return grade;
}