2013-10-20 124 views
0

我在寫一個簡單的謎語程序,它讀取謎語的文本文件,將其存儲到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英尺放下?
你怎麼能用一根棍子發火?
你怎麼能區分一罐雞湯和一罐番茄湯?
長頸鹿可以有嬰兒嗎?
什麼有四個輪子和蒼蠅?
餵我和我住,給我點東西喝,我會死的。我是什麼?
有什麼眼睛但看不到?
什麼時候門不是門?

樣品答案文本
呼吸
他不想擊中橫樑
打開門,把他,關上門
打開門,走了長頸鹿,把他放在靠近門
大象,他在冰箱裏
跳進去,游泳,走出去。 aligators在參加會議
繩索不是綁在任何東西,但馬
8。就拿上半路程,「O」是左
住嘴4英尺,第3腳蛋不會打什麼
確保它是一個火柴
閱讀標籤
沒有,他們有長頸鹿
一個垃圾箱
消防
針,土豆,暴風,或真正的戀人
當它是虛掩着

+1

如果你想添加Riddles.txt和Answers.txt會有幫助。 –

+1

嘗試打印'answer.toLowerCase()'和'answers'的內容,你將會看到出錯的地方 –

回答

2

answers不包含字符串"storm"。它包含一個包含"storm"的字符串。在檢查String#contains(String)(而不是List#contains(Object),正如您現在所做的)之前,從answers檢索相應的字符串。

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

非常感謝...因此,我可以想出如何使它在哪裏它也會接受額外的只要它包含正確的答案即可。我吸詞,但例如: 答:得到貓,把他拖出來,跑。是正確的答案, 但用戶輸入: 獲取貓並將其拖出並運行。 –