我是angular的新手,我的JavaScript很基础。我正在尝试编写解决数独难题的程序。 9x9网格将具有81个点或正方形。我认为,如果将这些点组织成三个相同的81列表,但组织了三种不同的方式,则可以更快地检查数独规则的违反情况(单个行,列或按扇区的3x3中没有重复的数字)。同样,按列,行和扇区。
所以:我想要一个包含三个Array的数组,这些Array包含九个包含九个点的Array。
我知道Array<Array<Point>>
的长度为9。我这样声明,当我用控制台日志仔细检查时,似乎它的长度为9。因此,我当时以为有9内的Array<Point>
为空。我认为我可以将点推到这9个数组中的任何一个,但是我没有运气。我不断得知grid[0][x]
是未定义的。有任何想法吗?谢谢。
gridByX:Array<Array<Point>> = new Array<Array<Point>>(9);
gridByY:Array<Array<Point>> = new Array<Array<Point>>(9);
gridByS:Array<Array<Point>> = new Array<Array<Point>>(9);
grid:Array<Array<Array<Point>>> = [this.gridByX, this.gridByY, this.gridByS];
constructor() {}
ngOnInit() {
this.populateGrid();
}
populateGrid(){
let counter = 0;
for (let x = 0; x < 9; x++){
for (let y = 0; y < 9; y++){
let point = new Point(counter, x, y);
this.grid[0][x].push(point);
this.grid[1][y].push(point);
this.grid[2][point.sector].push(point);
}
}
}
答案 0 :(得分:1)
gridByX:Array<Array<Point>> = new Array<Array<Point>>(9);
gridByY:Array<Array<Point>> = new Array<Array<Point>>(9);
gridByS:Array<Array<Point>> = new Array<Array<Point>>(9);
grid:Array<Array<Array<Point>>> = [this.gridByX, this.gridByY, this.gridByS];
constructor() {}
ngOnInit() {
this.populateGrid();
}
populateGrid(){
let counter = 0;
for (let x = 0; x < 9; x++){
for (let y = 0; y < 9; y++){
let point = new Point(counter, x, y);
grid[0][x] = grid[0][x] || [];
grid[0][x].push(point);
grid[1][y] = grid[1][y] || [];
grid[1][y].push(point);
grid[2][point.sector] = grid[2][point.sector] || [];
grid[2][point.sector].push(point);
}
}
}
在操作之前尝试定义index属性。
答案 1 :(得分:0)
所以我一直认为里面有9个空
Array<Point>
。
这是正确的。但是, null 数组与 empty 数组并不相同。在推到它之前,必须使用一个实际的数组对象实例化它。
请尝试以下三行解决方案:
gridByX:Array<Array<Point>> = new Array<Array<Point>>(9).fill().map(() => []);
gridByY:Array<Array<Point>> = new Array<Array<Point>>(9).fill().map(() => []);
gridByS:Array<Array<Point>> = new Array<Array<Point>>(9).fill().map(() => []);
fill
(不带参数)使用9个undefined
值对其进行初始化,然后将其替换为空数组。
答案 2 :(得分:0)
您不能在实例范围之外使用this
,因此该行:
grid:Array<Array<Array<Point>>> = [this.gridByX, this.gridByY, this.gridByS];
无法分配为类属性
只需离开grid:Array<Array<Array<Point>>>;
进行属性声明,然后在constructor() {}
调用中进行赋值