如何创建带有开关案例陈述的成绩程序

问题描述 投票:0回答:1

我必须开发一个程序来用Java查找学生的成绩。我使用if else语句开发了它。

int mark=Integer.parseInt(t.getText);
if(mark>90)
T.setText("S");
else
if(mark>80)
T.setText("A");
else if(mark>70)
T.setText("B");
else if(mark>60)
T.setText("C");
else if(mark>50)
T.setText("D");
else if(mark>40)
T.setText("E");
else 
T.setText("failed");

如何使用switch case语句进行开发

java switch-statement
1个回答
0
投票

使此任务出现困难的原因是因为它似乎不合理,但在此特定用例中,实际上并非如此。这完全取决于您如何看待我认为您应该做的事情。

乍一看,用例正是您不想使用switch / case构造的地方,因为显而易见的原因是没人希望编写101 case语句,因为这种构造是基于在常量类型值上。您不能对其应用范围。

但是,如果您消除了对Range的需要而只需要处理单个常量值,该怎么办?您能想到一种方法吗?您需要做什么?

如果可以舍入提供的等级值到最接近的10的整数值怎么办?

由于您正在处理的是我认为在此特定用例中提供的整数值基本上从0到100,并且特定的字母等级从特定的10值整数开始:

0, 10, 20, and 30 for "Failed" ("F")
40 for "E"
50 for "D"
60 for "C"
70 for "B"
80 for "A"
90 and 100 for "S" 

反正是什么“ S”?不是满意吗?只是好奇。

是否提供了80、84或89的字母级别,字母等级都可以。因此,要将提供的成绩值用作switch / case构造的常量值,您需要担心的是通过舍入特定值将提供的成绩值转换为这些常量之一。为此,您可以使用以下公式:

// Convert The supplied string Grade value to integer.
int mark = Integer.parseInt("87");
// Now round it 'DOWN' to the nearest 10's whole value
int markConst = (mark - mark % 10);

System.out.println(markConst);

控制台输出将显示:80

现在您可以在switch / case构造中使用此值。整个过程看起来像这样:

String gradeValue = t.getText();

// Is a Integer value supplied and if it is, is it from 0 to 100 (inclusive)? 
if (!gradeValue.matches("\\d+") || 
        (Integer.parseInt(gradeValue) < 0 || Integer.parseInt(gradeValue) > 100)) {
    JOptionPane.showMessageDialog(null, "<html>Invalid Grade value supplied! ("
                            + gradeValue + ")<br> Grade must be a value from 0 "
                            + "to 100.<br>Try again...<html>", "Invalid Grade!", 
                            JOptionPane.WARNING_MESSAGE);
    return;  // *** or whatever your exit mechanism might be.
}
// Convert The supplied string Grade value to integer.
int mark = Integer.parseInt(gradeValue);

// Now round it 'DOWN' to the nearest 10's whole value
int markConst = (mark - mark % 10);

/* If for some reason you want to round 'UP' to the 
   nearest 10's whole value then use this formula:

   int markConst = (mark % 10 == 0 ? mark : (10 - mark % 10) + mark);
*/

String markGrade;
switch (markConst) {
    case 90: case 100:
        markGrade = "S";
        break;
    case 80:
        markGrade = "A";
        break;
    case 70:
        markGrade = "B";
        break;
    case 60:
        markGrade = "C";
        break;
    case 50:
        markGrade = "D";
        break;
    case 40:
        markGrade = "E";
        break;
    default:
        markGrade = "Failed";
}

T.setText(markGrade); 

上面的演示代码假定提供的成绩值将是整数类型的字符串表示形式。

© www.soinside.com 2019 - 2024. All rights reserved.