试着抓住我的程序混乱

时间:2012-09-04 07:31:33

标签: java list try-catch

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

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

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

position.getPositionNumber()返回1到100之间的整数值范围。

我在课堂上有蛇的arrraylist。

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

如果这两条蛇的头部相同,那么它就必须忽略一条蛇(最新的蛇)并给其他蛇带来其他蛇。

这是董事会成员:

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());
            }
    }         
}

下面给出了snakegenerator类。

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块时遇到问题。

1 个答案:

答案 0 :(得分:1)

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

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

我建议您尝试使用调试器调试程序,方法是逐步完成代码并了解它的实际用途。

BTW:抛出一个异常并立即捕获它是令人困惑和毫无意义的。