我不认为我的switch
语句对我的代码做了任何事情,我是java
的新手,所以我不确定如何在switch
语句中使用while loop
语句GPA
。我正在尝试输入每个成绩/学分,以便找到System.out.print
,但我为成绩添加了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);
}
,并且无论输入什么,它都表示值0。请帮忙!
{{1}}
}
答案 0 :(得分:1)
问题是您的switch语句正在检查grade
的值,但您的输入存储在inputGrade
中。前者永远不会从空字符串中重新分配,因此点数永远不会增加。
编辑:要扩展以下评论:
此外,您应该始终尝试将变量保持在本地。除了循环之外的聚合器(在这种情况下为totalXxx和yyyEntered)之外,没有必要。在这种情况下,它只会让你感到困惑,因为它掩盖了问题的根源。当switch
语句第一次命中时,它会检查空字符串。第二次,它检查第一个字符串。当你点击'q'时,它会中断,并跳过你的最后一个输入。如果这些输入变量是在循环内声明的,那就很明显了。
最后,当我在这里时,你的gpa计算中有错误。每个分数的分数应该将学分的权重视为积极的,而不是负的。就像是:
sum(grade * credits) / sum(credits)
如果你愿意,我可以发布固定代码,但由于我怀疑这是一个学术练习,如果你自己找到解决方案会更有益。
答案 1 :(得分:1)
您的switch语句使用grade
,似乎永远不会写入。它总是""
。
您获得了inputGrade
,但您没有写信给grade
。
因为它总是“”,所以你的开关总是得不到任何东西
答案 2 :(得分:0)
您要将每个年级追加到您的gradeEntered
gradeEntered += inputGrade.toUpperCase()+"\n"; // at a point this is something like A\nB\nC\nD\nE.... so it will not match anyway
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;
}
所以大部分时间都不符合你的任何情况。
你必须有一个单独的成绩字符,并在开关或第一次使用开关中使用它,然后将它附加到你的变量
答案 3 :(得分:-1)
您要在输入中添加换行符(“\ n”),(inputGrade.toUpperCase()+"\n";
),这样您的所有案例都无效。
也就是说,“A”不等于“A \ n”
我认为你不应该使用“gradeEntered”而是使用:
switch (inputGrade.toUpperCase())
特别是因为在多次运行循环之后,你的“gradeEntered”字符串将开始如下所示:“A \ nB \ nF \ nQ \ n”,这与你的所有情况相差甚远。
此外,打开字符串不是一个好习惯 - 它是java中的一个新的开发,并且不会被运行旧版本的java的计算机支持 - 虽然为了你自己的用途,如果编译器没有抱怨那么它很好。不过,最好养成切换字符或整数的习惯,因为大多数其他编程语言都不允许你打开字符串。