从文本文件中读取并在单词正确时给出分数

时间:2016-11-04 11:46:26

标签: java file text

我在文本文件中有一个水果名称列表。 每次按下按钮时,水果名称都会以相反的顺序显示。 用户应破解水果名称并将其写入文本字段。 当用户按下按钮时,应在水果名称的文本文件列表中验证该单词。 如果用户提供的水果名称是正确的,则用户应获得分数并继续使用另一个水果名称。如果分数不正确,则分数保持不变。

每次水果名称正确时,我都在努力给出一个分数。 这是我的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;
}

1 个答案:

答案 0 :(得分:0)

您最好将代码中的不同职责分开。我的意思是:绝对无需再次阅读相同的文本文件一遍又一遍。当用户玩这个游戏时,其内容将更改。

从这个意义上说:你应该首先读取该文件的内容(例如,某种方式如this)。然后,您将该信息放入某些List<String>Set<String>。稍后,当用户正在玩游戏时,您只需根据您通过阅读文件以前获取的信息来检查用户输入!

换句话说,你:

  1. 创建一个读取names.txt的新方法;并返回水果名称的列表/集合
  2. 然后将该数据结构传递给您的评分方法以完成其工作
  3. 编辑;更多代码可以帮助您:

    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
    ... 
    

    等等。如果您的输入数据看起来不同,那么需要做更多的工作。