这些switch语句有哪些替代方法? [英] What alternatives are there to these switch statements?

查看:131
本文介绍了这些switch语句有哪些替代方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

只是鞭打了这个非常简单的GPA计算器,想知道如何使用循环来避免switch语句的巨大块?我对Java还是很陌生,只想寻求一些建议,就可以通过其他任何方式来改进该程序.预先感谢,伙计们!

Just whipped up this extremely simple GPA calculator, wondering how I would use a loop to avoid the huge blocks of switch statements? I am very new to Java and just looking for some advice, any other ways to improve the program are greatly appreciated. Thanks in advance, guys!

package helloPackage;
import javax.swing.JOptionPane;

public class GradePointAverage {

public static void main(String[] args) {
    System.out.println("Welcome to the GPA calculator! Please enter your GPA into the popup window to find your GPA.");

    String firstClassInput = JOptionPane.showInputDialog(null,"Please enter your grade for your first class: (A+, A, A-, B+, etc.)");
    String firstClass = firstClassInput.toUpperCase();
    String secondClassInput = JOptionPane.showInputDialog(null,"Please enter your grade for your second class: (A+, A, A-, B+, etc.)");
    String secondClass = secondClassInput.toUpperCase();
    String thirdClassInput = JOptionPane.showInputDialog(null,"Please enter your grade for your third class: (A+, A, A-, B+, etc.)");
    String thirdClass = thirdClassInput.toUpperCase();
    String fourthClassInput = JOptionPane.showInputDialog(null,"Please enter your grade for your fourth class: (A+, A, A-, B+, etc.)");
    String fourthClass = fourthClassInput.toUpperCase();
    String fifthClassInput = JOptionPane.showInputDialog(null,"Please enter your grade for your fifth class: (A+, A, A-, B+, etc.)");
    String fifthClass = fifthClassInput.toUpperCase();

    double firstGrade = 0.0;
    double secondGrade = 0.0;
    double thirdGrade = 0.0;
    double fourthGrade = 0.0;
    double fifthGrade = 0.0;

    switch (firstClass){
    case "A+": firstGrade = 4.33;
        break;
    case "A": firstGrade = 4.00;
        break;
    case "A-": firstGrade = 3.67;
        break;
    case "B+": firstGrade = 3.33;
        break;
    case "B": firstGrade = 3.00;
        break;
    case "B-": firstGrade = 2.67;
        break;
    case "C+": firstGrade = 2.33;
        break;
    case "C": firstGrade = 2.00;
        break;
    case "C-": firstGrade = 1.67;
        break;
    case "D+": firstGrade = 1.33;
        break;
    case "D": firstGrade = 1.00;
        break;
    case "D-": firstGrade = .67;
        break;
    case "F": firstGrade = 0.0;
        break;
    }

    switch (secondClass){
    case "A+": secondGrade = 4.33;
        break;
    case "A": secondGrade = 4.00;
        break;
    case "A-": secondGrade = 3.67;
        break;
    case "B+": secondGrade = 3.33;
        break;
    case "B": secondGrade = 3.00;
        break;
    case "B-": secondGrade = 2.67;
        break;
    case "C+": secondGrade = 2.33;
        break;
    case "C": secondGrade = 2.00;
        break;
    case "C-": secondGrade = 1.67;
        break;
    case "D+": secondGrade = 1.33;
        break;
    case "D": secondGrade = 1.00;
        break;
    case "D-": secondGrade = .67;
        break;
    case "F": secondGrade = 0.0;
        break;
    }
    switch (thirdClass){
    case "A+": thirdGrade = 4.33;
        break;
    case "A": thirdGrade = 4.00;
        break;
    case "A-": thirdGrade = 3.67;
        break;
    case "B+": thirdGrade = 3.33;
        break;
    case "B": thirdGrade = 3.00;
        break;
    case "B-": thirdGrade = 2.67;
        break;
    case "C+": thirdGrade = 2.33;
        break;
    case "C": thirdGrade = 2.00;
        break;
    case "C-": thirdGrade = 1.67;
        break;
    case "D+": thirdGrade = 1.33;
        break;
    case "D": thirdGrade = 1.00;
        break;
    case "D-": thirdGrade = .67;
        break;
    case "F": thirdGrade = 0.0;
        break;
    }
    switch (fourthClass){
    case "A+": fourthGrade = 4.33;
        break;
    case "A": fourthGrade = 4.00;
        break;
    case "A-": fourthGrade = 3.67;
        break;
    case "B+": fourthGrade = 3.33;
        break;
    case "B": fourthGrade = 3.00;
        break;
    case "B-": fourthGrade = 2.67;
        break;
    case "C+": fourthGrade = 2.33;
        break;
    case "C": fourthGrade = 2.00;
        break;
    case "C-": fourthGrade = 1.67;
        break;
    case "D+": fourthGrade = 1.33;
        break;
    case "D": fourthGrade = 1.00;
        break;
    case "D-": fourthGrade = .67;
        break;
    case "F": fourthGrade = 0.0;
        break;
    }
    switch (fifthClass){
    case "A+": fifthGrade = 4.33;
        break;
    case "A": fifthGrade = 4.00;
        break;
    case "A-": fifthGrade = 3.67;
        break;
    case "B+": fifthGrade = 3.33;
        break;
    case "B": fifthGrade = 3.00;
        break;
    case "B-": fifthGrade = 2.67;
        break;
    case "C+": fifthGrade = 2.33;
        break;
    case "C": fifthGrade = 2.00;
        break;
    case "C-": fifthGrade = 1.67;
        break;
    case "D+": fifthGrade = 1.33;
        break;
    case "D": fifthGrade = 1.00;
        break;
    case "D-": fifthGrade = .67;
        break;
    case "F": fifthGrade = 0.0;
        break;
    }

    double total = firstGrade + secondGrade + thirdGrade + fourthGrade + fifthGrade;  
    double GPA = total / 5;
    System.out.println("Your GPA is: " + GPA);
}

}

推荐答案

使用类似double getGrade(String)的方法,如下所示

Use a method like double getGrade(String) as follows

double firstGrade = getGrade(firstClass);
double secondGrade = getGrade(secondClass);
double thirdGrade = getGrade(thirdClass);
double fourthGrade = getGrade(fourthClass);
double fifthGrade = getGrade(fifthClass);

// Use your switch statement.... no break(s) because we return.
public static double getGrade(String grade) {
  switch (grade){
  case "A+": return 4.33;
  case "A": return 4.00;
  case "A-": return 3.67;
  case "B+": return 3.33;
  case "B": return 3.00;
  case "B-": return 2.67;
  case "C+": return 2.33;
  case "C": return 2.00;
  case "C-": return 1.67;
  case "D+": return 1.33;
  case "D": return 1.00;
  case "D-": return .67;
  }
  // F
  return 0.0;
}

这篇关于这些switch语句有哪些替代方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