我如何使我的程序多次成功地追溯命令?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何使我的程序多次成功地追溯命令?相关的知识,希望对你有一定的参考价值。
在开始讨论我的问题之前,这里是有关我的问题的程序的简短概述,以便您理解。我的程序与机器人有关,下面代表了我的程序对机器人执行的一些命令。用户输入的命令存储在commandList.size数组中。
- L命令表示机器人向左转。
- F命令表示机器人向前移动。
- T命令表示机器人从以下位置向后追溯命令用户输入到程序中。例如,如果用户已经输入命令“ L COMMAND,R COMMAND”,则用户输入“ T 2”,这将需要使机器人向右转然后向左转,以便向后读取命令数组。 “ T 2”表示回溯前两个命令。
问题
[如果用户让我的机器人左转,则用户输入“ T 1”以追溯先前输入的命令,然后在用户使机器人前进后,键入“ T 2”以追溯前两个命令,程序将停止工作。该程序应使机器人前进,然后向左转,因为这是最后输入的两个命令。需要忽略“ T 1”命令,因为这没有计算在内。如何使我的程序多次成功地追溯命令?
另一个例子
L COMMAND (Turn left)
"T 1" (Retrace the left command - this work)
B COMMAND (Move backwards)
"T 2" (THIS IS WHERE THE PROGRAM STOPS WORKING - the program needs to skip "T 1" and retrace the F command / B command - Here is the issue) you understand?
上面的问题与我在程序中确定的T命令有关。
控制台示例以突出显示该问题-这不起作用。机器人应向后移动并向右移动。 T 1命令应忽略。
>Move robot right
>T 1 to retrace last step which works
>Backwards command
>T 2 retrace last two commands.
T命令代码
否则,如果(part.length == 2){
if (part[0].equals("T") && represents(part[1])) {
robot.saySomething("Retracing your desired commands");
int speakingDelay = 3000;
try {
TimeUnit.MILLISECONDS.sleep(speakingDelay);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int a = Integer.parseInt(part[1]);
//checking if user has requested more then executed commandList
if (commandList.size() >= a) {
int index = commandList.size() - 1;
for (int i = 0; i < a; i++) {
commandHistoryList.add(commandList.get(index));
index--;
}
System.out.println(commandHistoryList);
limit = commandList.size() - 1;
terms = commandList.size() - a - 1;
} else {
System.out.println("limitimun Value exceeded
");
invalidInputs++;
}
} else {
System.out.println("Invalid Command
");
invalidInputs++;
}
}
T命令代码的控制台输出
User1999 please enter a command.
L 2 100
Moving Left
User1999 please enter a command.
L 2 100
Moving Left
User1999 please enter a command.
R 2 100
Moving Right
User1999 please enter a command.
R 2 100
Moving Right
User1999 please enter a command.
L 2 100
Moving Left
User1999 please enter a command.
L 2 100
Moving Left
User1999 please enter a command.
R 2 100
Moving Right
User1999 please enter a command.
T 3
[R 2 100, L 2 100, L 2 100]
Moving Right
Moving Left
Moving Left
User1999 please enter a command.
B 2 100
Moving Backwards
User1999 please enter a command.
B 2 100
Moving Backwards
User1999 please enter a command.
T 3
[R 2 100, L 2 100, L 2 100, B 2 100, B 2 100, T 3]
Moving Backwards
Moving Backwards
[R 2 100, L 2 100, L 2 100, B 2 100, B 2 100, T 3, B 2 100, B 2 100, T 3]
Moving Backwards
Moving Backwards
[R 2 100, L 2 100, L 2 100, B 2 100, B 2 100, T 3, B 2 100, B 2 100, T 3, B 2 100, B 2 100, T 3]
Moving Backwards
Moving Backwards
[R 2 100, L 2 100, L 2 100, B 2 100, B 2 100, T 3, B 2 100, B 2 100, T 3, B 2 100, B 2 100, T 3, B 2 100, B 2 100, T 3]
Moving Backwards
答案
尝试:
if (commandList.size() >= a) {
commandHistoryList.clear(); // don't rerun previous reruns.
int index = commandList.size() - 2; // exclude the T command
for (int i = 0; i < a; i++) {
commandHistoryList.add(commandList.get(index));
index--;
...
很明显,如果您在代码的其他地方使用commandHistoryList,则会破坏它。
更新:如果这行得通,那么如果T X导致执行上一条T命令,则您将不得不执行某些操作。必须在循环中跳过这一点。
以上是关于我如何使我的程序多次成功地追溯命令?的主要内容,如果未能解决你的问题,请参考以下文章
(discord.py) 如何使我的 setprefix 命令正常工作?
android studio中片段内的RecyclerView使我的应用程序崩溃