我正在尝试编写一个用于处理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());