-2

我正在开发一个小蛇和梯子游戏,其中我正在生成蛇生成器类,该类验证蛇是否在逻辑上构造蛇。

我已经为蛇的头部和尾部采取了头部和尾部阵列。

蛇类具有返回对象在棋盘上的位置的getTail(),方法。getHead()

position.getPositionNumber()返回从 1 到 100 的整数值。

我在班板上有蛇的排列清单。

蛇生成器是一个验证蛇在逻辑上是否正确的类(它必须删除构造错误的蛇)。

如果两条蛇的头相同,则它必须忽略一条蛇(最新的蛇)并与其他蛇一起给棋盘。

这是板级:

public class Board {

    private int[] head = { 15,16,15,15};
    private int[] tail = {3,4,5,6};
    List<Snake> snakes = new ArrayList();
 public void getBoard()  {
        Snake snake;

 ListIterator<Snake> listIterator = snakes.listIterator();
        while (listIterator.hasNext()) {
            snake = listIterator.next();
            System.out.println(snake.getHead().getPositionNumber());
        }

             SnakesGenerator snakesGenerator = new SnakesGenerator(snakes);

          snakes=snakesGenerator.addSnakes();
          listIterator = snakes.listIterator();
            while (listIterator.hasNext()) {
                snake = listIterator.next();
                System.out.println(snake.getHead().getPositionNumber());
            }
    }         
}

下面给出了蛇生成器类..

public class SnakesGenerator {

    List<Snake> snakes = new ArrayList();

    public SnakesGenerator(List<Snake> snakes) {
        super();
        this.snakes = snakes;
    }

    @SuppressWarnings("unchecked")
    public List<Snake> addSnakes() {
        Snake snake;
        Snake snakePrevious = null;

        Collections.sort(snakes, new SnakesCompator());
            int i=0;
        // ListIterator<Snake> listIterator = snakes.listIterator();
        // System.out.println("hai this is addsnakes");
        for (Snake s : snakes)
            System.out.println(s.getTail().getPositionNumber());

                snakePrevious =snakes.get(0);

        System.out.println("before the method execution"
                + snakePrevious.getTail().getPositionNumber());
        for(i=1;i<3;i++) {

            snake=snakes.get(i);
            System.out.println(snake.getTail().getPositionNumber());

            try {
                if (snakePrevious.getHead().getPositionNumber() == snake
                        .getHead().getPositionNumber()) {
                    snakes.remove(snake);
                    throw new Exception("two snakes have same head..");

                }
            } catch (Exception e) {

                for (Snake s : snakes)
                              System.out.println(s.getTail().getPositionNumber());
            }
            snakePrevious = snake;
        }
        return snakes;
    }
}

我只能删除一个重复项并且程序正在终止。

我认为我在使用 try catch 块时遇到了问题。

4

1 回答 1

1

我的猜测是你抛出了一个异常,但是因为你忽略了它,即没有打印出来,你不知道它是什么或导致它的原因。

我怀疑你的问题是,当你移除一条蛇时,你的物品比你预期的要少,而你正试图从中获取一个snakes不再存在的元素。

我建议您通过单步调试代码并了解它的实际作用,尝试使用调试器调试您的程序。

顺便说一句:抛出异常并立即捕获它是令人困惑且毫无意义的。

于 2012-09-04T07:40:41.980 回答