以动态方式存储数组中的数据

时间:2012-09-20 09:13:37

标签: java arrays

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

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

enter image description here

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

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

练习也给了我一些暗示,如果我想要的话,我可以在网上看一下“二叉树”。我做了,但我发现了一些我不理解的奇怪事情。

5 个答案:

答案 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)

您可以使用Map的任何实现将您的动物名称作为关键字和List的答案存储为值。但问题是退出申请后该结果将不存在。因此,请考虑database来存储您的值。

答案 4 :(得分:0)

您的问题对我来说有点混乱,所以这可能无法直接回答您的问题。既然你问过二进制树,我正在编译这个答案。我怀疑二元树在这种情况下的适用性。

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

enter image description here

Image Reference

暂时忘记Java和编程。这些小程序向您显示二叉树搜索树的二进制树的高级版本。

Binary Tree Demol

Binary Tree Demo

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

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

Binary Tree - Java