java - Java中的大分支树?

标签 java branching-and-merging switching

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

有没有一种优雅的方法可以在Java中进行逻辑树的分支(尽管我一直认为它们看起来更像是根系统,但这并不重要)。我正在尝试开发一个非常简单的基于文本的冒险游戏,作为我学习的附带项目,但是我不确定导航这些大型逻辑系统的最佳方法是什么。

我目前正在尝试的是一个包含四个值的数组:阶段,位置,步骤,选择。

[编辑-添加了选择变量以存储用户选择,更改了名称以在代码中反映实际名称,以免日后混淆。

int[] decisionPoint = {stage, location, step, choice};

舞台应该代表树的单个主要部分。
一个位置应该代表我在树中的位置。
应该用一个步骤来表示我在给定位置上的进度。
选择是用户输入

目前,由于我只处理一棵树,因此舞台使用不多。位置和步骤运行良好,但是只要我在一个步骤中做出决定,系统就会崩溃。

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

当前,我正在使用switch语句根据nextQuestion中存储的值来确定我在程序中的位置。有更好的东西吗?或者,是否有一种方法可以将数组扩展到我在这里使用的之外,使它更具多态性(在针对单个问题/文本/的方法中,我可以用较小的数组创建较大的数组吗?我可以将较小的数组作为参数传递,但将参数定义为较大的数组吗?)
//Switch example
switch(LocationTracker.getLocation()) { //start location finding switch
    case 1 : //Location 1
        switch (LocationTracker.getStep()) {//start location1 switch
            case 1 :
                location1s1(graphicsStuff);
                break;
            case 2 :
                location1s2(graphicsStuff);
                break;
         } break; //end location1 switch
    case 2 : //Location 2
        switch (LocationTracker.getStep()) {
            //same stuff that happened above
        } break;

我在网上找到的所有内容都将我带到与我可以使用的不同在线调查创建者无关的页面。如果我可以查看他们的源代码,那会很好,但是由于我不能,我希望你们能提供帮助。 :)

[编辑]

哇,这么早就在这么短的时间内做出了很好的回应!

我将尝试就我现在如何解决问题进行非常明确的详细说明。值得一提的是,这在技术上是可行的,只是每次我需要在一个分支内创建一个分支时,我都必须在字符串数组内创建另一个变量来跟踪自己的位置,而实际上我只是在寻找一种解决方案,随着程序变得越来越复杂,不需要无限扩展的字符串。

现在我有一个包含5个类的程序:
启动GUI的Main Class
GUI类提供三种服务:userInput,userOptions和outputArea。

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

特殊兴趣点:
我想在某个时候拥有多个决策分支,以及一棵主树(也许称为Yggdrasil?:D)。就目前而言,DecisionTreeStage1代表了一个非常孤立的系统,不打算将其部署到任何地方。我希望使用存储在数组中的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的更新)如果它导致了ANOTHER分支路径怎么办?那会导致另一条分支路径?最终,我希望所有路径都汇聚在同一位置,以便我可以进入下一个“阶段”。

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

就像我说的那样,我一直没有找到很多有关此方面的信息。

让我尝试提出这个问题:除以下以外,是否还有其他分支逻辑语句:
if(something)
    stuff;
else
    otherStuff;


switch(something) {
    case 1:
        stuff;
        break;
    case 2:
        otherStuff;
        break;

如果是这样,它们是什么?

PS-我知道Java中的三元if语句,但是它对我的工作似乎没有用。 :)

最佳答案

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

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

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

关于java - Java中的大分支树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15173218/

相关文章:

java - 如何从 Java 打开 Windows 命名管道?

mercurial - 如何将文件从一个分支添加到 Mercurial 中的另一个分支?

java - Jetty - 对不同的应用程序版本使用符号链接(symbolic link)

java - 如何单击具有输入类型和值的按钮?

Java小程序资源加载问题

mercurial - Mercurial 书签和 Evolve 主题有什么区别?

单击链接时 jQuery 切换图像

java - 开关矩阵

java - 如何将 *.java 文本文件导入 Eclipse 项目?

git - 使用 develop 分支 Git 流程开发模型应用修补程序时,如何避免 Git 中的重复提交?