当前位置: 首页 > 知识库问答 >
问题:

Java:为什么一个字符2D数组上的循环不包括最后一个字符?[重复]

马俊
2023-03-14

我是Java新手,我正在为TictaToe游戏实现一个游戏板。为了在游戏结束后清理棋盘,我尝试使用一种方法,使用两个嵌套循环将完全按照游戏开始时的方式重新放置棋盘。问题是,最后的单元格保持不变。这是我的代码:

public class CharLoopTest {
    static char[] [] board = {{'X','|','O','|','O'},
            {'_', '|', '_','|','O'},
            {'X','|','_','|','X'}};
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        clearBoard(board);
    }
    public static void clearBoard(char [] [] board) {
        for(int r = 0; r < board.length; r++){
            for(int c = 0; c < board.length; c++++) {
                if(board[r][c] == 'X' || board[r][c] == 'O') {
                    board[r][c] ='_';
                }
                
            }    
        }
        printBoard(board);
    }
    public static void printBoard(char [] [] board) {   
        for(char [] row: board) {
            for(char column: row) { 
                System.out.print(column);   
            }
            System.out.println();   
        }
    }
}

输出:

_|_|O
_|_|O
_|_|X

我正在努力弄清楚为什么迭代器没有达到数组长度的位置[行][4]。我尝试递增索引,但这样int将迭代出界。这是目前唯一的工作方式:

public static void clearBoard(char [] [] board) {
        for(int r = 0; r < board.length; r++){
            for(int c = 0; c < board.length; c++) {
                if(board[r][c] == 'X' || board[r][c] == 'O') {
                     board[r][c] ='_';
                     board[0][4] = board[r][c]; //cleans last cells
                     board[1][4] = board[r][c];
                     board[2][4]= board[r][c]; 
                }
                
            }    
        }
        printBoard(board);
    }

每一个暗示都将非常感激。提前非常感谢。

共有1个答案

封德华
2023-03-14

问题是你有一个3x5的网格。board.length然后返回3,即使你想迭代每个数组的内容,你也在调用board.length。如果将第二个for循环中的条件更改为c

 类似资料:
  • 问题内容: 这是代码片段: 输出为: 为什么会这样呢?我认为是,要么,或。 这里发生了什么? 问题答案: 二是算术加法,不是字符串连接。您必须执行或之类的操作,或使用和方法来确保操作符中的至少一个是用于字符串串联的运算符。 [JLS 15.18加法运算符](http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#

  • 问题内容: 以下代码段发出编译时错误。 第二行的错误是: 该错误消息基于NetBeans IDE。 如下声明该字符时。 编译时错误消失。 与最终字符串的情况无关 什么是修改有所作为吗? 问题答案: 原因是JLS#5.2(分配转换)如此表示: 如果该表达式是类型为byte,short,char或int的常量表达式(第15.28节),则当变量的类型为byte,short或char且常量表达式的值时,可

  • 每当“q”被写为我附加TextWatcher的edittext的最后一个字符时,这个“q”就会被替换为“a”。我使用: 但是,当我测试代码时,当我输入“q”时,什么也没发生。一些帮助?非常感谢。

  • 问题内容: 我已经在SOAP消息中工作过,以从Web服务获取LoginToken,并将LoginToken存储在String中并用于打印。此打印[wdsd34svdf],但我只想wdsd34svdf,如何删除方括号。请任何人帮助我。 谢谢 例: 输出:[wdsd34svdf]我想要wdsd34svdf 问题答案: 这很容易,您需要先找到[和]的索引,然后再找到子字符串。(这里[总是在开始处,]在结

  • 问题内容: 在我的应用程序中,我将附加一个字符串以创建路径以生成URL。现在,我想在按“后退”按钮时删除该附加字符串。 假设这是字符串: 现在我想要一个这样的字符串: 我怎样才能做到这一点? 问题答案: 您可以使用相同的方法

  • null 我对解析和的最佳猜测如下。此regex似乎将所有输入计算为: