Java 如何避免GPA计算器中的垃圾值?

Java 如何避免GPA计算器中的垃圾值?,java,combobox,project,Java,Combobox,Project,我是编程新手。我正在学习java,正在做一个小项目,其中包括计算学生GPA 我的结果中有一个逻辑错误。用户第一次输入成绩时,结果是正确的。那他们就全是垃圾了。我试图在第一次之后清除我的变量,但当用户输入错误的等级并决定更改它时仍然存在问题。这也会导致垃圾结果 Course1 = new JTextField(); Course1.setText("Course 1"); Course1.setBounds(20, 237, 86, 20); contentPane.add

我是编程新手。我正在学习java,正在做一个小项目,其中包括计算学生GPA

我的结果中有一个逻辑错误。用户第一次输入成绩时,结果是正确的。那他们就全是垃圾了。我试图在第一次之后清除我的变量,但当用户输入错误的等级并决定更改它时仍然存在问题。这也会导致垃圾结果

Course1 = new JTextField();
    Course1.setText("Course 1");
    Course1.setBounds(20, 237, 86, 20);
    contentPane.add(Course1);
    Course1.setColumns(10);
Hours1 = new JComboBox();
    Hours1.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent event)
{

            if(event.getStateChange()==ItemEvent.SELECTED)
            {

                String h =(String) Hours1.getSelectedItem();
                currentHour=Integer.parseInt(h);
                totalHours+=currentHour;
            }
        }
    });
    Hours1.setModel(new DefaultComboBoxModel(new String[] {" ","2", "3", "4",              
            "5"}));
    Hours1.setBounds(135, 237, 39, 20);
    contentPane.add(Hours1);
Grade1 = new JComboBox();
    Grade1.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent event) {
            if(event.getStateChange()==ItemEvent.SELECTED)
            {
                String grade=(String)Grade1.getSelectedItem();
                switch(grade)
                {
                    case "A+": 
                        currentPoint=5*currentHour;

                        break;
                    case "A": 
                        currentPoint= 4.75 * currentHour;
                        break;
                    case "B+": 
                        currentPoint= 4.5 * currentHour;
                        break;
                    case "B": 
                        currentPoint= 4 * currentHour;
                        break;
                    case "C+": 
                        currentPoint= 3.5 * currentHour;
                        break;
                    case "C": 
                        currentPoint= 3 * currentHour;
                        break;
                    case "D+": 
                        currentPoint= 2.5 * currentHour;
                        break;
                    case "D": 
                        currentPoint= 2 * currentHour;
                        break;
                    case "F":
                        currentPoint= 1 * currentHour;
                        break;
                }
                myPoints=myPoints+currentPoint;
            }
        }
    });
    Grade1.setModel(new DefaultComboBoxModel(new String[] {" ","A+", "A", "B+",  
            "B", "C+", "C", "D+", "D", "F"}));
    Grade1.setBounds(204, 237, 47, 20);
    contentPane.add(Grade1);

我为每门课程都编写了同样的代码,这也让我感到困扰,因为我想要更高效的程序

我不确定我是否100%理解你的问题。但这是我的想法。您可能需要在“switch case”结构中设置一个“default”,以便在用户键入的不是他们的成绩时使用


顺便说一句,在粘贴的代码末尾有两个额外的大括号。我以为你刚把它贴错了。

什么是一年级?现在是什么时候?我的积分呢?你将它们初始化为什么?Grade1是我列表中的第一个组合框,currentHour是一个临时变量,用于存储课程的学分。我将其声明为实例变量,以便其他组合框将使用它。还有一个名为totalHours的变量来存储用户输入的总小时数,每次我都将currentHour的值添加到totalHours中。myPoints是一个用于存储已赢得分数总数的变量,它将除以最大可能分数,然后再乘以5,以从5中获得GPA。我建议您也添加代码的其余部分,因为了解代码流很重要。在声明中,您将myPoint设置为等于什么?没有。我认为默认情况下实例变量初始化为0,然后我们在方法中操作它们。请尝试在重新开始计算时将变量重新初始化为0。很抱歉,由于无法上载图像,因此缺少信息。实际上,学分和分数是组合框,用户只需选择。另外两个支架粘贴错误。它们包含itemStateChanged方法和匿名类(侦听器)