0

我正在和我的朋友一起做一些 Java 作业。讲师希望他编写一个 Java 程序,将整数输入转换为数字等级。100-90 = A 等等。唯一的问题是他必须使用 switch 语句。他还必须:

在你的 switch 语句中包含一个 case,如果用户输入任何小于 0 或大于 100 的数字,它将显示礼貌的错误消息。"

本来我也是这么想的...

import java.util.Scanner;
public class grade
{
    public static void main(String[] args)
    {
        int ng;//number grade
        String lg = "";//letter grade

        System.out.println("enter grade");

        Scanner in = new Scanner(System.in);

        ng = in.nextInt();

        switch (ng/10) 
        {
            case 10: 
            case 9:     
                lg = "A";  
                break;
            case 8:
                lg = "B";  
            break;
            case 7:     
                lg = "C";  
            break;
            case 6:     
                lg = "D";  
            break;
            default:     
                lg = "F";  
            break;
        }   
         System.out.println("You got an " + lg);
      }
}

这并不完美,因为它允许超过 100 和低于 0 的值,但我试图避免输入 100-0 中的每个整数。这似乎是对 switch 语句的荒谬使用,我无法想象为什么大学教授会教它,除了说明DRY原则。

有没有更好的方法仍然使用 switch 语句,但不会从 100-0 键入每个 int?

4

4 回答 4

2

你总是可以在你的 switch 表达式中添加一些小的复杂性,以使案例更简单;这将计算90-100 as 10,80-89 as 9等等101 and above will become 11 and above, 和每个输入below 0 will become 0 or negative,因此它们将属于默认值;

switch ((ng-ng/100+10)/10)
{
    case 10:
        lg = "A";
        break;
    case 9:
        lg = "B";
        break;
    case 8:
        lg = "C";
        break;
    case 7:
        lg = "D";
        break;
    case 6: case 5: case 4: 
    case 3: case 2: case 1:
        lg = "F";
        break;
    default:
        System.out.println("Polite Error");
        lg = "";
}
于 2013-02-13T06:48:54.040 回答
0

是的,在地狱里,你绝对不想为此大声笑使用 switch 语句。但是你建议的方式是我能想到的最好的方式。

不过,我会为错误场景设置默认值,因为它可以是小于 0 或大于 100 的任何整数。在 0 到 100 之间,至少你有有限数量的情况(尽管你必须重复“F”案例多次)。

于 2013-02-13T05:53:14.693 回答
0

很好地使用整数除法;)

好吧,这段代码让我很尴尬,让我哭了。但在这里,只使用 switch 语句。

import java.util.Scanner;
public class grade
{
    public static void main(String[] args)
    {
        int ng;//number grade
        String lg = "";//letter grade
        boolean error = false;

        System.out.println("enter grade");

        Scanner in = new Scanner(System.in);

        ng = in.nextInt();

        switch (ng/10) 
        {
            case 10: 
                switch (ng)
                {
                     case 100:
                         lg = "A";
                         break;
                     default:
                         error = false;
                         break;
                }
                break;
            case 9:     
                lg = "A";  
                break;
            case 8:
                lg = "B";  
            break;
            case 7:     
                lg = "C";  
            break;
            case 6:     
                lg = "D";  
            break;
            case 5:     
            case 4:     
            case 3:     
            case 2:     
            case 1:     
            case 0:     
                lg = "F";  
                break;
            default:     
                error = true;
            break;
        }   

         if (error) {
           System.out.println("Sorry, the grade must be between 0 and 100");
         } else {
           System.out.println("You got an " + lg);
         }
      }
}

布莱赫。

于 2013-02-13T05:54:07.147 回答
0

怎么样:

String lg = null;
switch (ng/10) 
{
    case 10:
        if (ng > 100) {
            // polite error
            break;
        }
    case 9:
        lg = "A"
        break;
    case 8:
        lg = "B";  
        break;
    case 7:     
        lg = "C";  
        break;
    case 6:
        lg = "D";
        break;
    default:
         if (ng < 0) {
             // polite error
             break;
         }
         lg = "F";
         break;
}

之后,switch您必须检查是否设置了成绩。

if (lg == null) {
    System.out.println("The input score was > 100 or < 0");
} else {
    System.out.println("You got an " + lg);
}
于 2013-02-13T05:51:17.203 回答