OnLearn Ответов: 2

Знаете ли вы, почему массив принимает значение другого массива?


Привет, я программирую небольшую игру, и теперь у меня есть проблема:
Целочисленный массив yourField[0][0] имеет значение 0
Целочисленный массив opponentsField[0][0] также имеет значение 0
строки и столбца равны 0
opponentsField[row][column - 13] = 2;

после этого кода значение opponentsField[0][0], конечно же, изменилось на 2. Но также Значение yourField[0] [0] изменилось на 2. Какая может быть причина для этого? Это действительно странно, и я понятия не имею, почему это происходит.
Спасибо за ответы!

Что я уже пробовал:

Я попытался посмотреть, что происходит с отладчиком.

Thomas Daniels

Как определяются поле оппонентов и ваше поле? Можете ли вы показать эти строки кода?

Peter Leow

Прочтите свой вопрос с точки зрения незнакомца. Вы в состоянии понять свой вопрос?

Richard MacCutchan

Скорее всего, это один и тот же массив. Вам нужно объявить их отдельно.

OnLearn

Я не делал этого так, как yourField = opponentsField;
У меня есть третий массив под названием field[][].
Затем я построил yourField такой: yourField[][]=массивов.копия(поле[][],10);
Я дал полю другие значения и построил поле противников одинаково.

Если я инициализирую массив с помощью copyOf (), то это не указатель на массив, не так ли?

Richard MacCutchan

Я все еще не понимаю, что ты делаешь. Пожалуйста, отредактируйте свой вопрос и покажите фактический код, чтобы мы могли ясно видеть последовательность событий.

OnLearn

код имеет длину более 500 строк, поэтому я не думаю, что вы хотите его изучать

Richard MacCutchan

Нет. Я этого не делаю, но если вы не можете определить, какие строки имеют отношение к проблеме, и просто разместите их, то мы больше ничего не можем сделать.

2 Ответов

Рейтинг:
0

OriginalGriff

На первый взгляд, когда вы создавали переменные массива, вы либо назначали их обеим в одну и ту же область памяти, либо не назначали их вообще.
Если вы создадите свои массивы таким образом:

int[] anArray;
anArray = new int[10];
int[] anotherArray = anArray;

тогда обе переменные массива anArray и anotherArray совместно используют одну и ту же память - так что все, что вы делаете через одну, влияет на память, используемую другой.
Вам нужно назначить их отдельно:
int[] anArray;
anArray = new int[10];
int[] anotherArray;
anotherArray = new int[10];
чтобы получить отдельную память для каждого.


OnLearn

Я не делал этого так, как yourField = opponentsField;
У меня есть третий массив под названием field[][].
Затем я построил yourField такой: yourField[][]=массивов.копия(поле[][],10);
Я дал полю другие значения и построил поле противников одинаково.

Если я инициализирую массив с помощью copyOf (), то это не указатель на массив, не так ли?

Рейтинг:
0

Patrice T

yourField и opponentsField это не массивы, это указатели на массив.
И я предполагаю, что вы построили 1 из другого

yourField= opponentsField

создание обоих указателей на один и тот же массив.

Вам нужно улучшить свои знания Java.


OnLearn

Я не делал этого так, как yourField = opponentsField;
У меня есть третий массив под названием field[][].
Затем я построил yourField такой: yourField[][]=массивов.копия(поле[][],10);
Я дал полю другие значения и построил поле противников одинаково.

Если я инициализирую массив с помощью copyOf (), то это не указатель на массив, не так ли?

Patrice T

Показать код.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.