我尝试编写代码来解决java游戏中的跳跃游戏,如果你有数组并启动索引来启动游戏跳转
起始索引他是你所站立的数字,因此你可以通过跳跃你所站号码所指示的空格数来向左或向右跳跃
目标:你想要到达该线远端(右侧)的0。您也可以保证只有一个零,这也将是最右侧。
因此,如果我达到目标并且返回False,则返回True,如果我没有,则返回True。
这是一个例子:
第一个数字是起始索引,第二个数字是数组的长度,数组是其余数字
6 8 2 3 4 6 3 5 2 0 : True
这是我的代码:
public static boolean game(int startindex,int[] array){
int startgame=array[startindex];
for(int p=0;p<=10;p++){
int play=array[0+startgame];
startgame+=play;
if(startgame>=array.length){
startgame-=play;
startgame-=play;
}
if(array[startgame]==0)
return true;
}
return false;
}
当我尝试这个例子时
3 8 2 3 4 6 3 5 2 0返回true
但是应该返回false,因为起始索引是3所以我从他的值= 6开始跳转左边6个空格或右边6个空格但是我无法达到0。
并尝试此时
6 8 9 9 9 9 9 9 1 0显示例外
我不知道为什么。任何人都可以帮助我
答案 0 :(得分:0)
由于这显然是家庭作业(不是我第一次看到这个问题),我只会给你一些伪代码和一些如何解决这个问题的提示。
您当前的算法无法正常运行,因为您将(1)最多只执行10个步骤,(2)如果前向跳跃太远,您将只回溯。此外,你永远不会检查向后跳跃是否可以在边界之外结束。
使这个递归算法非常简单:基本上,你只有三种情况:
false
0
,则返回true
另外,你可能想要记住你曾经去过的“踩踏石”,看看你是否“跳圈”。在这种情况下,也请返回false
。
总而言之,算法看起来像这样:
// inpt: input array, current: current position, seen: list/set of visited positions
boolean function jump(inpt, current, seen):
if current < 0 or current >= length(inpt) then
return false // jumped too far
if inpt[current] == 0 then
return true // goal found
if current in seen then
return false // jumping in circles
return (jump(inpt, current + inpt[current], seen + [current])
or jump(inpt, current - inpt[current], seen + [current]))
并将其称为jump([6, 8, 2, 3, 4, 6, 3, 5, 2, 0], 0, <empty list>)