GPA计算器帮助

时间:2017-03-17 23:27:33

标签: java

您好,我想知道我是否可以获得GPA计算器的帮助。

它需要做的是:

  1. 输入内容包括一系列术语,例如学期。

  2. 每个学期的录取内容包括该学期内所修课程的成绩和学分。

  3. 对于每个术语,用户将键入一个表示课程数的整数 在该期限内采取。
  4. 每个课程由字母字母等级和按顺序的int数量指定,用空格分隔。 5.如果用户输入-1表示一个学期的课程数量,那么该程序必须打印最终的总体摘要然后终止。
  5. 请勿提示任何输入。因此,在BlueJ中运行程序后,键入Ctrl-T以强制弹出终端窗口。
  6. 与往常一样,请遵循Sample runs部分中描述的输入/输出格式。
  7. 以下显示的是我收到的错误消息和我的代码,感谢您提前获得的任何帮助或我可以尝试的提示。

    终端窗口和错误消息: Terminal

    import java.util.Scanner;
    /*
    * 
    * 
    */
    public class Prog2 { 
    
      public static void main(String args[]) {
    
        Scanner numberInput = new Scanner(System.in);
        int numberofClasses = numberInput.nextInt();
        Scanner input = new Scanner(System.in);
        String [] grade = new String[5];
        int [] credit = new int [5];
        double totalCredit = 0.0;
        double realGrade = 0.0;
        double result = 0.0;
    
        while (numberofClasses > 0) 
        {
            for (int x = 0; x < numberofClasses; x++ )
            { 
                grade[x] = input.next();
    
                credit[x] = input.nextInt();
    
            }
            for(int x=0;x < numberofClasses; x++ ){
                if(grade[x].equals("A+")){
                    realGrade=4.0;              
                }
                else if(grade[x].equals("A")){
                    realGrade=4.0;
                }
                else if(grade[x].equals("A-")){
                    realGrade=3.67;         
                }
                else if(grade[x].equals("B+")){
                    realGrade=3.33;         
                }
                else if(grade[x].equals("B")){
                    realGrade=3.00;         
                }
                else if(grade[x].equals("B-")){
                    realGrade=2.67;         
                }
                else if(grade[x].equals("C+")){
                    realGrade=2.33;         
                }
                else if(grade[x].equals("C")){
                    realGrade=2.00;         
                }
                else if(grade[x].equals("C-")){
                    realGrade=1.33;         
                }
    
                result = result+realGrade*credit[x];
                totalCredit=totalCredit+credit[x];
            }
            System.out.println("Summary for term:");
            System.out.println("----------------------------------");
            System.out.println("Term total grade points: " + result);
            System.out.println("Term total credits:" + totalCredit);
            System.out.println("GPA:"+result/totalCredit);
    
    
        }
            // This block is getting used later please ignore
            System.out.println("Final Summary:");
            System.out.println("----------------------------------");
            System.out.println(" Overall terms");
            System.out.println(" Total grade points: " + result);// this needs to be all );
            System.out.println(" Total credits" + totalCredit);//This needs to be all );
            System.out.println("Cumulative GPA:"+result/totalCredit);  
    
      }
    }
    

2 个答案:

答案 0 :(得分:0)

当while循环结束时,numberofClasses仍然包含第一次启动while循环之前输入的值。具体来说,输出行后:

GPA=3.0588...

你点击循环结束,然后返回:

while (numberofClasses > 0)

这是真的。下一个&#34; 3&#34;你输入的内容并没有进入numberofClasses,而是由

选中
grade[x] = input.next();

然后&#34; A&#34;

credit[x] = input.nextInt();

引发异常,因为它不是整数。

您需要做的就是在while循环结束时再次询问类的数量:

    System.out.println("GPA:"+result/totalCredit);
    numberofClasses = numberInput.nextInt();
}

输出:

5
A 3
B 2
C 4
A 5
C 3
Summary for term:
----------------------------------
Term total grade points: 52.0
Term total credits:17.0
GPA:3.0588235294117645
3
A 3
B 5
C 1
Summary for term:
----------------------------------
Term total grade points: 81.0
Term total credits:26.0
GPA:3.1153846153846154

答案 1 :(得分:0)

我建议您查看您的编译器或IDE是否具有“调试”功能。这是一个非常有用的工具,让您可以看到您的程序如何通过您的代码

只是小费......

当您要求输入时,首先打印您要求的内容。当我启动你的程序时,我不知道该怎么做。在提示输入该号码之前,请尝试添加System.out.println("input number of classes you took");

这是错的。 (如果你先打印出你要求的东西,那就更明显了。)

在您的计划显示统计数据后,您输入5.但是我相信,您的计划实际上仍然在第22行grade[x] = input.next();上。

当您输入5时,您的扫描仪正在收到一封信。并抛出异常。

你需要考虑如何逃避这个循环。 while (numberofClasses > 0)或许使用if语句?否则你的程序会永远循环,永远不会要求新的类号