我正在编写一个不给我任何输出的拼图程序

时间:2015-04-19 22:24:26

标签: java algorithm recursion

如果拼图是可解的,则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处。

1 个答案:

答案 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,所以这似乎是一个错字?

我建议您在编译代码时详细查看编译器提供给您的错误消息。我还没有检查过所有内容,在确定了我的四点之后可能仍有问题。