Как я могу напечатать данный шаблон только с al oop и внутренним l oop? Вместо 4 петель - PullRequest
0 голосов
/ 16 апреля 2020

Это фрагмент кода, который должен пометить поле епископа (шахматная фигура)
К сожалению и, очевидно, я получаю массив исключений за пределами границ - может кто-нибудь решить вопрос, пожалуйста?

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

Нет необходимости помогать мне с распечаткой х или о , у меня есть рабочая функция, которая делает это очень хорошо

 public void markField(int x, int y){

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

1 Ответ

1 голос
/ 16 апреля 2020

Два for-loops достаточно, чтобы сделать это, однако, вам нужно будет иметь некоторые дополнительные переменные, чтобы сделать это. Код:

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