如何使用switch()语句将数字转换为字母等级?

时间:2009-10-08 01:07:33

标签: java switch-statement

这不是家庭作业,但老师给我们帮助学习考试是一种做法。但我不会把它转交给老师。 (我希望这是允许的)

他希望用户输入成绩并为其分配一个字母等级。 if语句很容易,但我不能使用任何东西!我必须使用切换方法。

这是我的功能类:

public class Grade {

public double getGrade(int input)
 {
  double inputGrade;
  switch(input)
  {
   case 1: inputGrade >= 90;
       break;
   case 2: inputGrade >= 80;
       break;
   case 3: inputGrade >= 70;
       break;
   default:
       grade = 60;
  }
  return grade;

 }

}

这是我的测试类:

import java.util.*;
public class TestGrade
{
 public static void main(String[] args)
 {
  Scanner scan = new Scanner(System.in);
  int input = scan.nextInt();
  Grade lGrade = new Grade();
  double finalGrade = lGrade.getGradeSwitch(input);
  System.out.println("Your toll is $" + finalGrade);
 }

}

我只是没有足够的编程来拥有这种分析思维。我试图完成它,我还没有找到一种方法将用户输入(int)转换为字母等级(字符串)而不使用if语句。

我知道这是不完整的,但这是我可以走的,而不会犯错误。

编辑:哇!谢谢你们,我讨厌挑选一个正确答案,因为很多人帮助了我!

这就是我最终的结果(有效:D)

public String getGrade(int input)
{
    String letterGrade;
    switch(input/10)
    {
        case 9: letterGrade = "A";
                  break;
        case 8: letterGrade = "B";
                  break;
        case 7: letterGrade = "C";
                  break;
        case 6: letterGrade = "D";
        default:
                  letterGrade = "F";
    }
    return letterGrade;

}

12 个答案:

答案 0 :(得分:6)

好吧,我的假设是你会输入0-100的数字等级,你想要的字母等级为“90-100:A; 80-89:B; ......; 60-69:D ; 0-59:F“。

如果情况并非如此,那么您在编程方面的第一课就是:编码中最重要的部分是明确写出规范和要求

话虽如此,有聪明而愚蠢的方法。

  • 愚蠢的方法:

    • 像现在一样使用“输入”上的开关

    • 由于值90,91 ... 100都应该被视为相同,所以将它们全部放在单独的开关案例中但只在最后一个中完成工作(已知) as fall-through; see SwitchDemo2 on this page for how that works

    • 对于最后一个值(例如,如果从100开始并且向下,则为90),switch语句将为letterGrade =“A”;打破;

    • 一旦达到89的情况,你重复与100到90相同的逻辑

    • 泡沫,冲洗,重复,直到60

    • 将Fs作为默认情况处理。

