2015-09-15 33 views
2

我正在嘗試編寫一個用於在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編程。先謝謝你。

+0

這往往發生在試圖用掃描儀讀取輸入時;我認爲它與nextLine()方法的工作方式有關;環顧SO尋找java輸入問題,看看他們是否能解決你的問題。 –

回答

1

首先你的執行LinkedList是不正確的linkedlist不是一個鍵值類型的數據結構,它只是將元素鏈接到其他元素。我建議你看看HashTable這種用法更好。代碼中發生的情況是,當您輸入nextInt()時,新行字符不會被佔用。下面的代碼應該做的竅門

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

問題出在行 grade = input.nextLine(); 當我改變它爲input.next(); 它工作正常。 –