我正在尝试编写一个用于处理Java中的符号表的程序。我已经使用链表数据结构来表示我的符号表。链表(单独)具有一个键,与该键关联的值以及指向下一个点的指针。链接列表还向用户提供了在列表中插入新节点的功能。看来我对链表类的实现进展顺利,但是当我尝试编写一个主程序来测试它时,我遇到了一些问题。尽管我设法以某种方式处理了异常,但我的代码中还是存在逻辑错误。这是我编写的代码以及输出:

import java.util.Scanner;
public class Test_GPA {
public static void main(String[]args){

     // create symbol table of grades and values
    GPA<String, Double> grades = new GPA<String, Double>();
    grades.put("A",  4.00);
    grades.put("B",  3.00);
    grades.put("C",  2.00);
    grades.put("D",  1.00);
    grades.put("F",  0.00);
    grades.put("A+", 4.33);
    grades.put("B+", 3.33);
    grades.put("C+", 2.33);
    grades.put("A-", 3.67);
    grades.put("B-", 2.67);
   Scanner input = new Scanner(System.in);
   double numb =0; int i=0;
    double sum = 0.0;
   String grade;
   Double value;
   System.out.println("Please enter number of courses:");
   numb=input.nextInt();
   while(i<numb){
       System.out.println("Please enter the grade for course"+(i+1)+":");
       grade = input.nextLine();
       value = grades.get(grade);
      try{
          sum += Double.valueOf(value);
      }catch(Exception e){}
       i++;

   }
   double gpa = sum/numb;
   System.out.println("GPA = "+gpa);


问题在于代码总是跳过用户对第一个条目的读取。例如,如果我运行此程序并将课程数输入为4,结果将如下所示:

Please enter number of courses:
4
Please enter the grade for course1:
Please enter the grade for course2:
A
Please enter the grade for course3:
A
Please enter the grade for course4:
A
GPA = 3.0


我实际上不知道我犯的错误在哪里。当然,由于错过了第一个条目的读取,从而导致GPA计算错误。拜托,有没有人有兴趣向我展示如何解决该错误。我已经尝试了几乎所有我知道的东西,但仍然无法正常工作。仅供参考,这是我第一次使用Java编程。先感谢您。

最佳答案

首先,您对LinkedList的实现是不正确的,链表不是数据结构的键值类型,它只是将元素链接到其他元素。我建议您研究HashTable更适合这种用法。在代码中发生的事情是,当您使用nextInt()输入时,换行符不会被占用。下面的代码应该可以解决问题

numb = Integer.parseInt(input.nextLine());

09-25 21:39