我想尝试制作一个状态机,但我对编程还很陌生。我读过一些关于状态转换表的内容,如果您输入某些内容,则可以在状态之间切换。我不太明白它是如何工作的以及它如何转换为 Java 代码。谁能解释一下吗?
最佳答案
状态机是指跟踪与用户输入相关的状态的程序。
I want to be able to input a string and then the progam gives a message and the state changes. For example: "do work", the program says:"going to work" and changes state. after a while it says"done with working" and the state changes back. kind of like a very small game
使用评论中的示例,我们可以执行以下操作:
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
来跟踪状态,但它也可以很容易地是 int
或 String
,或者跟踪状态的对象
。当然,这是一个极其简单的例子。
状态机通常使用状态转换图(或表)来跟踪哪些状态转换是可能的(我没有这样做),它告诉程序是否可以或应该从一种类型的状态更改为另一种类型的状态。
州 map 的一个非常简单的示例可能是,您的州只有线性进展,即在上面的示例中,只能从家到工作地点,从工作地点到商店,然后再返回,而无法直接从商店到家,反之亦然。跟踪这一点可能相当简单,因为您可以将状态放入数组中,并检查用户想要前往的位置是否高于或低于数组中的当前状态。
我希望这会有所帮助。
关于java - 状态转换表如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20286492/