如果拼图是可解的,则getSolution方法返回一个包含所访问索引的字符串 因此,对于第一个谜题,它将返回[0,3,2,5,7,8]。
import java.util.*;
public class JumpPuzzle {
private final List<Integer> board;
private final List<Integer> visitedIndices = new ArrayList<Integer>();
public JumpPuzzle(List<Integer> board) {
this.board = board;
}
public boolean canSolve() {
return getSolution(0);
}
private boolean getSolution(int index) {
int lastIndex = board.size() - 1;
if(index == lastIndex) {
return true;
}
if(index < 0 || index > lastIndex || visitedIndices.contains(index)) {
return false;
}
visitedIndices.add(index);
int step = board.get(index);
return getSolution(index + step) || getSolution(index - step);
}
Puzzle puzzle = new Puzzle(Arrays.asList(5, 5, 1, 1, 1, 2, 0));
System.out.println("Puzzle is solvable: " + puzzle.canSolvable() ? "yes" : "no");
}
我无法修复预期的标识符,我没有得到任何输出。使用拼图数组的每个元素,并且数组中的整数是 正数,除了最右边的一个,为零,并且起始索引不超出界限。该 最左边的数字在数组中的索引0处。
答案 0 :(得分:0)
好的......从哪里开始。
首先,您的问题陈述和您的实施不会混合在一起。
如果拼图是可解的,则getSolution方法返回一个String(...)
您的getSolution
方法返回一个布尔值。
其次,你有这两行代码......
Puzzle puzzle = new Puzzle(Arrays.asList(5, 5, 1, 1, 1, 2, 0));
System.out.println("Puzzle is solvable: " + puzzle.canSolvable() ? "yes" : "no");
据我所知,他们不在方法或静态阻止中。您声明JumpPuzzle
具有puzzle
属性,并且在方法正文之外放置System.out.println
是语法错误。
第三,您已将您的班级命名为JumpPuzzle
,但正在创建Puzzle
个实例。也许您忘记包含Puzzle
类的代码,该类将是JumpPuzzle
的子类,但puzzle
变量似乎更有可能是JumpPuzzle
类型的类型代替。
第四,同样,如果Puzzle
类延伸JumpPuzzle
,但我没有看到方法canSolvable
,则不适用。 (在此使用:System.out.println("Puzzle is solvable: " + puzzle.canSolvable() ? "yes" : "no");
)。你有一个方法canSolve
,所以这似乎是一个错字?
我建议您在编译代码时详细查看编译器提供给您的错误消息。我还没有检查过所有内容,在确定了我的四点之后可能仍有问题。