我看了其他类似的线程,但我没有找到答案。
我正在用java练习。这是一种有趣的游戏,每回合变得“更聪明”。计算机试图猜测我想到的是哪种动物。游戏看起来像这样:
问题是,我想使用二维数组来存储问题和答案。但由于该程序可以有无限的问题和答案,我不能使用Array对象来存储数据,因为数组不能动态调整大小。
那么我们就有了ArrayList类,它适合在运行时存储对象。但我不认为我应该在这里使用二维arraylist。你会如何处理这种情况?
练习也给了我一些暗示,如果我想要的话,我可以在网上看一下“二叉树”。我做了,但我发现了一些我不理解的奇怪事情。
答案 0 :(得分:2)
你可以坚持使用多维数组的想法,但是......尝试使用二进制树作为暗示。看下面的binary tree你的答案是16-25(叶子节点),其他一切都是一个问题。
所以从顶部(根)开始这个节点可能是“动物有四条腿吗?”的问题。如果答案“是”则遍历(移动)到节点2,否则遍历到节点3.这意味着节点2下的所有叶节点都是具有四条腿的动物,节点3下的所有叶节点都是没有四条叶子的动物腿。
然后,您需要重复进程处理节点2或3作为根节点,直到到达叶节点。
答案 1 :(得分: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;
}
答案 2 :(得分: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"];
答案 3 :(得分:0)
答案 4 :(得分:0)
您的问题对我来说有点混乱,所以这可能无法直接回答您的问题。既然你问过二进制树,我正在编译这个答案。我怀疑二元树在这种情况下的适用性。
如果您从二叉树开始,首先要了解二叉树的概念和行为。很简单。任何最多有2个分支的东西:)
暂时忘记Java和编程。这些小程序向您显示二叉树搜索树的二进制树的高级版本。
然后想想编程。如果你不能阅读那么你就无法学习。您应该尝试一次又一次地阅读以理解内容:)
现在这是一个你可以阅读的实际实现。