C ++ |Матрица добавляет странные значения - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь смоделировать шахматные движения, но как-то внутри массива появляются значения вне размера массива.

Я пытаюсь выяснить, что не так, но не могу найти решение.

У меня есть пример код:

#include <iostream>
using namespace std;
int x1,y1;
int main(){
  int n=10;
  int x=5;
  int y=0;
  char tablero[n][n];
  for(int i=0; i<n; i++){
    for(int j=0; j<n; j++){
      tablero[i][j]='.';
      }
    }
    for(int i=0; i<n; i++){
      for(int j=0; j<n; j++){
        if(j==x || j==y){
            tablero[x][y]='k';
            x1=x-1; y1=y-1; tablero[x1][y1]='x';
            x1=x-1; y1=y; tablero[x1][y1]='x';
            x1=x-1; y1=y+1; tablero[x1][y1]='x';
            x1=x; y1=y-1; tablero[x1][y1]='x';
            x1=x; y1=y+1; tablero[x1][y1]='x';
            x1=x+1; y1=y-1; tablero[x1][y1]='x';
            x1=x+1; y1=y; tablero[x1][y1]='x';
            x1=x+1; y1=y+1; tablero[x1][y1]='x';
        }
      }
    }
    for(int i=0; i<n; i++){
      for(int j=0; j<n; j++)
        cout<<tablero[j][i];
      cout<<endl;
    }
}

Код должен выводить это:

....xkx...
....xxx...
..........
..........
..........
..........
..........
..........
..........
..........

Вместо из этого выход :

....xkx...
....xxx...
..........
..........
..........
..........
..........
..........
..........
...xxx....

Как я могу это исправить?

PS Я новичок в этом: P

1 Ответ

0 голосов
/ 02 июня 2018

Эта ошибка связана с тем, что вы используете отрицательные значения в ваших индексах массива.Поскольку y==0, есть некоторые y1, которые будут равны -1 (т. Е. y1=y-1 => y1=0-1 => y1=-1).Вы никогда не должны использовать отрицательные значения в ваших индексах массива.Ваш код будет иметь неожиданное поведение, когда x==0 или x==n-1 или y==n-1 также.

Если вы замените блок if на if(j==x || j==y) следующим кодом, вы получите ожидаемый результат.

for(int k=0; k<9; k++){
    x1=(x + (k%3) - 1);
    y1=(y + (k/3) - 1);
    if(!(x1<0 || y1<0 || x1 >= n || y1>=n))
        tablero[x1][y1]='x';
}
tablero[x][y]='k';
...