有趣的谜语

时间:2013-10-20 17:37:14

标签: java

我正在编写一个简单的谜语程序,它读取谜语的文本文件,将其存储到ArrayList中,然后读取谜语的答案文本文件,并将其存储到ArrayList中。好吧,到目前为止一切顺利。我的问题是,每当用户回答其中一个谜语时,它应该给出正确答案的一个点,而不是错误的答案。我测试了它,正确回答了谜语,然而程序反而说它错了。现在,一些答案应该接受超过1作为正确的答案,例如: 问:有什么眼睛却看不到? A:土豆,风暴,针。 假设用户没有想到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英尺不会碰到任何东西 确保它是火柴棍
阅读标签
不,他们有长颈鹿 垃圾箱 消防
针,土豆,暴风雨或真正的情人 当它是半开的

1 个答案:

答案 0 :(得分:2)

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;
}