这些 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 语句有哪些替代方案? 的相关文章

  • 使用选项卡式活动中的捆绑包将值从活动传递到片段

    我是一个java文盲 但仍在尝试开发一个供我个人使用的应用程序 我从 android studio 的 Tabbed Activity 开始 除了 MainActivity 中的一个片段和一个包之外 大部分没有改变 这是我的代码 主要活动
  • 如何使用 SLF4J 和 Log4j2 记录 FATAL(或任何自定义日志级别)

    我有那些具体的要求 需要能够登录FATAL level 需要使用SLF4J 需要使用Log4j2 现在 这是我的执行 final Logger logger LoggerFactory getLogger HelloWorld class
  • Hibernate OneToMany 关系是 PersistentBag 而不是 List

    我正在 javafx 中开发一个应用程序 它通过 RMI 与 EAR 连接 该 EAR 连接到 SQLServer DB 并使用 hibernate 映射 POJOS 这些 POJOS 包含双向 OneToMany 和 ManyToOne
  • 使用 Java 编程式 HTML 文档生成

    有谁知道如何在 Java 中以编程方式生成 HTMLDocument 对象 而不需要在外部生成字符串 然后使用 HTMLEditorKit read 来解析它 我问的两个原因 首先 我的 HTML 生成例程需要非常快 并且我认为将字符串解析
  • 从 eclipse 运行时 java.io.FileNotFoundException: (没有这样的文件或目录)

    我正在写入文件并想要控制台输出 TODO Create a game engine and call the runGame method public static void main String args throws Excepti
  • 在气球内显示带有照片的多个地标的最佳做法是什么?

    我有一个项目如下 从手机上拍摄几张照片 将照片保存在网络系统中 然后将照片显示在其中的谷歌地球上 我读过很多文章 但它们都使用 fetchKml 我读过的一篇好文章是使用 php 但使用 fetchKml 我不知道是否可以使用 parseK
  • 如何在具有动态列的表中插入值 Jdbc/Mysql

    我想在具有动态列的表中添加值 我设法创建一个包含动态列的表 但我不知道如何插入数据 Create Table sql CREATE TABLE MyDB myTable level INTEGER 255 int columnNumber
  • 如何模拟一个方面

    我目前正在使用aspectj 开发一些监控工具 因为这个工具应该是技术独立的 尽可能 所以我没有使用 Spring 进行注入 但我希望我的方面能够经过单元测试 方面示例 Aspect public class ClassLoadAspect
  • 如何在 Ruby 中使用循环输出所有可能的组合?

    我刚刚开始学习编程 并试图编写一个输出所有可能组合的函数 到目前为止 我已经能够找到尺寸 2 的所有可能组合 但我不确定如何使代码保持开放式以处理更大尺寸的组合 某种递归会有用吗 我知道我可以使用内置的组合方法 但我只是想弄清楚如何从头开始
  • java 属性文件作为枚举

    是否可以将属性文件转换为枚举 我有一个包含很多设置的属性文件 例如 equipment height equipment widht equipment depth and many more like this and not all a
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • @TestPropertySource 不适用于 Spring 1.2.6 中使用 AnnotationConfigContextLoader 的 JUnit 测试

    似乎我在 Spring 4 1 17 中使用 Spring Boot 1 2 6 RELEASE 所做的任何事情都不起作用 我只想访问应用程序属性并在必要时通过测试覆盖它们 无需使用 hack 手动注入 PropertySource 这不行
  • RMI 服务器:rmiregistry 或 LocateRegistry.createRegistry

    对于服务器端的RMI 我们需要启动吗rmiregistry程序 或者只是调用LocateRegistry createRegistry 如果两者都可以的话 各有什么优点和缺点 他们是同一件事 rmiregistry是一个单独的程序 您可以从
  • Mule/码头设置

    我有一个正在运行的 Mule 应用程序 我想在其上设置 Jetty 来响应 http 请求 以下配置
  • 将字符串中的字符向左移动

    我是 Stack Overflow 的新手 有一道编程课的实验室问题一直困扰着我 该问题要求我们将字符串 s 的元素向左移动 k 次 例如 如果输入是 Hello World 和3 它将输出 lo WorldHel 对于非常大的 k 值 它
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • JDK 7 的快速调试/调试构建

    我正在寻找 JDK 的调试 或者我猜他们称之为快速调试构建 以启用在运行时生成的打印程序集以及查找性能问题时所需的其他诊断 就目前情况而言 我似乎找不到可以直接使用的 现成的 快速调试构建二进制包 有人可以帮我提供下载链接 或者至少提供有关
  • Java的hashCode可以为不同的字符串产生相同的值吗?

    使用java的哈希码函数是否可以为不同的字符串提供相同的哈希码 或者如果可能的话 其可能性的 是多少 Java 哈希码是 32 位 它散列的可能字符串的数量是无限的 所以是的 会发生冲突 百分比是没有意义的 项目 字符串 的数量是无限的 而
  • Java泛型类型

    当我有一个界面时 public interface Foo

随机推荐

  • 对象 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