gpt4 book ai didi

java - 如何在 while 循环中正确使用 switch 语句

转载 作者:太空宇宙 更新时间:2023-11-04 07:19:26 25 4
gpt4 key购买 nike

我认为我的 switch 语句没有对我的代码执行任何操作,我是 java 新手,所以我不确定如何在 while 循环 中使用 switch 语句。我试图获取输入的每个成绩/学分,以便找到 GPA,但我为成绩添加了 System.out.print,它表示无论输入什么内容,它的值都是 0。请帮忙!

package exercises;

import java.text.DecimalFormat;

import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class GPA_Calculator {

public static void main(String[] args)
{
String greeting = "Hello, this program will calculate your GPA. You will be asked \n"+
"to enter your letter grade for each class, then you will be asked to enter \n"+
"the corresponding number of credits for that class. Once all the grades and credits\n"+
"have been entered, the program will display your GPA.";
JOptionPane.showMessageDialog(null,greeting,"Greeting - Introduction",1);

char gradeEntered;
String grade = "";
String creditEntered = "";
String inputGrade = "";
String inputCredit = "";
String enterGradePrompt = "Enter your letter grade (A, B, C, D, F)\n"+
"Enter Q to display your results\n\n";
String enterCreditPrompt = "Enter the credit hours for your course (0, 1, 2, 3, 4, 5, 6)\n"+
"Enter Q to display your results\n\n";

int points = 0, sum = 0, credits = 0, gradeCount = 0;

while(!inputGrade.toUpperCase().equals("Q"))
{
inputGrade = JOptionPane.showInputDialog(null,enterGradePrompt,"Enter grade",1);
gradeEntered = inputGrade.charAt(0);
grade += inputGrade.toUpperCase()+"\n";

inputCredit = JOptionPane.showInputDialog(null,enterCreditPrompt,"Enter grade",1);
creditEntered += inputCredit+"\n";
if(inputCredit.toUpperCase().equals("Q"))
continue;
credits = Integer.parseInt(inputCredit);
credits++;

switch (gradeEntered){
case 'A': points = 4;
break;
case 'B': points = 3;
break;
case 'C': points = 2;
break;
case 'D': points = 1;
break;
case 'F': points = 0;
break;
}
sum += gradeEntered;
gradeCount++;
}

// Prevents "Q" from being printed in results
grade = grade.substring(0,grade.length()-2);
creditEntered = creditEntered.substring(0,creditEntered.length()-2);

DecimalFormat df = new DecimalFormat("#.##");
double gpa = sum / gradeCount;

String results = "The courses you entered are:\n\n"+
"Grade "+"Hours \n"+
grade+" "+creditEntered+"\n"+
"Resulting in a GPA of "+df.format(gpa)+"\n\n"+
"This program will now terminate!";

JOptionPane.showMessageDialog(null, new JTextArea(results),
"results from the Invitation list generator",1);
}

}

最佳答案

问题在于您的 switch 语句正在检查 grade 的值,但您的输入存储在 inputGrade 中。前者永远不会从空字符串中重新分配,因此点永远不会增加。

编辑:扩展以下评论:

  • 不检查 while 或 do/while 循环中的条件。您在循环内检查它并中断,这很好,因为您可以创建一个无限循环并让中断终止它。但是,它不应该在循环条件中重复。
  • 您应该尽早检查该情况。如果用户输入“q”,则在循环内执行任何操作都是没有意义的(而且,之后您也不必尝试删除它的部分)。

此外,您应该始终尝试将变量尽可能保留在本地。除了循环之外的聚合器(本例中为totalXxx 和yyyEntered)之外,不需要任何东西。在这种情况下,它只会让您感到困惑,因为它掩盖了问题的根源。当 switch 语句第一次命中时,它会检查空字符串。第二次,它检查第一个字符串。当您点击“q”时,它会中断并跳过您最后的输入。如果这些输入变量是在循环内声明的,那将立即显而易见。

最后,当我在这里的时候,你的 GPA 计算出现了错误。每分的分数应将学分的权重视为正数,而不是负数。就像是:总和(成绩*学分)/总和(学分)

如果您愿意,我可以发布固定代码,但由于我怀疑这是一项学术练习,因此如果您自己找到解决方案会更有益。

关于java - 如何在 while 循环中正确使用 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19531148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com