【发布时间】:2018-08-01 19:15:19
【问题描述】:
我需要一些关于 Java 的帮助...
我必须在 Java 中实现一个 DFA,它可以识别包含在 /* 和 */ 之间的 Java cmets。
为了从简单的事情开始,假设 DFA 的字母表是:{'/', '*', 'a'},所以它只识别这 3 个元素。
可能接受的字符串:
1) /**/
2) /****/
3)/*a*a**/
4)/*a**/
不接受:
1) /*/
2)/**/***/
为了实现这一点,我开发了这个方法:
public static boolean scan(String s){
int i = 0, state = 0;
while(i < s.length() && stato >= 0){
final char ch = s.charAt(i++);
switch(state){
case 0:
if(ch == '/')
state = 1;
else
state = -1;
break;
case 1:
if(ch == '*')
state = 2;
else
state = -1;
break;
case 2:
if(ch == 'a')
state = 2;
else if(ch == '/')
state = 3;
else
state = -1;
break;
case 3:
if(ch == '*')
state = 4;
else
state = -1;
break;
case 4:
if(ch == ' ')
state = 4;
else
state = -1;
break;
}
}
System.out.println("State: " + state);
return state == 4;
}
但是对于最简单的输入/**/status 变量是-1,而它应该是4。
我应该做出哪些改变?
希望大家能帮帮我...
谢谢
【问题讨论】: