0

我查看了其他类似的线程,但没有找到答案。

我正在用java做一个练习。这是一个有趣的游戏,每回合都会变得“更聪明”。计算机试图猜测我想到的是哪种动物。游戏看起来像这样:

在此处输入图像描述

问题是,我想使用二维数组来存储QuestionsAnswers。但是由于程序可以有无限的问题和答案,我不能使用 Array 对象来存储数据,因为数组不能动态调整大小。

那么我们就有了 ArrayList 类,它非常适合在运行时存储对象。但我不认为我应该在这里使用二维数组列表。你会如何处理这种情况?

练习也给了我提示,如果我愿意,我可以在互联网上查看“二叉树”。我做到了,但我只发现了一些我不明白的奇怪事情。

4

5 回答 5

2

您可以坚持使用多维数组的想法,但是......尝试使用二叉树作为提示。查看下面的二叉树,您的答案将是 16-25(叶节点),其他一切都是问题。

所以从顶部(根)开始,这个节点可能是“动物有四条腿吗?”的问题。如果答案“是”,则遍历(移动)到节点 2,否则遍历到节点 3。这意味着节点 2 下的所有叶节点都是有四条腿的动物,而节点 3 下的所有叶节点都是没有四条腿的动物腿。

然后,您需要重复将节点 2 或 3 视为根节点的过程,直到到达叶节点。

于 2012-09-20T09:26:31.783 回答
1

所有问题和动物都可以存储在一棵二叉树中。将问题用作内部节点,将动物用作叶子。每个答案都有两个后代(树的分支是 2 =二叉树)或者另一个答案,如果动物还不知道,或者是一个动物(离开节点)。

如何在 Java 中表示树是另一个问题。您可以使用以下类来做到这一点(添加getters/setters/constructors/convenient methods):

public class Node {
   // add here other common attributes
   private Node parent;
}

public class Question extends Node {
   private String text;
   private Node yes;
   private Node no;
}

public class Animal extends Node {
   private String name;
}
于 2012-09-20T09:30:12.047 回答
0

您可以使用Map的任何实现将您的动物名称存储为键,并将List答案存储为值。但问题是退出应用程序后此结果将不存在。因此,请考虑使用数据库来存储您的值。

于 2012-09-20T09:24:50.013 回答
0

你的问题让我有点困惑,所以这可能无法直接回答你的问题。既然你问过二叉树,我正在编译这个答案。我怀疑二叉树在这种情况下的适用性。

好吧,如果您从二叉树开始,首先要了解二叉树的概念和行为。很简单。最多有2个分支的任何东西:)

在此处输入图像描述

图片参考

暂时忘掉 Java 和编程吧。这些小程序向您展示了二叉搜索树的一个高级版本的二叉树。

二叉树演示

二叉树演示

然后想到编程。如果你不会阅读,那么你就无法学习。您应该尝试一遍又一遍地阅读以了解内容:)

现在这是一个您可以阅读的实际实现。

二叉树 - Java

于 2012-09-20T09:25:59.953 回答
0

听起来像是一个很好的使用案例,HashTable<QUESTION,ANIMAL> 您可以动态添加它并存储问题和动物之间的联系

Hashtable<String,string> ht = new HashTable<String,String>();
String animal;
//adding
ht["some question"] = "some animal";

//getting
if (ht["some question"] != null)
   animal = ht["some question"];
于 2012-09-20T09:19:44.563 回答