java中的大分支树?

java中的大分支树?,java,branching-and-merging,switching,Java,Branching And Merging,Switching,我的问题是关于可伸缩逻辑分支 有没有一种优雅的方法可以在java中实现逻辑树的分支(尽管我一直认为它们看起来更像根系统,但这并不是重点)。我正试图开发一个非常简单的基于文本的冒险游戏,作为我研究的一个辅助项目,但我不确定导航这些大型逻辑系统的最佳方式是什么 我目前正在尝试的是一个包含四个值的数组:stage、location、step和choice [编辑-添加了choice变量以存储用户选择,更改了名称以反映代码中的实际名称,以便以后不会混淆] int[] decisionPoint = {s

我的问题是关于可伸缩逻辑分支

有没有一种优雅的方法可以在java中实现逻辑树的分支(尽管我一直认为它们看起来更像根系统,但这并不是重点)。我正试图开发一个非常简单的基于文本的冒险游戏,作为我研究的一个辅助项目,但我不确定导航这些大型逻辑系统的最佳方式是什么

我目前正在尝试的是一个包含四个值的数组:stage、location、step和choice

[编辑-添加了choice变量以存储用户选择,更改了名称以反映代码中的实际名称,以便以后不会混淆]

int[] decisionPoint = {stage, location, step, choice};
舞台应该代表树的一个主要部分。 一个位置应该代表我在树中的位置。 一个步骤应该代表我在给定位置的进度。 选择是用户的输入

目前,由于我只处理一棵树,stage并没有被广泛使用。位置和步骤都很好,但只要我在一个步骤内做出决定,系统就会崩溃

我可以不断创建越来越多的变量来表示树中越来越深的层,但我觉得Java可能在某些地方提供了更好的解决方案

目前,我正在使用switch语句根据nextQuestion中存储的值计算我在程序中的位置。有更好的吗?或者,有没有一种方法可以将数组扩展到我在这里使用的数组之外,使其更具多态性(在用于单个问题/文本/任何内容的方法中,我可以让它从较小的数组创建较大的数组?我可以将较小的数组作为参数传递,但将参数定义为较大的数组吗?)

我在网上找到的所有东西都会把我带到与我可以使用的不同在线调查创建者无关的页面。如果我能查看他们的源代码,那就太好了,但既然我看不到,我希望你们能帮忙。:)

[编辑]

哇,在这么短的时间内,在这么早的时间里,做出了多么好的反应啊

我会尽量详细说明我现在是如何解决这个问题的。值得一提的是,这在技术上是可行的,只是每次我需要分支中的分支时,我必须在字符串数组中创建另一个变量来跟踪我的位置,实际上我只是在寻找一个解决方案,随着程序变得越来越复杂,它不需要无限扩展的字符串

现在我有一个包含5个课程的课程: 启动GUI的主类 GUI类提供三种服务:userInput、userOptions和outputArea

DecisionTreeStage1类,它处理当前问题的逻辑(使用switch语句)。 LocationTracker类,用于在DecisionTreeStateg1类中跟踪我的位置 DialogueToOutput类,用于更改用户拥有的选项,并使用其操作的结果更新输出字段

特别关注点: 我希望在某一点上有多个决策分支和一个主树(可能称之为Yggdrasil?:D)。目前,DecisionTreeStatege1代表了一个非常孤立的系统,它不打算去任何地方。我希望使用数组中存储的stage变量从一个主要分支移动到下一个分支(如果愿意,可以爬树)。我目前的实现只是使用嵌套的switch语句来决定我要去哪里。这带来了一个恼人的限制:每次我的路径越来越深,我都需要数组中的另一个变量来存储数据。例如:

//Switch example deeper
switch(LocationTracker.getLocation()) { //start location finding switch
    case 1 : //Location 1
        switch (LocationTracker.getStep()) {//start location1 switch
            case 1 :
                switch(LocationTracker.getChoice()) {//Make a decision at this step based on the user choice
给出这个例子,如果用户的选择不只是导致一些逻辑呢?(在本例中,只是对outputArea的更新)如果它导致另一个分支路径呢?这会导致另一条分支路径?最终,我希望所有路径都汇聚在同一点上,这样我就可以进入下一个“阶段”

我真正的希望是使这个问题无限扩展。我希望能够深入到一个分支,而不必每次都在decisionPoint数组中创建静态和任意数量的变量声明

正如我所说,我还没有找到很多关于这方面的信息

让我试着提出这个问题:除了:

if(something)
    stuff;
else
    otherStuff;

如果是,它们是什么


PS-我知道Java中的三元if语句,但它似乎对我正在做的事情没有用处。:)

您可以在Java中构建普通的树结构,类似于在C中构建的树。无论对象引用在理论上是否为指针,它们都可以很好地替代树结构中的指针:

class Node {
  Node left;
  Node right;
  Node parent;
}

您还可以构建图(包括循环图)和链表,没有问题。没有任何明显的理由说明大型结构会出现问题(除了对象引用使用了一些内存之外)。

您可以返回一个只需要执行的
可调用的
,而不是返回一个值。然后可以将其链接(理论上无限)

例如,您可以使用
LocationEvaluation
返回
SpecificationLocationEvaluator
,然后依次返回
StepEvaluation
ChoiceEvaluator
中的一个或类似的内容。所有这些都将实现可调用接口

根据您的操作方式,您可以进行严格的类型检查,以便LocationEvaluation始终返回SpecificLocationEvaluator,或者它可以是泛型的,然后您可以按任意顺序链接其中任何一个

一旦你构建了这个结构,你就基本上拥有了一棵树,它将被遍历来求解它

我不能充分理解这个问题,无法提供更具体的实现细节,如果我误解了一些分支(即上面的类/步骤的名称),我深表歉意。

这对我来说太抽象了。
switch(something) {
    case 1:
        stuff;
        break;
    case 2:
        otherStuff;
        break;
class Node {
  Node left;
  Node right;
  Node parent;
}