java - 如何只用一个循环和一个内循环打印给定的图案?而不是使用 4 个循环

标签 java loops indexoutofboundsexception chess

这是代码片段,应标记主教的领域(国际象棋人物)
遗憾的是,显然我遇到了数组越界异常 - 有人可以解决这个问题吗?

int i = 1, j = 1;

 while (i <= 8) {
      board.markField(9-i, i);

      i++;

      while (j <= 8) {

          board.markField(j, i); // here is the error
          j++;      // j =2
          break;
      }
  }

所需输出

o o o o o o o x
x o o o o o x o
o x o o o x o o
o o x o x o o o
o o o x o o o o
o o x o x o o o
o x o o o x o o
x o o o o o x o

没有必要帮助我打印 xo,我有一个工作函数,这非常好

 public void markField(int x, int y){

     board[x-1][y-1] = true;
 }

最佳答案

两个 for 循环 足以完成它,但是,您必须有一些额外的变量才能完成它。代码:

int start = 0, end = 7;
boolean flag = false;
for(int i= 0; i<8; i++)
{
    if(i > 0)
        flag = true;
    for(int j= 0; j<8; j++)
    {
        if(flag && j==start)
        {
            //System.out.printf("x ");
            board.markField(i,j);
            start++;
            if(start == end+1)
                end--;
            flag = false;
            continue;
        }

        if(j==end)
        {
            //System.out.printf("x ");
            board.markField(i,j);
            end--;
            continue;
        }
        //System.out.printf("o ");
        board.markField(i,j);
    }
    //System.out.println();
}

由于我们使用正确的数组索引调用 markField(),因此,请像这样更改您的 markField():

public void markField(int x, int y){

 board[x][y] = true;
}

关于java - 如何只用一个循环和一个内循环打印给定的图案?而不是使用 4 个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61253578/

相关文章:

r - 通过具体示例了解 R 循环中的迭代编码

c - C中for循环的逻辑

java - 优先级队列/ArrayList 的 IndexOutOfBoundsException

android - 从android kotlin中的文件夹获取图像列表

java - 从java发送可点击的url

java - 从 Java 检索在网页上动态呈现的 SVG

java - java的SecureRandom类中的getSeed()和generateSeed()函数之间的区别?

java - 对象占位符?

java - 如何分解一个数字并将其数字相乘?

java - 代码错误 : Exception in thread "main" java. lang.ArrayIndexOutOfBoundsException: 1