荒谬地使用switch语句

时间:2013-02-13 05:47:55

标签: java switch-statement

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

  

在switch语句中包含一个将显示礼貌的案例   如果用户输入任何小于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的每个整数。这似乎是对开关陈述的荒谬使用,我无法想象为什么大学教授会教它,除了说明 DRY 原则。

还有更好的方法仍然使用switch语句,但是不能从100-0输入每个int吗?

4 个答案:

答案 0 :(得分:1)

您总是可以为切换表达式添加一些小的复杂性,以使案例更简单;这会计算90-100 as 1080-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 = "";
}

答案 1 :(得分: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);
}

答案 2 :(得分:0)

是的,你不想在地狱中实际使用switch语句。但你提出的方式是关于我能想到的最佳方式。

我会默认为错误情况,因为那可能是任何小于0或大于100的整数。在0到100之间,至少你有一定数量的情况(尽管你必须重复“F”案几次)。

答案 3 :(得分: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);
         }
      }
}

布莱什。