【发布时间】:2022-01-04 01:22:18
【问题描述】:
我有一个包含坐标对象的数组。一开始,一个 for 循环分配值,使 v(1] 变为 v[0] (也是我想要的)。然后我独立更改 v[0],但 v(1] 现在也在更改。这不是假设会发生什么。你怎么解决这个问题?使用的输入:方向 = "R",宽度 = 26,高度 = 26。(屏幕截图下的代码)。
代码:
package Snake;
import java.util.Random;
import java.util.Locale;
import java.util.Scanner;
import ui.Event;
import ui.SnakeUserInterface;
import ui.UserInterfaceFactory;
public class Snake {
int lengthOfSnake;
Coordinate[] snakePosition = new Coordinate[20];
Snake() {
lengthOfSnake = 2;
}
void initializeSnake() {
for(int i = 0; i< 20; i++) {
snakePosition[i] = new Coordinate();
}
snakePosition[0].x = 1;
snakePosition[0].y = 0;
}
void move(String direction, int width, int height) {
for(int i = lengthOfSnake - 1; i >0; i--) {
snakePosition[i].x = snakePosition[i-1].x;
snakePosition[i].y = snakePosition[i-1].y;
System.out.printf("index %d: %d.%d\n", i, snakePosition[i].x, snakePosition[i].y);
}
System.out.println();
if(direction.equals("R")) {
snakePosition[0].x += 1;
snakePosition[0].x = snakePosition[0].x % width;
}
else if(direction.equals("L")) {
snakePosition[0].x -= 1;
if(snakePosition[0].x ==- 1) {
snakePosition[0].x = width - 1;
}
}
else if(direction.equals("U")) {
snakePosition[0].y -= 1;
if(snakePosition[0].y ==- 1) {
snakePosition[0].y = height - 1;
}
}
else {
snakePosition[0].y += 1;
snakePosition[0].y =snakePosition[0].y % height;
}
for(int i = lengthOfSnake - 1; i >0; i--) {
System.out.printf("index %d: %d.%d\n", i, snakePosition[i].x, snakePosition[i].y);
}
System.out.print("end move method\n");
}
void growTail() {
lengthOfSnake++;
snakePosition[lengthOfSnake] = snakePosition[lengthOfSnake - 1];
}
boolean didSnakeEatItself() {
for(int i = 1; i < lengthOfSnake; i++) {
if((snakePosition[0].x == snakePosition[i].x) && (snakePosition[0].y == snakePosition[i].y)) {
return false;
}
}
return true;
}
}
【问题讨论】:
-
您需要对对象
snakePosition进行深拷贝,而不是相互分配。