2014-10-18 75 views
0

我已經編寫了一個隨機選擇Deutch中的動詞並詢問Perfekt表單的程序。它不斷顯示新的動詞,直到你犯了一個錯誤。然後程序會告訴你你的答案是不正確的,並告訴你你有多少分。該程序還將點數寫入test.txt文件,然後重新讀取該數字。將遊戲分數保存到文件並確定「高分」

這裏是我的程序代碼(它如上所述正確工作)。

import java.util.Random;  
import java.io.File; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Scanner; 
import java.io.*; 

public class Verben{ 
    public static void main(String args[]){ 
    String glagol; 
    String correct = "Correct!"; 
    String incorrect = "Incorrect!"; 
    int points = 0; 
    boolean answer; 

    File file = new File("test.txt"); 


    for(int i = 0; i <= points; i++){ 
     Random random = new Random(); 


     String verben[] = {"trinken", "lesen", "schwimmen", "sterben", "fahren"}; 
     String verbenAnswer[] = {"hat getrunken", "hat gelesen", 
       "hat geschwommen", "ist  gestorben", "ist gefahren"}; 
     glagol = verben[random.nextInt(verben.length)]; 
     System.out.println("Please enter correct form of verb!"); 
     System.out.println(glagol); 
     String enter = Input.readLine(); 

     if(glagol.equals(verben[0]) && enter.equals(verbenAnswer[0])){ 
      answer = true; 
      points += 1; 
     }else if(glagol.equals(verben[1]) && enter.equals(verbenAnswer[1])){ 
      answer = true; 
      points += 1; 
     }else if(glagol.equals(verben[2]) && enter.equals(verbenAnswer[2])){ 
      answer = true; 
      points += 1; 
     }else if(glagol.equals(verben[3]) && enter.equals(verbenAnswer[3])){ 
      answer = true; 
      points += 1; 
     }else if(glagol.equals(verben[4]) && enter.equals(verbenAnswer[4])){ 
      answer = true; 
      points += 1; 
     }else{ 
      answer = false; 
      points += 0; 
     } 

     if(answer == true){ 
      System.out.println(correct); 
     }else{ 
      System.out.println(incorrect); 
      System.out.println("You collected: " + points + "/" + (i+1)); 
     } 
    } 

     try{ 
      PrintWriter output = new PrintWriter(file); 
      output.println(points); 
      output.close(); 
     }catch (FileNotFoundException ex){ 
      System.out.printf("ERROR: %s\n", ex); 
     } 
     try{ 
      Scanner input = new Scanner(file); 
      int point = input.nextInt(); 
      System.out.printf("Points: %d\n", point); 
     }catch(IOException ex){ 
      System.err.println("ERROR"); 
     } 

    } 
} 

我該如何修改我的代碼,將所有嘗試永久存儲在test.txt文件中?我如何確定最高分?每次運行該程序後,我都希望它能提醒我「什麼是最高分」。

+1

您的問題不清楚。有什麼工作不好?以何種方式 ? – Dici 2014-10-18 20:14:37

+0

沒有什麼不對,但我想補充一下這個程序,它允許我存儲「測試」的結果,然後向我顯示所有時間的最高分數。 – mrzlaroka 2014-10-18 20:51:21

回答

1

一種方法是...

緊接着你的for循環,通過讀取你的文件中的行由行確定高分。爲了簡單起見,我們將假設每行有一個分數。

// determine the high score 
    int highScore = 0; 
    try { 
     BufferedReader reader = new BufferedReader(new FileReader(file)); 
     String line = reader.readLine(); 
     while (line != null)     // read the score file line by line 
     { 
      try { 
       int score = Integer.parseInt(line.trim()); // parse each line as an int 
       if (score > highScore)      // and keep track of the largest 
       { 
        highScore = score; 
       } 
      } catch (NumberFormatException e1) { 
       // ignore invalid scores 
       //System.err.println("ignoring invalid score: " + line); 
      } 
      line = reader.readLine(); 
     } 
     reader.close(); 

    } catch (IOException ex) { 
     System.err.println("ERROR reading scores from file"); 
    } 

確定高分後,我們可以顯示相應的消息。

// display the high score 
    if (points > highScore) 
    {  
     System.out.println("You now have the new high score! The previous high score was " + highScore); 
    } else if (points == highScore) { 
     System.out.println("You tied the high score!"); 
    } else { 
     System.out.println("The all time high score was " + highScore); 
    } 

最後我們將當前分數附加到文件末尾(在它自己的行上)。

// append the last score to the end of the file 
    try { 
     BufferedWriter output = new BufferedWriter(new FileWriter(file, true)); 
     output.newLine(); 
     output.append("" + points); 
     output.close(); 

    } catch (IOException ex1) { 
     System.out.printf("ERROR writing score to file: %s\n", ex1); 
    } 
} 
0

如果您想要在程序開始時顯示最高分,那麼您需要在程序開始時讀取該文件。將文本文件中的所有條目添加到ArrayList(或類似的東西)中,然後找到列表中最大的元素,並顯示它。 (或者在閱讀文件時跟蹤最重要的元素,如果以後不需要其他分數的話)。

另外,當您爲文件寫入分數時,您需要確保將其添加到文件的末尾,而不是覆蓋文件。要做到這一點

+0

我會建議一個'LinkedList'來代替,它會更快地追加大量的元素。 – Dici 2014-10-18 20:53:04

+0

我仍然是java編程的初學者,所以你可以寫下如何做到這一點,你建議? – mrzlaroka 2014-10-18 21:09:42