передача логического значения между классами, не работающими как задумано - PullRequest
0 голосов
/ 18 сентября 2018

Я играю в линкор У меня есть 3 класса и водитель.

в классе игрока

У меня есть этот метод

public  void hitownshiporGrenade(String[][] grid, String attack) {
    // checking if attack hits our ship, appropriate
    // if it does place an s in the  array

    if (attack.equals(s1)) {
        // -97 gives us a starting point at 0 for 'a' to
        // store in array, same for 49 and '1'
        grid[attack.charAt(0) - 97][attack.charAt(1) - 49] = "s "; 
        System.out.println("ship hit!");                                                            
        s1Sunk = true;
    }

У меня есть объявленная переменная и геттер сверху

private boolean s1Sunk; 
public boolean isS1Sunk() {
    return s1Sunk;
}

Теперь в моем другом классе

Player player = new Player();
System.out.println(player.isS1Sunk());

если я вызываю это в методе в драйвере, он остается ложным, если даже условие первого метода делает его истинным;

1 Ответ

0 голосов
/ 18 сентября 2018

Предполагая, что все методы, которые вы упомянули в примере кода, принадлежат одному и тому же определению класса Player, затем создайте новый экземпляр класса (объект) Player, выполнив

Player player = new Player();

вы создаете новый, отдельный (от всех остальных) экземпляр класса Player. Если вы не запустите hitownshiporGrenade для этого КОНКРЕТНОГО объекта, его переменные не изменятся.


Обратите внимание на следующее:

Player player1 = new Player(); //player1.isSunk is false
Player player2 = new Player(); //player2.isS1Sunk is again false,
                               //and separate from player1.isS1Sunk
player1.hitownshiporGrenade(foo, bar) //This changes player1.isSunk to true
System.out.print(player1.getIsSunk());    //true, assuming lucky hits
System.out.print(player2.getIsSunk());    //false

Я бы также порекомендовал вам прочитать правильный случай Camel при именовании ваших переменных ! Это значительно облегчит чтение вашего кода и избавит вас от головной боли при прохождении через него.

...