-2

私は小さなヘビとはしごゲームを開発しています。このゲームでは、ヘビが論理的にヘビを構築しているかどうかを確認するsnakesgeneratorクラスを生成しています。

ヘビの頭と尾の頭と尾の配列を取りました。

snakeクラスにはgetTail()getHead()ボード上のオブジェクトの位置を返すメソッドがあります。

position.getPositionNumber()1から100までの整数値の範囲を返します。

クラスボードにヘビのアレーリストがあります。

snakegeneratorは、ヘビが論理的に正しいかどうかを検証するクラスです(構造が間違っているヘビを削除する必要があります)。

2匹のヘビが同じ頭を持っている場合、1匹のヘビ(最新のヘビ)を無視し、他のヘビと一緒にボードを与える必要があります。

これはボードクラスです:

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

重複を1つだけ削除でき、プログラムは終了しています。

trycatchブロックの使用に問題があると思います。

4

1 に答える 1

1

私の推測では、例外をスローしていますが、それを無視している、つまり出力していないため、それが何であるか、何が原因であるかがわかりません。

あなたの問題は、ヘビを削除すると、予想よりもアイテムが少なくsnakesなり、そこから要素を取得しようとしていることだと思います。

コードをステップ実行して、実際に何をしているのかを理解することで、デバッガーでプログラムをデバッグすることをお勧めします。

ところで: 例外をスローしてすぐにキャッチすることは、混乱を招き、無意味です。

于 2012-09-04T07:40:41.980 に答える