这将是非常长的,非常愚蠢(如蛮力)并且非常讨厌写作,以及一个出色的教学工具,可以解释为什么如果你可以提供帮助,你再也不想再写下愚蠢的代码了。

  • 更优雅的解决方案(在此处插入适当的星球大战报价

    • 您对“A”的相应对象之间的共同点是什么?

    是的,事实是,除了100之外,它们都是从9开始的2-diit#。

    那么,要在1个案例陈述中处理它们,那么为90和99之间的所有#s打开一些给你“9”的值是不是很好?

    我希望你马上知道答案......提示下面......

    是的,只需将整数除以10!

    因此,您需要将数字等级切换为10, 情况为10,9,8,7,6,并默认映射到F。

希望这能够为您提供足够的理由来提出可行的解决方案,同时展示分析如何发挥作用。

答案 1 :(得分:3)

我尽可能彻底地评论了这一点。希望你能够跟随。由于这不是一个家庭作业问题,我发布解决方案没有问题。有时你只需要看到代码“得到它”,所以就在这里。如果您对我写的内容有任何疑问,请发表评论,我会澄清答案。

public static String getGrade(int numberGrade) {
    // There are two parts of the number grade that you really 
    // care about. The first is the quotient after division 
    // by 10. The second is the remainder after division by 
    // 10. The quotient will tell you where it is an A, B, C
    // D, or F. The remainder will tell you whether it should 
    // have a +, -, or nothing following the letter.
    // 
    // Let's take the grade 73 as an example. The quotient would 
    // be 7, with a remainder of 3. Because it has a quotient of 
    // 7, you know it's a C. Because of the 3, you know it should 
    // have a minus sign (-) after it.
    //
    // Once you know the pattern, you can pretty easily apply 
    // a switch statement to it and produce a letter grade.

    // Variables for the quotient and remainder, described above
    int quotient = numberGrade / 10;
    int remainder = numberGrade % 10;

    // This will hold the final letter grade
    String letterGrade;

    switch (quotient) {
        case 10:
            // The student got a 100%, so just return A+
            return "A+";
        case 9:
            // 90-99 is an A
            letterGrade = "A"; break;
        case 8:
            // 80-89 is a B
            letterGrade = "B"; break;
        case 7:
            // 70-79 is a C
            letterGrade = "C"; break;
        case 6:
            // 60-69 is a D
            letterGrade = "D"; break;
        default:
            // Anything 59 or below is an F
            return "F";
    }

    switch (remainder) {
        // For example, 70-73 are C-
        case 0: case 1: case 2: case 3:
            letterGrade += "-"; break;
        // Likewise, 77-79 are C+
        case 7: case 8: case 9:
            letterGrade += "+"; break;
        // Everything else just falls through, no + or - needed
    }

    // You are left with a letter grade consisting of 
    // an A, B, C, D or F, and a plus or minus where 
    // it is appropriate.
    return letterGrade;
}

这是一个非常简单的演示方法:

for (int i = 100; i >= 0; i--) {
    System.out.println(i + " = " + getGrade(i));
}

它将打印以下内容:

100 = A+
 99 = A+
 98 = A+
 97 = A+
 96 = A
 95 = A
 94 = A
 93 = A-
 92 = A-
 91 = A-
 90 = A-
 89 = B+
 88 = B+
 87 = B+
 86 = B

答案 2 :(得分:1)

switch语句不接受条件值,即它不会查找像true这样的falseinputGrade >= 70;答案,而是查找项目 {{1 n switch( n中的等于) x } case x

此外,切换案例以冒号(:)结束,而不是半结尾。

有关使用特定Java示例的switch语句的一般说明,请参阅this link

答案 3 :(得分:1)

这是关于如何做到这一点的另一个提示。

如果整数将等级除以10会怎样?

答案 4 :(得分:1)

Switch语句仅适用于与给定案例匹配的值(以及默认值)。 使用switch语句编写它的唯一方法是为每个可能的分数设置一个案例。

你会这样做:

switch (score)
{
    case 0:
    case 1:
    ...
    case 80:
    case 81:         
    ...
    case 89:
      return "B";
    case 90:
    ...
    case 100:
      return "A";
      break;
}

OR

您可以通过先除以10将其减少为11个可能案例的列表。

那会让你:

switch (score / 10)
{
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
       return "F";
    case 5:
       return "E";
    case 6:
       return "D";
    case 7:
       return "C";
    case 8:
       return "B";
    case 9:
    case 10:
       return "A";
}

或类似的东西(当然这假设您的成绩对应于50 + = E,90 + = A等)。

答案 5 :(得分:0)

这是一个起点:作为整数的'A'字符的值为65.如果将值66转换为字符,您认为会发生什么?

答案 6 :(得分:0)

进行此修正

  double grade; // i think you mispelled it inputGrade

   case 1: grade = 90; // inputGrade >= 90 is an expression and is not valid
       break;

答案 7 :(得分:0)

您是否已了解Enums了吗?我的建议是考虑枚举如何帮助你得到答案。对不起,我不能在不破坏你的时刻的情况下给你任何帮助。

答案 8 :(得分:0)

我在代码中没有看到您将返回一封信的任何地方。

你可能想用英语写一下,看看你错过了什么。

例如: 用户输入数字等级 数字等级转换为字母等级 打印出数字和字母等级。

然后,写出主要的难点部分,第2部分。 可能的成绩是...... 可能的输入范围是...... 返回成绩

如果你把它写得更清楚,非常一步一步,因为计算机将如何处理它,那么你应该看看如何做到这一点。

假装你向二年级学生解释如何做到这一点,它必须是非常基本的指示。

答案 9 :(得分:0)

首先,如果您的功能是将等级作为整数并返回字母等级,为什么它的返回类型为double

在处理完之后,这里有一个提示:

等级范围从0到100,因此在您的switch语句中处理101个案例。如果你愿意,你可以写出所有101个案例。但是,您能想出一种减少案件数量的方法吗? (大提示:所有等级边界都是10的倍数)

答案 10 :(得分:0)

我很无聊,想出了这个。我知道它也不使用switch语句,但是anywho:

    private string GetGrade(int grade)
    {
        return ((char)((int)(Math.Max((Math.Min(10 - (grade / 10) + 64, 69)), 65))))
               .ToString().Replace("E", "F");
    }

我只是想看看我是否可以使用字符代码。可能还有一个更短的路,但哦,哦,哦,对不起,这是C#。

答案 11 :(得分:-1)

这个怎么样:

static int[]     SCORES =
    { 90, 80, 70, 60, 0 };  

static String[]  GRADES =
    { "A", "B", "C", "D", "F" };  

String letterGrade(int pct)
{
    for (int i = 0;  i < SCORES.length;  i++)
        if (pct >= SCORES[i])
            return GRADES[i];
}

这假设pct为正。它使用单个if语句,因此我不确定这是否有资格作为有效解决方案。