java – 猜猜计算机变得聪明的游戏

我正在尝试制作一个猜谜游戏,计算机在每次猜测后都会变得更加智能.这是一个示例运行:

(计算机正在猜测你在想什么动物)

电脑:你想的动物有腿吗?
 球员:是的
 电脑:它是狗吗?
 球员:是的
 电脑:我赢了!你想再玩一次吗?
 球员:是的
 电脑:你想的动物是否有腿
 球员:是的
 电脑:它是狗吗?
 球员:没有
 电脑:我放弃了.你的动物是什么?
 球员:马
 计算机:键入一个问题,答案对于狗而言是肯定的,但对于马则不是
 球员:它住在一个房子里吗?
 电脑:你想再玩一次吗?
 球员:是的
 电脑:你想的动物有腿吗?
 球员:是的
 电脑:它住在房子里吗?
 球员:没有
 电脑:这是一匹马吗?
 球员:没有
 电脑:我放弃了

等等

到目前为止,这是我的代码:

import java.util.*;

public class DoesItHaveLegs {
public static void main(String[] args) {
    ArrayList<String> questions = new ArrayList<String>();
    ArrayList<String> animals = new ArrayList<String>();
    Scanner input = new Scanner(System.in);

    questions.add("Does it have legs");
    animals.add("dog");

    String userAnimal;
    String userQuestion = "";

    String giveUp = "I give up. What animal was it?";

    String userAnswer = "YES";

    while(userAnswer.equals("YES")) {
        System.out.println(animals);
        System.out.println(questions);

        int q = 0;
        int a = 0;

        while (q < questions.size()) {
            System.out.println(questions.get(q));
            userAnswer = input.nextLine().toUpperCase();

            if(userAnswer.equals("YES")) {
                System.out.println("Is it a " + animals.get(a));
                userAnswer = input.nextLine().toUpperCase();
                while(a < animals.size()) {
                    if(userAnswer.equals("YES")) {
                        System.out.println("Yay! I win. Do you want to play again?");
                        userAnswer = input.nextLine().toUpperCase();
                    }
                    else if(a < animals.size()) {
                            a++;
                        }

                    else {
                        System.out.println("I give up. What animal is it?");
                        userAnimal = input.nextLine();
                        animals.add(userAnimal);
                    }
                }

            }
            else {
                if(q < questions.size()) {
                    q++;
                }
            }
        } 
        System.out.println("I give up. What animal is it?");
        userAnimal = input.nextLine();
        animals.add(userAnimal);


        System.out.println("Type in a question for which the answer is yes for " + animals.get(a) + " but no for " + userAnimal);
        userQuestion = input.nextLine();

        questions.add(userQuestion);

        System.out.println("Do you want to play again?");
        userAnswer = input.nextLine().toUpperCase();
    }
}
}

我假设有一种更简单的方法来实现这一点(可能是二叉树),但我无法弄明白.我不想要完整的解决方案,我只想指出正确的方向.

最佳答案 首先,尝试创建更小的方法,这样一切都更容易阅读.

第二个通知,你添加问题和动物,但不包括任何匹配这些的东西.你的计算机只是猜测一个随机的动物,从不排除任何动物.

例:

Q1: Yes

Animals: Horse, Dog

Q1: No

Animals: Horse, Dog

如果Q1与Dog有关,那么如果之后没有正确猜到,你应该从可能的答案中删除它.

点赞