我的问题是关于可扩展的逻辑分支。
有没有一种优雅的方法可以在 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 的主类 GUI 类提供三种服务:userInput、userOptions 和 outputArea。
目前处理我的问题逻辑的 DecisionTreeStage1 类(使用 switch 语句)。LocationTracker 类旨在跟踪我在 DecisionTreeStage1 类中的位置 DialogueToOutput 类可更改用户拥有的选项,并使用他们的操作结果更新输出字段。
特殊兴趣点:我想在某个时候有多个决策分支和一棵主树(也许称它为 Yggdrasil?:D)。目前,DecisionTreeStage1 代表一个非常孤立的系统,不打算去任何地方。我希望使用存储在我的数组中的阶段变量从一个主要分支移动到下一个(如果你愿意,可以爬树)。我目前的实现只是使用嵌套的 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 的更新)如果它导致另一个分支路径怎么办?这会导致另一条分支路径吗?最终,我希望所有路径都汇聚在同一个位置,这样我就可以进入下一个“阶段”。
我真正的希望是让这个问题无限扩展。我希望能够根据需要深入到一个分支,而不必每次都在我的决策点数组中创建静态和任意数量的变量声明。
就像我说的那样,我无法找到有关此的太多信息。
让我尝试提出这个问题:除了以下内容之外,是否还有其他分支逻辑语句:
if(something)
stuff;
else
otherStuff;
和
switch(something) {
case 1:
stuff;
break;
case 2:
otherStuff;
break;
如果是这样,它们是什么?
PS - 我知道 Java 中的三元 if 语句,但它似乎对我正在做的事情没有用。:)