2016-11-04 42 views
1

我有一個文本文件中的水果名稱列表。 每次按下按鈕時,水果名稱都會以相反順序顯示。 用戶應該破解水果名稱並將其寫入文本字段。 當用戶按下按鈕時,該單詞應在水果名稱的文本文件列表中進行驗證。 如果用戶提供的水果名稱正確,用戶應該得到一個分數,並繼續使用另一個水果名稱。如果它不正確,分數保持不變。從文本文件中讀取並給出分數,如果單詞正確

每次水果名稱正確時,我都很難給出分數。 這裏是我的Java代碼的功能,請大家幫忙:

public int scoreWord() { 
    int scores = 0; 
    String filePath = "C:\\names.txt"; 
    ArrayList<String> list = new ArrayList<>(); 
    Scanner scan = new Scanner(filePath); 

    while (scan.hasNext()) { 
     list.add(scan.next()); 

     for (Iterator<String> it = list.iterator(); it.hasNext();) { 
      String ss = correct_word.getText(); 
      String s = it.next(); 

      for (String list1 : list) { 
       if (s.toLowerCase(Locale.ENGLISH).contains((ss))) { 
        scores = scores + 1; 
       } else { 
        int newScore = scores; 
       } 
      } 
     } 
    } 

    return scores; 
} 

回答

0

你最好在你的代碼中分離出來的不同的責任。我的意思是:有絕對沒有必要再次讀取相同的文本文件一遍又一遍。當用戶玩這個遊戲時,其內容將會變爲而不是

從這個意義上說:你應該第一個閱讀該文件的內容(例如像this例如)。然後你把這些信息放入一些List<String>或者Set<String>。然後,在用戶正在玩遊戲時,您只需通過閱讀您的文件,根據您以前獲得的來檢查用戶輸入!

換句話說,您:

  1. 創建讀取names.txt中的新方法;返回一個列表/設置水果名稱
  2. 然後將數據結構傳遞給你的記分方法來完成其工作

編輯;一些更多的代碼,讓你去:

Set<String> fruitNames = fetchNamesFromFile("C:\\names.txt"); 
... 
String userGuess = ... the value provided by the user 
String normalizedGuess = userGuess.toLowerCase(Locale.ENGLISH); 
if (fruitNames.contains(normalizedGuess)) { 
    ... then user guessed correctly ... 

用以取方法:

Set<String> fetchAllNamesFromFile(String fname) throws IOException { 
    Charset charset = Charset.forName("ISO-8859-1"); 
    return new HashSet<>(Files.readAllLines(fname, charset); 
} 

或東西一樣(請注意:這只是寫下來,不通過編譯器運行 - 是指給你一些思路與工作;!不求所有編碼爲你工作)

當然,這裏的前提是,你的輸入文件看起來像

fruit1 
fruit2 
... 

等等。如果您的輸入數據看起來不同,那麼需要做更多的工作。

+0

謝謝。代碼的粗略草圖將有所幫助。 –

+0

我放了一些更多的代碼。但請理解,我們不在這裏爲你做功課。這意味着一些啓發,而不是解決您在這裏面臨的所有挑戰! – GhostCat

+0

謝謝。這確實會幫助我。 –

相關問題