Wey*_*ani 1 java if-statement function parameter-passing
我所做的是以有限字母表字符串的形式制定生产规则,将其复制到 char 数组中,然后通过 if 语句运行它,该语句根据字符调用函数。
如“lff[f]”调用functionL、functionF、functionF、functionOpenB、functionF、functionCloseB。
所以目前它:
workRuleArr= stringProdrule.toCharArray();
for (char c=0; c < workRuleArr.length; c++){
if (workRuleArr[c] == 'f')
{
functionF();
}
if (workRuleArr[c] == 'l')
{
functionL();
}
Run Code Online (Sandbox Code Playgroud)
ETC
然而,这很好并且有效:
我如何将参数从生产规则(例如“l(100)ff..”)传递给这些函数,以便它调用 functionL(x)... 其中 x = 100 并将 100 传递给函数?
在同一个产生式规则字符串中,x 可能有许多不同的值。用户在程序开始时一次性输入规则,因此需要在同一生产规则中处理多个参数
任何想法将不胜感激,如果问题不清楚,请告诉我。谢谢
在我看来,那些“规则函数”都有类似的目的,因此它们遵循相同的接口,例如
interface Rule{
void executeRule();
}
Run Code Online (Sandbox Code Playgroud)
然后你有不同的规则来实现该接口,例如
class RuleF implements Rule{
void executeRule(){
//execute rule F
}
}
class RuleL implements Rule{
void executeRule(){
//execute rule L
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要一种简单的方法将字符与给定规则关联起来。使用 HashMap,例如:
Map<Character, Rule> ruleMap = new HashMap<Character, Rule>();
ruleMap.add('f', new RuleF());
ruleMap.add('l', new RuleL());
Run Code Online (Sandbox Code Playgroud)
这样你就可以删除所有这些“如果”,比如
workRuleArr= stringProdrule.toCharArray();
for (char c=0; c < workRuleArr.length; c++){
Rule rule = ruleMap.get(workRuleArr[c]);
rule.executeRule();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您需要 Rule 接口接收参数,您还需要一个类似的 Map 对象来将字符与您需要传递的参数关联起来。
您到底在构建什么?某种状态机?
干杯,祝你好运!:-)