没有退出“while”循环,但为啥呢?

Posted

技术标签:

【中文标题】没有退出“while”循环,但为啥呢?【英文标题】:not exiting out of "while" loop, but why?没有退出“while”循环,但为什么呢? 【发布时间】:2013-08-04 21:15:56 【问题描述】:

所以我在这里有一个简单地模仿跳棋的程序(但不是跳跃,而是一个棋子简单地“吃掉”另一棋子)。我有一个简单的类,它实现了一个“Checkers”类对象并创建了一个名为“chips”的 int 数组变量。有一个“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 类中的 count 方法如下所示:

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;   

board 是 8 x 8(board.length 就是这个),count 方法就是简单的返回 "arr" 的值,这样它就可以报告回 "chips" 来决定是否有chips[ 1] 和chips[0] 都大于一(它们在棋盘上都至少有一个白色或黑色棋子。)数组应该只包含两个值(即。white,black;)我'已经尝试以各种方式重新格式化整个 count() ,但这只是代码编译的几种方式之一。

这是输出:

01234567

0|........

1|..B.....

2|........

3|........

4|........

5|..B.B.B.

6|.B.B.B.B

如您所见,不再有白色棋子(应该在顶部)。考虑到这可能是一个在我眼皮底下盯着看的简单解决方案,我将不胜感激,但它很烦人,所以我希望我解释得足够好。谢谢你。

哦,顺便说一句,我被告知根本不要碰主要方法。

【问题讨论】:

我会说你的讲师在主函数中有错误,你应该问他:) 【参考方案1】:

您正在丢弃循环中的筹码数... 换行:

c.count();

进入:

chips = c.count();

【讨论】:

那行得通。我知道这是一个非常容易解决的问题,所以谢谢。尽管如此,我被告知不要触摸主要方法(TestCheckers.java,其中包含 c.count(); )。有没有办法在更改 count() 方法时起作用? 如果你想解决这个问题,你必须写入芯片数组。但是该数组仅对主函数是本地的,我不知道如何从count() 更改它,因为它看不到主函数变量。 count 函数有自己的局部作用域和变量……你应该明确指出 main() 中可能存在错误。

以上是关于没有退出“while”循环,但为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥while循环有时会在满足退出条件之前退出?

PHP过早退出while循环

一个linux shell脚本 为啥 不能自动退出呢

shell:为啥循环内调用脚本,遇到exit会退出循环?

带有 Paramiko 的嵌套 SSH 退出 while 循环

为啥我的 Java 程序在捕获到异常后退出?