gpt4 book ai didi

java - java自动机的简单枚举

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:25 25 4
gpt4 key购买 nike

我正在尝试实现这个自动机示例:http://www.javacodegeeks.com/2012/03/automaton-implementation-in-java.html .

但是,运行程序时一直报错:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
String index out of range: 3
at java.lang.String.charAt(String.java:686)
at mealy.Input.read(Input.java:7)
at mealy.States$4.next(Input.java:46)
at mealy.Test.main(Test.java:9)

我尝试修改导致错误的行,但没有任何改变。有人可以看看这个程序并帮我找到解决方案吗?

我有以下 .java :

State.java :

interface State {
public State next(Input in);
}

注意:我必须将原来的“public Stat next()”更改为“public State next(Input in);”

输入.java :

class Input {
private String input;
private int current;
public Input(String input) {this.input = input;}
char read() { return input.charAt(current++); }
}

enum States implements State {
Init {
@Override
public State next(Input word) {
switch(word.read()) {
case 'a': return A;
default: return Fail;
}
}
},
A {
@Override
public State next(Input word) {
switch(word.read()) {
case 'a': return A;
case 'b': return B;
case 'c': return C;
case 'd': return null;
default: return Fail;
}
}
},
B {
@Override
public State next(Input word) {
switch(word.read()) {
case 'b': return B;
case 'c': return C;
case 'd': return null;
default: return Fail;
}
}
},
C {
@Override
public State next(Input word) {
switch(word.read()) {
case 'c': return C;
case 'd': return null;
default: return Fail;
}
}
},
Fail {
@Override
public State next(Input word) {
return Fail;
}
};

public abstract State next(Input word);
}

测试.java :

public class Test {
public static void main(String args[]){
State s;
Input in = new Input("abc");

for(s = States.Init; s != null || s != States.Fail; s = s.next(in)) {}
if(s == States.Init) {System.out.println("Valid!");}
else {System.out.println("Failed");}
}
}

最佳答案

Input 类中似乎存在错误。当您尝试读取最后一个字符之后的字符时,它会抛出您未在 main 中处理的异常。我会更改输入,以便它返回一个您可以在状态机中处理的 token 。

顺便说一句,我建议您查看此内容以了解上下文。 http://vanillajava.blogspot.co.uk/2011/06/java-secret-using-enum-as-state-machine.html

我假设 Attila 希望提供一个简单、有效的示例。我会看看他是否可以修复他的代码。

关于java - java自动机的简单枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19764063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com