这些 switch 语句有哪些替代方案?

2024-03-23

刚刚制作了这个极其简单的 GPA 计算器,想知道如何使用循环来避免大量的 switch 语句?我对 Java 很陌生,只是寻求一些建议,非常感谢任何其他改进程序的方法。预先感谢各位!

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)如下

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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这些 switch 语句有哪些替代方案? 的相关文章

随机推荐

  • 对象 scalatest 不是包 org 的成员

    我想在 scalatest 中为我的玩具项目编写一些测试 当我使用sbt我通过安装了scalatestlibraryDependencies org scalatest scalatest 2 0 M5 test 在我的项目根目录中buil
  • “foldp”是否违反了 FP 的不可变状态原则?

    我正在学习 Elm七周内增加七种语言 http pragprog com book 7lang seven more languages in seven weeks 下面的例子让我很困惑 import Keyboard main lift
  • vim 中嵌入 awk 语法高亮

    我有一个语法文件 用于突出显示 bash 脚本中嵌入的 awk syn include AWKScript syntax awk vim syn region AWKScriptCode matchgroup AWKCommand star
  • PHPMailer 不发送 CC 或 BCC

    我已经测试以下代码几个小时了 该电子邮件将发送到通过以下方式添加的地址 mail gt AddAddress 在收到的电子邮件中注明了抄送 但抄送人没有收到电子邮件 我到处找过 但找不到解决办法来解释为什么会发生这种情况 我已经运行了测试
  • 获取 iPhone 上已安装应用程序的列表

    有没有办法 某些 API 来获取 iPhone 设备上已安装应用程序的列表 在搜索类似问题时 我发现了一些与url registration 但我认为必须有一些 API 来执行此操作 因为我不想对应用程序执行任何操作 我只想要列表 不 应用
  • 子域名指向同一IIS中的不同网站

    我有一个 IIS 服务器 运行一个默认网站 一个在 LandingPage 路径中运行的 React 应用程序以及一个由 api 中的 React 应用程序使用的 API 所以基本上我有 localhost 80 gt 默认 MVC 网站
  • C++ 类使用未定义类型

    我有一个我制作的类 我在类上方的线程中使用它 即使我在顶部做了一个类的原型 它仍然会抛出这些错误 错误 C2027 使用未定义类型 foo class foo DWORD WINAPI demo LPVOID param foo a cla
  • 如何在 React Native 中获取“打开前的键盘高度”?

    环境 React Native 0 60 4 Problem 我正在开发聊天应用程序 聊天有表情符号选择器 表情符号选择器必须与键盘具有相同的高度 我需要在键盘打开之前获取键盘的高度 我尝试使用键盘侦听器 但它们在打开后给出高度 我的最终目
  • 通过 Javascript 修改第 n 个子级

    是否可以使用纯js动态修改css nth child属性 tile nth child 10n 1 clear both 例如 像这样使用 js 添加 正如Pariket Thakur所说 你可以使用document querySelect
  • Spring Data (Spring Boot) 和 Joda Time 字段映射的问题

    我有一些带有 Joda DateTime 字段的实体 当尝试启动应用程序时 我收到以下错误 org springframework beans factory BeanCreationException Error creating bea
  • Hibernate Criteria 按子记录计数排序

    我有两个类 新闻和评论 它们之间具有一对多关联 我正在使用 Hibernate Criteria 从数据库中获取新闻 我希望我的新闻按照评论数排序 session createCriteria News class n criteria c
  • sql select语句给出列错误

    当我使用 SELECT order id from order where order id U687678601 我收到错误 错误 1054 未知列 where 子句中的 U687678601 但是当我输入时 SELECT order i
  • 是否有一个包含所有 Bootstrap 元素的巨大“资产页面”,我可以重新设置样式? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 http twitter github com bootstrap base css html htt
  • 在android的子目录中创建文件

    是否可以使用android中的openFileOutput方法在 data data packagename files 目录下创建的子目录中创建文件 即 data data packagename files 目录中有一个名为 text
  • Kohana——命令行

    我正在尝试在我的 Web 应用程序中 假分叉 一个进程 通过 SMTP 发送电子邮件 并且该应用程序是基于 Kohana 构建的 command test email exec php index php command gt dev nu
  • django-orm 不区分大小写的顺序

    我知道 我可以从 DJango ORM 运行不区分大小写的搜索 喜欢 User objects filter first name contains jake User objects filter first name contains
  • Android Compose 设置视图高度(以像素为单位而不是 dp)

    我想以像素而不是 dp 为单位设置视图高度 Box modifier Modifier height 100 dp 在此示例中 框的高度设置为 100 dp 并且修改器函数仅接受 dp 如何设置 Box 的高度 以像素为单位 Kilian
  • 在 Swift 中链接多个异步函数

    我正在尝试编写一系列函数 在要求用户确认某些内容之前验证用户的信息 想象一个购物应用程序 我首先必须检查用户是否添加了卡 然后我必须检查他们是否有足够的余额 然后我可以要求他们确认付款 我可以编写异步方法来检查卡 例如 func check
  • 使用 Javascript 生成高质量 PDF (jspdf+html2canvas)

    我一直在尝试通过单击页面上的按钮从 HTML 页面转换并生成 PDF 该按钮会使用两个流行的插件自动生成并强制下载页面的 PDF JSPDF HTML2Canvas 到目前为止 一切正常 但生成的 PDF 总是模糊且质量不高 导入 js 文
  • 这些 switch 语句有哪些替代方案?

    刚刚制作了这个极其简单的 GPA 计算器 想知道如何使用循环来避免大量的 switch 语句 我对 Java 很陌生 只是寻求一些建议 非常感谢任何其他改进程序的方法 预先感谢各位 package helloPackage import j