转换为C#中的Letter等级

时间:2017-12-22 04:16:07

标签: c#

我参加了一个在线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

4 个答案:

答案 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`;
    }
}

但这仍然是错误的。你明白为什么吗?如果numberGrade110,那么在精神上计算出会执行的路径?在这种情况下,此方法是否会返回任何内容?

您的方法规范规定,任何不属于[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;
}