不退出“while”循环,但是为什么?

4

我这里有一个简单的程序,模拟了跳棋(但是不会跳,一枚棋子只能“吃掉”另一枚棋子)。我有一个简单的类实现了一个“Checkers”类对象,并创建了一个名为“chips”的整型数组变量。有一个“WHILE”语句,当chip [0]和chips [1]整数大于0时创建循环。代码如下:

public static void main(String [] args){

        Checkers c = new Checkers();
        c.init();
        c.printBoard();
        int[] chips = c.count();
        Scanner kbd = new Scanner(System.in);
        while(chips[0]>0 && chips[1]>0){
            System.out.println("\nYour move? 4 ints: src row, src col, dest row, dest col separated by [SPACE]");
            int srcR = kbd.nextInt();
            int srcC = kbd.nextInt();
            int destR = kbd.nextInt();
            int destC = kbd.nextInt();
            kbd.nextLine();
            c.move(srcR,srcC,destR,destC);
            c.printBoard();
            System.out.println(c.getMessage());
            c.count();
        }
    }

我在Checkers类中的计数方法如下:

public int[] count() {  

    int wht=0;
    int blk=0;

    System.out.println();

    for(int i=0; i<board.length;i++)    {
        for(int z=0; z<board[0].length;z++)     {
            if(board[i][z] instanceof White)    {
                wht++;
            }
            else if(board[i][z] instanceof Black)   {
                blk++;
            }
        }
    }

    int[] arr = {wht,blk};  
    System.out.println("Whites: "+wht+"\nBlacks: "+blk);    


    return arr;   
}

棋盘大小是8x8(即board.length),计数方法就是简单地返回“arr”的值,以便将其报告给“chips”,以决定chips [1]和chips [0] 是否都大于1(它们是否在棋盘上都至少有一个白色或黑色的棋子)。数组只应包含两个值(即 {white, black} )我已经尝试过以各种方式重新格式化整个count(),但这只是几种代码编译的方式之一。
以下是输出内容:
01234567
0|........
1|..B.....
2|........
3|........
4|........
5|..B.B.B.
6|.B.B.B.B
正如您所看到的,不再有任何白色棋子(应该在顶部)。希望我解释得足够清楚。谢谢。
哦,顺便说一句,我被告知不要触碰主方法。

我会说你的讲师在主函数中有一个错误,你应该问他 :) - nio
1个回答

5

你在循环中浪费了芯片计数...请更改以下行:

c.count();

into:

chips = c.count();

没问题。我知道这是一个非常简单的修复,所以谢谢你。不过,有人告诉我不要动主方法(即包含 c.count() 的 TestCheckers.java)。是否有办法在改变 count() 方法时使其正常工作? - user2403316
如果你想要修复这个问题,你需要写入到chips数组中。但是该数组仅在主函数中为本地变量,我不知道如何从count()中更改它,因为它无法看到主函数的变量。计数函数有其自己的本地作用域和变量...你应该明确指出main()中可能存在该错误。 - nio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接