Cell[][] grid; int cols = 10; int rows = 10; void setup(){ size(200, 200); grid = new Cell[cols][rows]; for(int i = 0; i < cols; i ++){ for(int j = 0; j < rows; i ++){ grid[i][j] = new Cell(i*20, j*20, 20, 20, i+j); } } } void draw(){ background(0); for(int i = 0; i < cols; i ++){ for(int j = 0; j < rows; i ++){ grid[i][j].oscillate(); grid[i][j].display(); } } } class Cell{ float x; float y; float w; float h; float angle; Cell(float x_, float y_, float w_, float h_, float angle_){ x = x_; y = y_; w = w_; h = h_; angle = angle_; } void oscillate(){ angle += 0.02; } void display(){ stroke(255); float bright = map(sin(angle), -1, 1, 0, 255); fill(bright); rect(x, y, w, h); } }这段代码的问题怎么解决
时间: 2023-06-19 17:08:27 浏览: 37
在两个 for 循环中,第二个循环中的 i 和 j 的自增应该改为 j++,而不是 i++。所以代码应该改为:
```
for(int i = 0; i < cols; i++){
for(int j = 0; j < rows; j++){
grid[i][j] = new Cell(i*20, j*20, 20, 20, i+j);
}
}
```
同样的,第二个 for 循环中也应该将 i++ 改为 j++,即:
```
for(int i = 0; i < cols; i++){
for(int j = 0; j < rows; j++){
grid[i][j].oscillate();
grid[i][j].display();
}
}
```
这样就可以正常运行了。
相关问题
grid = new int *[grid_rows];
这是在C++中创建一个二维整数数组的代码片段。它使用了`new`关键字来动态分配内存,并创建了一个名为`grid`的指针数组。
首先,它创建了一个指针数组`grid`,这个数组有`grid_rows`个元素。每个元素都是一个指向整数的指针。
然后,通过循环遍历每个数组元素,使用`new`关键字为每个元素分配一个整数数组,这个数组的大小为`grid_cols`。
最终,你将得到一个大小为`grid_rows x grid_cols`的二维整数数组,可以通过`grid[i][j]`来访问和操作其中的元素。记得在不需要使用这个数组时,使用`delete[]`关键字释放内存,以避免内存泄漏。
int **arr=new int *[rows]
根据提供的引用内容,你提到了一个函数的声明:`void replace(int* arr,int rows, int cols,int value);`。这个函数的作用是将二维数组中的所有元素替换为给定的值。
如果你想创建一个二维数组 `arr`,并且数组的行数为 `rows`,可以使用以下代码示例:
```cpp
int **arr = new int *[rows];
for (int i = 0; i < rows; i++) {
arr[i] = new int[cols];
}
```
这段代码使用了动态内存分配来创建一个二维数组。首先,我们创建了一个指向指针的指针 `arr`,它有 `rows` 个元素。然后,我们使用循环为每个指针分配一个大小为 `cols` 的整型数组。
请注意,使用动态内存分配后,需要在不再使用数组时手动释放内存,以避免内存泄漏。可以使用以下代码释放内存:
```cpp
for (int i = 0; i < rows; i++) {
delete[] arr[i];
}
delete[] arr;
```
这段代码使用循环释放每个指针指向的数组内存,然后释放指向指针的指针 `arr` 的内存。