2017-03-17 113 views
0

嗨,我想知道我是否可以得到一些GPA计算器的帮助。GPA计算器帮助

它所需要做的是:

  1. 的投入将包括术语的序列,例如,学期。

  2. 每学期的投入将包括该学期内所选课程的成绩和学分。

  3. 对于每个术语,用户将输入一个整数,该整数表示在该术语内所采用的课程数 。
  4. 每个课程由一个字符串字母等级和一个整数个学分指定,顺序以空格分隔。 5.如果用户输入-1来表示学期中所选课程的数量,那么程序必须打印最终的总体摘要,然后终止。
  5. 不要提示输入任何信息。因此,在BlueJ中运行程序后,请键入Ctrl-T以强制终端窗口弹出。
  6. 一如既往,请遵循“样品运行”部分中描述的输入/输出格式。

下面显示的是错误消息我得到和我的代码,感谢您对提前或提示我可以尝试任何援助。

终端窗口和错误消息: 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); 

    } 
} 
+0

PS:有些化妆品你的运动:你有一定的空间,以多你的println总结。总是没有前导空间'(“Term”或带前导空格'(“Total”。并且总是在':“后面或后面加空格':”' – muescha

回答

0

当while循环结束,numberofClasses仍然包含了while循环开始了第一次之前所输入的值。具体来说,你输出的行后:

GPA=3.0588... 

你打的循环结束,然后返回到:

while (numberofClasses > 0) 

这是真的。你进入不进入numberofClasses接下来的“3”,它是由

grade[x] = input.next(); 

那么“A”是由

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 
+0

我还有一个问题,如果你不介意帮助一点点更多当我再次通过循环并打印出GPA,信用等等......有没有办法我只能打印出该循环中使用的数据,而不是输入累计总数? – UnluckySurvivor

+0

重置变量当您进入下一个循环时,将其设为零 – muescha

+0

谢谢您的帮助! – UnluckySurvivor

0

我建议考虑是否你的编译器或IDE具有“调试”功能。这是一个非常有用的工具,并允许您监视您的程序如何去通过您的代码

只是一个提示...

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

这里是什么是错的。 (如果你打印出你要求的第一个,这会更明显)。

程序后显示的统计数据,你进入5然而,你的程序实际上仍然在第22行此行grade[x] = input.next();我相信。

当你进入5

,您的扫描仪在等信。并抛出异常。

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

+0

该程序的参数专门用于不提示用户,否则我会。 – UnluckySurvivor

+0

谢谢你的帮助! – UnluckySurvivor