我试图制作一个猜谜游戏,计算机在每次猜测后都会变得更聪明。这是一个示例运行: (计算机正在猜测你正在考虑的动物)
{{1}}
等
到目前为止,这是我的代码:
{{1}}
我假设有一种更简单的方法来实现这一点(可能是二叉树),但我无法弄明白。我不想要完整的解决方案,我只想指出正确的方向。
答案 0 :(得分:1)
首先,尝试创建更小的方法,这样一切都更容易阅读。
第二次通知,你添加问题和动物,但不要包含任何匹配这些的东西。你的计算机只是猜测一个随机的动物,从不排除任何动物。
示例:
Q1:是的
动物:马,狗
Q1:否
动物:马,狗
如果Q1与Dog有关,那么如果之后没有正确猜对,你应该从可能的答案中删除它。
答案 1 :(得分:1)
最好的方法可能是拥有一个具有答案ArrayList的Animal类。您还需要一个问题的ArrayList,具有相同的排序顺序。现在,你可以复制所有动物的清单并找出问题所不适合的动物。为此,您只需循环查看所有问题,并检查您复制的动物列表是否合适。
你的动物类可能看起来不会比这更复杂:
class Animal {
ArrayList<Answer> answers;
public Animal() {
answers = new ArrayList<Answer>();
}
public Answer checkQuestion(int questionId) { ... }
public void setAnswerToQuestion(int questionId, Answer answer) { ... }
}
这里的答案应该是Enum,其中包括“Yes / True”,“No / False”和“Unkown”的可能性。
通过这个,您可以计算每只动物的相对可能性,甚至可以跳过不必要的问题。
答案 2 :(得分:0)
在我看来,这似乎是一个分类问题。你想根据一组属性发现它是什么动物。
由于您想将它们标记为问题,我建议使用基于规则或基于树的系统。您可以查看决策树系统,如J48。每次用户回答问题时,请重新训练模型。然后你可以问问题并按照你的树到叶子节点。
你可以看看weka,它已经准备好并实现了很多这些方法。
美好的一天
答案 3 :(得分:0)
针对您的问题的示例解决方案
import java.util.Scanner;
class DoesItHaveLegs
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int answer=0;
int question=0;
int anotherQuestion=0;
int actualAnimals=0;
int roundAbout=0;
String quitter="YES";
String userInput=null;
Animal animal = new Animal();
do
{
userInput="";
for(int a=0;a<animal.getQuestionsLength();++a)
{
userInput="";
if(a>0)
{
animal.displayQuestion(a);
userInput=scan.nextLine();
if(userInput.equalsIgnoreCase("Yes"))
{
answer=a;
a=animal.getQuestionsLength();
}
}
else
{
animal.displayQuestion(a);
userInput=scan.nextLine();
if(userInput.equalsIgnoreCase("No"))
{
a=animal.getQuestionsLength();
}
}
}
if(userInput.equalsIgnoreCase("Yes"))
{
String enteredAnswer=null;
if(answer>0)
{
animal.displayAnswer(answer-1);
enteredAnswer=scan.nextLine();
}
else
{
animal.displayAnswer(answer);
enteredAnswer=scan.nextLine();
}
if(enteredAnswer.equalsIgnoreCase("Yes"))
{
System.out.println("Yay I won");
System.out.println("Do you want to play again?");
quitter=scan.nextLine();
}
else
{
animal.giveUpMessage();
String enteredAnimal = scan.nextLine();
animal.addActualAnimals(enteredAnimal);
animal.addAnswers("Is it a "+enteredAnimal);
actualAnimals=animal.getActualAnimalsLength()-1;
System.out.println("Type a question for which the answer is Yes for "+animal.getActualAnimals(actualAnimals-1)+" but No for "+animal.getActualAnimals(actualAnimals));
String enteredQuestion = scan.nextLine();
animal.addQuestions(enteredQuestion);
System.out.println("Do you want to play again?");
quitter=scan.nextLine();
}
}
else if(userInput.equalsIgnoreCase("No"))
{
String enteredAnswer=null;
for(int i=0;i<=animal.getAnswersLength();++i)
{
if(i==animal.getAnswersLength())
{
animal.displayAnswer(i-1);
enteredAnswer=scan.nextLine();
if(enteredAnswer.equalsIgnoreCase("Yes"))
{
System.out.println("Yay I won");
System.out.println("Do you want to play again?");
quitter=scan.nextLine();
}
else
{
animal.giveUpMessage();
String enteredAnimal = scan.nextLine();
animal.addActualAnimals(enteredAnimal);
animal.addAnswers("Is it a "+enteredAnimal);
actualAnimals=animal.getActualAnimalsLength()-1;
System.out.println("Type a question for which the answer is Yes for "+animal.getActualAnimals(actualAnimals-1)+" but No for "+animal.getActualAnimals(actualAnimals));
String enteredQuestion = scan.nextLine();
animal.addQuestions(enteredQuestion);
i=animal.getAnswersLength();
System.out.println("Do you want to play again?");
quitter=scan.nextLine();
}
}
}
}
}
while(!(quitter.equalsIgnoreCase("NO")));
}
}
//another class
import java.util.*;
class Animal
{
private ArrayList<String> answers;
private ArrayList<String> questions;
private ArrayList<String> actualAnimals;
public Animal()
{
answers = new ArrayList<String>();
questions = new ArrayList<String>();
actualAnimals=new ArrayList<String>();
actualAnimals.add("dog");
questions.add("Does the animal you are thinking of have legs?");
answers.add("Is it a dog?");
}
public String getActualAnimals(int actualAnimal)
{
return actualAnimals.get(actualAnimal);
}
public String getQuestions(int questionNumber)
{
return questions.get(questionNumber);
}
public String getAnswers(int answerNumber)
{
return answers.get(answerNumber);
}
public void addQuestions(String question)
{
questions.add(question);
}
public void addAnswers(String answer)
{
answers.add(answer);
}
public void addActualAnimals(String animal)
{
actualAnimals.add(animal);
}
public void displayQuestion(int questionNumber)
{
System.out.println(questions.get(questionNumber));
}
public void displayAnswer(int answer)
{
System.out.println(answers.get(answer));
}
public void giveUpMessage()
{
System.out.println("I give up What was your animal");
}
public int getAnswersLength()
{
return answers.size();
}
public int getQuestionsLength()
{
return questions.size();
}
public int getActualAnimalsLength()
{
return actualAnimals.size();
}
}