Java 状态转换表是如何工作的?

Java 状态转换表是如何工作的?,java,state,transition,state-machine,Java,State,Transition,State Machine,我想尝试制作一个状态机,但我对编程相当陌生。我读过一些关于状态转换表的内容,如果你输入了一些东西,它可以在状态之间切换。我不太明白它是如何工作的,以及它是如何转换为Java代码的。有人能解释一下吗?它实际上不是一台机器。在最简单的情况下,它是一个只包含一个名为state的整数变量的程序。程序读取整数输入,并根据输入和状态的当前值设置新的状态值 if (state == 0 && input == 0) { state = 1; } if (state == 1 &

我想尝试制作一个状态机,但我对编程相当陌生。我读过一些关于状态转换表的内容,如果你输入了一些东西,它可以在状态之间切换。我不太明白它是如何工作的,以及它是如何转换为Java代码的。有人能解释一下吗?

它实际上不是一台机器。在最简单的情况下,它是一个只包含一个名为
state
的整数变量的程序。程序读取整数输入,并根据输入和状态的当前值设置新的状态值

if (state == 0 && input == 0) {
    state = 1;
}
if (state == 1 && input == 1) {
    state = 2;
}
if (state == 2 && input == 2) {
    state = 3;
}
if (state == 3 && input == 4) {
    state = 4;
}
if (state == 4 && input == 8) {
    state = 5;
}
// many more such statements to cover all combinations of state and input values

您可以使用
开关大小写
,或者更复杂的类层次结构或
枚举
等,而不是如此长的
if
语句链。但是基于上述内容,概念应该很清楚。

状态机指的是跟踪相对于用户输入的状态的程序


我希望能够输入一个字符串,然后程序给出一个 消息和状态更改。例如:“做工作”,程序 说:“开始工作”并改变状态。过了一会儿,上面写着“完成” “正在工作”时,状态将变回。有点像一个非常小的 游戏

以你的评论为例,我们可以这样做

import java.util.Scanner;

enum GoingState {
   TO_HOME,
   TO_WORK,
   TO_SHOP, 
}

public class StateGame{

    public static GoingState state = GoingState.TO_WORK;

    public static void main(String args[]){
        Scanner scanIn = new Scanner(System.in);
        System.out.println("Where do you want to go?");
        if(scanIn.nextLine().toLowerCase().contains("home")){
            state = GoingState.TO_HOME;
            System.out.println("Going home.");
        }
        else if(scanIn.nextLine().toLowerCase().contains("work")){
            state = GoingState.TO_WORK;
            System.out.println("Going to work.");
        }
        else if(scanIn.nextLine().toLowerCase().contains("shop")){
            state = GoingState.TO_SHOP;
            System.out.println("Going to the shop.");
        }
        else{
            System.out.println("No valid input");
        }
    }
}
在上面的示例中,我使用
enum
s来跟踪状态,但它也可以是一个
int
字符串,或跟踪状态的
对象。当然,这是一个过度简化的例子

状态机通常使用状态转换映射(或表)跟踪哪些状态转换是可能的(我还没有这样做),这些映射告诉程序是否可以或应该从一种状态更改为另一种状态

状态图的一个非常简单的例子是,到您的状态只有一个线性过程,即在上面的例子中,只能从家到工作,工作到商店,然后再回来,而不能直接从商店到家,反之亦然。跟踪这一点可能相当简单,因为您可以将状态放在一个数组中,并检查用户想要去的位置是否高于或低于数组中的当前状态


我希望这能有所帮助。

嗯。。。地图怎么样?由于OP实际上提到了一个“表”,我想知道你只是指静态的而不是通用的解决方案。我希望能够输入一个字符串,然后程序会给出一条消息,状态会发生变化。例如:“做工作”,程序说:“去工作”并改变状态。过了一段时间,它说“工作完毕”,状态又变了回来。有点像一个非常小的game@Paranaix我认为OP是一个非常初级的理解。请随意添加一个更好的答案。