Dostęp do danych obiektu

Dostęp do danych obiektu
kkolej
  • Rejestracja:ponad 7 lat
  • Ostatnio:dzień
  • Postów:54
0

Cześć staram sie napisać kosolową gre typu jednoręki bandyta. Chce stworzyc mozliwosc zrobienia konta oraz wpłaty kasy, problem jest taki że po tym jak stworze konto i wpłacę kase nie mam potem do tego dostępu, tzn kiedy użyję metody player.getMoney(); zawsze pokazuje zero. Ktoś może mi powiedziec co źle zrobiłem ? Wiem, że parę rzeczy należy tu poprawić ale chciałbym się skupić na razie jedynie na danych.

Kopiuj
class PlayerView {

    private PlayerSetings playerSetings = new PlayerSetings();
    private Scanner scanner = new Scanner(System.in);
    private int input;

    void player() {

        do {
            System.out.println(" 1 = Create account, 2 = Your debit, 0 = back");

            input = scanner.nextInt();
            if (input == 1) {
                String name;
                int money;
                System.out.print("Name: ");
                name = scanner.next();
                System.out.println();
                System.out.println("Money between 0 to 100: ");
                money = scanner.nextInt();
                System.out.println();

                playerSetings.setPlayer(money, name);
            }if (input == 2)
                playerSetings.showDebit();

        } while (input == 0);
    }
}

public class PlayerSetings {

    private Player player = new Player();


    public void setPlayer(int money, String name) {


        if (money > 0 && money < 100 && name != null) {
            player.setMoney(money);
            player.setName(name);
            System.out.println("Acoount name: " + player.getName() + " debit: " + player.getMoney());
            System.out.println();
        } else
            System.out.println("Incorrect data");

    }

    public void showDebit() {
        System.out.println("Debit: " + player.getMoney());

    }


}

class Player {


    Player() {
    }

    private String name;
    private int money;


    String getName() {
        return name;
    }

    void setName(String name) {
        this.name = name;
    }

    int getMoney() {
        return money;
    }

    void setMoney(int money) {
        this.money = money;
    }
}


Z daleka nie widać
edytowany 2x, ostatnio: kkolej
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

a player.getName() zwraca poprawną wartość?
BTW dlaczego nie użyjesz debbugera?


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
0

Zwraca null, powalczę z debugerem ale myślę że błąd mam gdzieś w modzie i nie mogę dojść gdzie

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

a zmień void setName(String name) na np. void setName(String n) i potem this.name = n; i analogicznie z money.
BTW ja tam nie jestem w stanie dostrzec błędu


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
kiyo
  • Rejestracja:około 8 lat
  • Ostatnio:około 12 godzin
  • Postów:155
1

@kkolej: W Twoim programie bruździ warunek w metodzie player():

Kopiuj
while (input == 0)

Po prostu gdy tworzysz konto to input == 1 więc warunek nie jest spełniony i pętla wykonuje się tylko raz po czym program się kończy i Twoje dane przepadają. Dlatego gdy odpalasz drugi raz i chcesz sprawdzić saldo konta to wynosi ono 0.
Żeby to rozwiązać możesz zmienić warunek na:

Kopiuj
while (input != 0)

i wtedy program faktycznie będzie się kończył gdy wpiszesz 0, albo zapisywać Twoje dane do jakiejś bazy i potem je pobierać gdy zajdzie taka potrzeba.

abrakadaber
abrakadaber
czyli, że pytacz cały czas uruchamiał program od nowa i raz klikał 1 a raz 2 i mu nie działało? No na takie coś bym nie wpadł :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.