我正在嘗試編寫一個用於在Java中處理符號表的程序。我使用鏈表數據結構來表示我的符號表;鏈表(單獨)有一個鍵,與該鍵關聯的值,以及指向下一個點的指針。鏈表還向用戶提供將新節點插入列表的功能。看來我的鏈接列表類的實現進展順利,但是當我嘗試編寫一個主程序來測試時,我遇到了一些問題。儘管我以某種方式管理異常,但在我的代碼中存在邏輯錯誤。下面是我寫的一段代碼和輸出: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編程。先謝謝你。
這往往發生在試圖用掃描儀讀取輸入時;我認爲它與nextLine()方法的工作方式有關;環顧SO尋找java輸入問題,看看他們是否能解決你的問題。 –