Изменение переменной int не имеет никакого эффекта - PullRequest
0 голосов
/ 28 января 2020

Я работаю над NaturalSelectionSimulator и испытываю проблему с изменением значения X int существа.

for(Food f : food)
{
    if(f.x()-x==-1)
    {
        x--;
    }
    else if(f.x()-x==1)
    {
        x+=1;
        System.out.println("RIGHT MOVE F ");
    }
    else if(f.y()-y==-1)
    {
        y--;
    }
    else if(f.y()-y==1)
    {
        y++;
    }
}

fx () возвращает значение X int класса еды, и наоборот для fy (). Оператор print работает, а оператор выше - нет. Изменив его обратно на x ++; не влияет на результат.

Ссылка на GitHub: https://github.com/JakeDavisCodes/NaturalSelectionSimulator

1 Ответ

0 голосов
/ 28 января 2020

Ваш вопрос несколько сомнительный. Возможно, я неправильно понял, и в этом случае этот ответ не имеет значения; в этом случае, пожалуйста, отредактируйте вопрос или подождите, пока кто-то выполнит то, что вы здесь задаете.

Это звучит как будто вы не понимаете, как передача переменных работает в java , Когда у вас есть метод public int getX() { return this.x; }, он буквально возвращает точное значение. После его вызова извлекается текущее значение поля x и возвращается. По сути, это копия. Если затем вы берете это значение и присваиваете его своей собственной переменной (даже если вы тоже называете ее 'x' - это несущественно, чистое совпадение, что оба бита кода выбрали одно и то же имя), у вас есть копия. Если вы потом возитесь с ним, вы просто возитесь с копией.

В java нет способа изменить это поведение. Либо обновите переменную напрямую, например, написав: void setX(int newX) {this.x = newX; } и выполнив: f.setX(f.getX() + 1), либо используйте изменяемый контейнер, например AtomicInteger.

...