我正在编写一个简单的谜语程序,该程序读取谜语的文本文件,将其存储到ArrayList中,然后读取对谜语的答案的文本文件,并将其存储到ArrayList中。好吧,到目前为止一切都很好。我的问题是,每当用户回答一个谜语时,就应该给出正确答案的要点,而没有给出错误答案的要点。我测试了一下,正确回答了这个谜语,但是程序却说错了。现在,某些答案应接受大于1的正确答案,例如:
问:有眼睛但看不见的东西是什么?
答:土豆,暴风雨,针。
假设用户没有想到3而是只有1,这是风暴。我希望程序读取风暴,并且因为它包含在答案中,所以它是正确的。这是我的代码。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

/* Array of riddles with a separate array of answers */
class RiddlesProgram
{
public RiddlesProgram(){} //Empty constructor

public void riddleGame() throws FileNotFoundException
{
    String ridFile = "Riddles.txt";
    String ansFile = "Answers.txt";
    Scanner ridReader = new Scanner(new File(ridFile));
    Scanner ansReader = new Scanner(new File(ansFile));
    /** ArrayLists for riddles and answers */
    ArrayList<String> riddles = new ArrayList<String>();
    ArrayList<String> answers = new ArrayList<String>();
    /** Reading the Riddles & storing them in their array */
    while(ridReader.hasNext())
    {
        riddles.add(ridReader.nextLine());
    }ridReader.close();
    /** Reading the Answers & storing them in their array */
    while(ansReader.hasNext())
    {
        answers.add(ansReader.nextLine());
    }ansReader.close();

    Scanner in = new Scanner(System.in);
    String answer = "";
    System.out.println("Welcome to the Riddler!");
    System.out.println("Let's start answering riddles..."); System.out.println();
    System.out.println("Each riddle will require either a one word answer, or multiple word answer.");
    System.out.println("Example: \nQ: How much would could a wood chuck, chuck?\n"
            + "A: As much wood as a wood chuck could chuck if a wood chuck would chuck wood.");
    int count = 1;
    int points = 0;
    while(count!=16)
    {
        System.out.println("Riddle # " + count);
        System.out.println(riddles.get(count));
        System.out.println("\nAnswer? ");
        answer = in.nextLine();
        if(answers.contains(answer.toLowerCase()))
        {
            System.out.println("Correct! + 1 point.");
            points += 1;
        }//End if
        else
        {
            System.out.println("Wrong! No points!");
        }//End else
        count++;
    }//End while
}//End riddlegame
}//End class


样本谜语文字
我比羽毛还轻,但没有人能抱得很久。我是什么?
三个家伙闯入酒吧,第四个男人低头。他为什么要躲避?
你如何把长颈鹿放在冰箱里?
您如何将大象放入冰箱?
所有的动物都去参加狮子王的聚会。一只动物不露面。哪只动物不来?
您来到了爱好者居住的河流。没有船,筏,桥或材料来制造它们。你如何相处?
一条十五英尺的绳子绑在马身上。这匹马离一堆干草有25英尺。那匹马怎么去干草呢?
您可以从哪个数字中拿走一半而什么都没留下?
您如何在不打碎鸡蛋的情况下将其砸下3英尺?
只用一根棍子怎么能起火?
您如何分辨一罐鸡肉汤和一罐番茄汤之间的区别?
长颈鹿可以生婴儿吗?
什么有四个轮子和苍蝇?
喂饱我,我活着,给我喝点东西,我就会死。我是什么?
有眼睛但看不见的东西是什么?
什么时候门不是门?

示例答案文字
呼吸
他不想去酒吧
打开门,把他放进去,关上门
打开门,把长颈鹿拿出来,放进去,关上门
大象,他在冰箱里
跳进去,游泳,出去。参加者们正在开会
绳子除了马以外没有别的东西
8.取下上半部分,然后保留“ o”
将其下降4英尺,鸡蛋的前3英尺不会撞到任何东西
确保它是一根火柴
阅读标签
不,他们有长颈鹿
垃圾箱

针,土豆,风暴或真正的恋人
半开时

最佳答案

answers不包含字符串"storm"。它包含一个包含"storm"的字符串。在检查answers之前,从String#contains(String)中检索相应的字符串(而不是像现在这样使用List#contains(Object))。

String correctAnswer = answers.get(count).toLowerCase();
if(correctAnswer.contains(answer.toLowerCase()))
{
    System.out.println("Correct! + 1 point.");
    points += 1;
}

08-18 13:38