【问题标题】:GPA calculator assistanceGPA计算器帮助
【发布时间】:2017-03-18 10:50:22
【问题描述】:

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

它需要做的是:

  1. 输入将由一系列术语组成,例如学期。

  2. 每个学期的输入将包括该学期所学课程的成绩和学分。

  3. 对于每个学期,用户将输入一个表示课程数量的整数 在该期限内拍摄。
  4. 每门课程都由一个字符串字母等级和一个 int 学分指定,按此顺序,用空格分隔。 5. 如果用户输入 -1 作为学期所学课程的数量,则程序必须打印最终的总体摘要,然后终止。
  5. 不要提示任何输入。因此,在 BlueJ 中运行程序后,键入 Ctrl-T 以强制弹出终端窗口。
  6. 与往常一样,遵循示例运行部分中描述的输入/输出格式。

下面显示的是我收到的错误消息和我拥有的代码,感谢您提前提供的任何帮助或我可以尝试的提示。

终端窗口和错误信息:

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);  

  }
}

【问题讨论】:

  • PS:为你的锻炼准备一些化妆品:你的 println 总结中有一些空间。始终没有前导空格 ("Term 或前导空格 (" Total。并且总是在: " 之后有空格或没有:"

标签: java


【解决方案1】:

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

GPA=3.0588...

你到达循环的结尾,然后返回:

while (numberofClasses > 0)

这是真的。您输入的下一个“3”不会进入 numberofClasses,而是被

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

【讨论】:

  • 如果您不介意多提供一点帮助,我还有一个问题。当我第二次通过循环并打印出 GPA、学分等...有没有办法我只能打印出该循环中使用的数据而不是输入的累积总数?
  • 进入下一个循环时将变量重置为零
  • 感谢两位的帮助!
  • 在思考这些问题时,你可以先从纸笔开始,写下你想先解决的问题的逻辑。想出 2 或 3 种方法来解决问题,选择一种,然后启动 PC 并考虑编写代码。此时,您可以将代码的功能与铅笔/纸规定的功能进行比较,这样您就可以更好地进行调试。
【解决方案2】:

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

只是一个提示...

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

这是错误的。 (如果您先打印您要求的内容,这会更明显)。

在您的程序显示统计信息后,您输入 5。但您的程序实际上仍在这一行 grade[x] = input.next(); 我相信在第 22 行。

当您输入 5 时,您的扫描仪正在等待一个字母。并抛出异常。

您需要考虑如何在此处逃脱此循环。 while (numberofClasses &gt; 0) 也许使用 if 语句?否则你的程序将永远循环,永远不会要求新的班级编号

【讨论】:

  • 程序的参数是专门为了不提示用户,否则我会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
相关资源
最近更新 更多