我有一個帶有坐標物件的陣列。開始時,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;
}
}
uj5u.com熱心網友回復:
我假設你的snakePosition陣列由這樣的物件組成:
public class SnakePosition {
public int x;
public int y;
public SnakePosition(int x, int y) {
this.x=x;
this.y=y;
}
public String toString() {
return "x=" x ",y=" y;
}
}
當您必須處理這樣的SnakePosition物件時:
var pos1 = new SnakePosition(1,1);
var pos2 = new SnakePosition(2,2);
并進行以下分配和物件更改
pos1 = pos2;
pos1.x = 0;
您的兩個物件pos1和pos2將是既X = 0,Y = 2。
您可以執行以下操作并制作深復制方法:
public class SnakePosition {
..
public SnakePosition deepCopy() {
return new SnakePosition(this.x, this.y);
}
}
并像這樣使用它:
for(int i = lengthOfSnake - 1; i >0; i--) {
snakePosition[i] = snakePosition[i-1].deepCopy();
}
另一種可能性是直接復制x和y值:
for(int i = lengthOfSnake - 1; i >0; i--) {
snakePosition[i].x = snakePosition[i-1].x;
snakePosition[i].y = snakePosition[i-1].y;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/366751.html
