希望我能正确理解这个问题.您要用户按顺序输入单词“一个”,“两个”,“三个”等,并在成功输入的每个步骤中播放测试声音吗?
在这种情况下,请考虑以下事项:
import java.util.Queue;
import java.util.LinkedList;
Queue inputs = new LinkedList();
inputs.push("one");
inputs.push("two");
inputs.push("three");
// etc
// Then to check the user input
for (String match : matches) {
if (match.equals(inputs.peek())) {
inputs.pop(); // Removes the element you just matched
testSound.start();
}
}
请注意,这假设您要在每个步骤上执行相同的操作.如果您可以更多地描述您对“正确响应”行为的要求,我可以提供更准确的答案.
我们在上面使用一个队列,因为它的排序为First-In-First-Out.这意味着匹配项必须按照它们添加的顺序显示(上述所有push语句).在循环内部,当成功匹配发生时,将检查下一个所需的匹配.例如,使用包含(“三个”,“两个”,“一个”)的队列和包含(“一个”,“两个”,“三十”)的匹配项,循环将执行如下操作:
>匹配“一个”将与队列的开头“一个”进行比较
>匹配,所以我们“弹出”头部,将(“三个”,“两个”)留在队列中
>下一个匹配项“两个”将与队列的开头(现在为“两个”)进行比较
>这匹配,所以我们再次弹出头部,将(“三个”)留在队列中
>下一场比赛“三十”将与队列的开头(现在为“三”)进行比较
>这不匹配,因此队列不会发生进一步的变化
如果您希望每个匹配项都有特定的行为(即,当“一个”匹配项时执行某些操作,而在“两个”匹配项时执行其他操作,等等),您可以进行如下所示的连接(除了上述内容外)
public interface MatchAction {
public void doTheThing();
}
Map actionMap = new HashMap();
// Fill this bad boy up
actionMap.put("one", new MatchAction() { public void doTheThing() { /* do stuff */ } });
// Etc for each action (you can reuse instances here if some actions are the same)
// Then, we modify the check above to be:
for (String match : matches) {
if (match.equals(inputs.peek())) {
String input = inputs.pop();
MatchAction action = actionMap.get(input);
if (action != null) action.doTheThing();
}
}