2015-12-22 80 views
1

我與創建該用戶(通過A + D-)輸入一個檔次的Java程序的任務,並得到一個得分(0.7至4.3)使用switch/if語句將字母等級與數字等級相比較?

  • 如果用戶輸入 「A」,他們得到4。 ...「B」= 3 ....「C」= 2 ....「D」= 1.

  • 如果用戶在字母后輸入「+」或「 - 」最後得分是通過0.3遞增或遞減

  • 因此,例如,如果用戶輸入「C +」,他們回來的得分爲「2.3」

到目前爲止,只有在用戶不添加「+」或「 - 」的情況下才能使用。

所以,如果用戶只輸入一個字母,它的作品。

出於某種奇怪的原因,如果用戶在字母后輸入「+」或「 - 」,輸出將分別爲「0.3」或「-0.3」。

我不知道爲什麼。我的AP Comp Sci老師和我很難過。

這裏是我的代碼相關剪斷

String letterGrade; 
double numericGrade; 
Scanner reader = new Scanner(System.in); 
public boolean getLetterGrade() 
{ 
    System.out.print("Enter a letter grade: "); 
    letterGrade = reader.nextLine(); 
    return (letterGrade.length() < 3) && (("+".equals(letterGrade.substring(1))) || ("-".equals(letterGrade.substring(1))) || (letterGrade.length() == 1)); 
} 
public double getNumericGrade() 
{ 
    numericGrade = 0.0; 
    switch(letterGrade.substring(0).toUpperCase()) 
    { 
     case "A": 
      numericGrade += 4.0; 
      break; 
     case "B": 
      numericGrade += 3.0; 
      break; 
     case "C": 
      numericGrade += 2.0; 
      break; 
     case "D": 
      numericGrade += 1.0; 
      break; 
     case "F": 
      numericGrade += 0.0; 
      break; 
    } 
    if ("-".equals(letterGrade.substring(1))) 
     numericGrade -= 0.3; 
    if ("+".equals(letterGrade.substring(1))) 
     numericGrade += 0.3; 
    return numericGrade; 
} 

我的猜測是numericGrade是switch語句之後得到重置爲0,因爲沒有明顯的理由給我。

+0

嘗試利用你的IDE爲您提供了調試功能,並通過一步看什麼'numericGrade'是每一步的方式。 –

+0

switch語句永遠不會以「A +」成功,因爲substring(0)獲取整個字符串,而不僅僅是第一個字符 –

回答

1

String.substring(int position)返回從位置的子字符串開始,如果使用「1234」 .substring(1),它會返回「234」

在返回C +,而不是這種情況下,你使用"C+".substring(0), C,你需要String.charAt(0)String.substring(0, 1)

這就是修復+/-所需的全部內容,但要注意,如果輸入的字符串長度爲1(僅爲字母等級,A/B/C/D/F),那麼你的程序會崩潰,因爲你的if語句試圖訪問第二個字符。如果輸入的字符串太短,您應該檢查長度並提前回復

+0

謝謝,這似乎解決了問題。我的理解是,如果在沒有第二個字符時調用if語句,那麼if語句會返回'-1'?這不是這種情況嗎? –

+0

我的不好,那就是如果使用'letterGrade.substring(1,2)',只是使用'letterGrade.substring(1)'不會引發錯誤。如果輸入是空字符串,則會導致錯誤,並且爲它添加​​某種形式的錯誤處理並不是一個壞主意 – phflack

0

試試這個,一個簡單的等級解釋器。如果您想了解更多的到這樣的問題的詳細信息,您可以用解釋設計模式檢查

public class Grades { 
private double score = 0; 
public double calculate(char c) throws IllegalArgumentException{ 
    switch(c){ 
     case 'A': 
      score += 4; 
      break; 
     case 'B': 
      score += 3; 
      break; 
     case 'C': 
      score += 2; 
      break; 
     case 'D': 
      score += 1; 
      break; 
     case '+': 
      score += 0.3; 
      break; 
     case '-': 
      score -= 0.3; 
      break; 
     default: 
      throw new IllegalArgumentException("Invalid Argument"); 
    } 

    return score; 
} 

public static void main(String args[]){ 
    Scanner reader = new Scanner(System.in); 
    Grades grade = new Grades(); 
    String line = reader.nextLine(); 
    while(!line.equals("exit")){ 

     //validate argument here.. 
     double value; 
     for (int i = 0; i < line.length(); i++){ 
      value = grade.calculate(line.charAt(i)); 

     } 
     System.out.println("Grade = " + value); 
     line = reader.nextLine(); 
    } 
    reader.close(); 
}