• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java gdzie robie bład?

0 głosów
169 wizyt
pytanie zadane 6 lutego 2018 w Rozwój zawodowy, nauka, szkoła, praca przez Pus_Tako_sy Początkujący (320 p.)
edycja 6 lutego 2018 przez Pus_Tako_sy



import java.util.Scanner;

public class Bankomat {
    public static void main (String args[])
    {
        Karta kata=new Karta();
        TwojaKarta karta = new TwojaKarta();
        karta.getnrKarty();
        boolean dobryWybor;
        boolean zlaOpcja;
        System.out.print("wlóż karte i podaj nr karty: ");
        Scanner odczyt = new Scanner(System.in);

        while (true)
        {
            String nrKarty = odczyt.nextLine();
            if(nrKarty.equals(karta.getnrKarty()))
            {
                System.out.println("stan konta wynosi: "+karta.getStanKonta()+" zł");
                System.out.println("co chcesz zrobic ze swoimi pi1eniedzmi");
                System.out.println("1.wypłać");
                System.out.println("2.wpłać");
                break;
            }
            else
                System.out.println("zły nr karty, sprobuj jeszcze raz:");
          if(nrKarty.equals("exit"))
            {
                System.exit(0);
            }
        }
        String wybor = odczyt.nextLine();
        switch (wybor) {
            case "1":
                Wypłacanie.wyplac();
                break;
            case "2":
                Wpłacanie.wplac();
                label:
                while (true)
                {
                    System.out.println("chcesz wplacic pieniądze jeszcze raz? T/n");
                    String chcesz = odczyt.nextLine();
                    switch (chcesz) {
                        case "T":
                            Wpłacanie.wplac();
                            break;
                        case "n":
                            break label;
                        default:
                            System.out.println("podałes zla opcje");
                            break;
                    }
                }
                break;
            default:
                System.out.println("wybrałes nieprawidłową opcje");
                break;
        }
    }
}

Klasa Wpłacanie

import java.util.Scanner;


class Wpłacanie {
    public static void wplac()
    {
        // String myString = "1234";
        // int foo = Integer.parseInt(myString);

        Scanner odczyt = new Scanner(System.in);
        TwojaKarta twojaKarta = new TwojaKarta();

        {
        System.out.println("aktualnie posziadasz: " + twojaKarta.getStanKonta() + "zł");
        System.out.println("Podaj kwote jaka chcesz wpłacić do banku: ");

        String kwotaDoDodania = odczyt.nextLine();
        int kwotaDoDodaniaint = Integer.parseInt(kwotaDoDodania);

        twojaKarta.setStanKonta(kwotaDoDodaniaint + twojaKarta.getStanKonta());

        System.out.println("po wpłacie posziadasz: " + twojaKarta.getStanKonta() + "zł");



        }


    }
}

 

twojaKarta

public class TwojaKarta  {

    public int stanKonta =1337;
    private final String nrKarty = "123";

    public String getnrKarty()
    {
        return nrKarty;
    }
    public void setStanKonta(int stanKonta)
    {
        this.stanKonta=stanKonta;
    }
    public int getStanKonta()
    {
        return stanKonta;
    }
}

wlóż karte i podaj nr karty: 123
stan konta wynosi: 1337 zł
co chcesz zrobic ze swoimi pi1eniedzmi
1.wypłać
2.wpłać
2
aktualnie posziadasz: 1337zł
Podaj kwote jaka chcesz wpłacić do banku: 
123
po wpłacie posziadasz: 1460zł
chcesz wplacic pieniądze jeszcze raz? T/n
T
aktualnie posziadasz: 1337zł
Podaj kwote jaka chcesz wpłacić do banku: 
31
po wpłacie posziadasz: 1368zł
chcesz wplacic pieniądze jeszcze raz? T/n

stanKonta powraca to pierwotnej wartosci 

komentarz 7 lutego 2018 przez Patrycjerz Mędrzec (184,190 p.)
To pytanie jest poniżej wszelkich standardów, dostajesz ostrzeżenie, proszę nie robić tak więcej.

1 odpowiedź

+2 głosów
odpowiedź 7 lutego 2018 przez Frearexis Użytkownik (540 p.)
wybrane 8 lutego 2018 przez Pus_Tako_sy
 
Najlepsza

TL;DR Poczytaj o słowie kluczowym static i konstruktorach .

W Twoim wypadku problem występuje ponieważ pole stanKonta klasy TwojaKarta zostaje ustawione na 1337zł za każdym razem gdy tworzysz nowy obiekt klasy TwojaKarta.

Gdyby stanKonta był zadeklarowany 

public static int stanKonta =1337;

to wartość którą mu nadałeś zostałaby wspólna dla wszystkich obiektów klasy TwojaKarta co oczywiście też jest złe bo użytkownicy dodawaliby pieniądze do wspólnego konta. U Ciebie wygląda to w tym momencie tak, że tworzysz w metodzie main obiekt TwojaKarta a w metodzie wpłać inny obiekt TwojaKarta. Jeśli chcesz przekazać do innej klasy dokładnie ten sam obiekt musisz użyć konstruktora w takim wypadku kod musiałbyś zmienić tak:

class Wpłacanie {

private TwojaKarta karta;

public Wpłacanie(TwojaKarta karta){

this.karta = karta;

}

  a w metodzie wpłać odnosić się po referencji karta.

Natomiast by stworzyć obiekt Wpłacanie

Wpłacanie wpłacanie = new Wpłacanie(karta)

Postaraj się też używać nazw angielskich dla pól i metod oraz rozbijać program na mniejsze funkcje a wszystko będzie szło ku dobremu :)

komentarz 7 lutego 2018 przez Wiciorny Maniak (66,560 p.)

W Twoim wypadku problem występuje ponieważ pole stanKonta klasy TwojaKarta zostaje ustawione na 1337zł za każdym razem gdy tworzysz nowy obiekt klasy TwojaKarta.

 Static- nie jest związany z obiektem, a z  Klasą :) jeśli poprzednie obiekty zmienią wartość tej zmiennej, to ona przy tworzeniu kolejnych będzie inna. 

komentarz 7 lutego 2018 przez Frearexis Użytkownik (540 p.)
Przecież dokładnie to opisuję dalej.
komentarz 7 lutego 2018 przez Wiciorny Maniak (66,560 p.)
ale to stwierdzenie które cytuje, jest błędne :) czytaj do czego się odnoszę. Nie twierdze, że to co później piszesz jest złe, nieprawdziwe. Ale stwierdzenie na początku wprowadza w błąd.
komentarz 7 lutego 2018 przez Frearexis Użytkownik (540 p.)
A Ty czytaj kod do którego się odnoszę w zacytowanej części. Przecież na początku opisuję sytuację którą ma w kodzie i która powoduje błąd - nie ma static na polu stanKonta. Zobacz jego kod jeszcze raz.
komentarz 7 lutego 2018 przez Wiciorny Maniak (66,560 p.)

TwojaKarta zostaje ustawione na 1337zł za każdym razem gdy tworzysz nowy obiekt klasy TwojaKarta.

ja sie tego czepiam... to jest BZDURA co Ty napisałeś, a nie prawda. Jeśli jego pole jest STATYCZNE to nie " zostaje ustawione za każdym razem jak tworzy obiekt"... klasy. Bo ***** STATIC nie zależy od instancji. To pole jest stworzone raz w momencie załadowania klasy przez JVM. Dlatego chyba sam nie rozumiesz pojęcia static, a przez takie stwierdzenia, potem  jak mam kogoś na rozmowie to właśnie słysze takie bzdury

komentarz 7 lutego 2018 przez Frearexis Użytkownik (540 p.)

Ale jego pole nie jest statyczne i na początku swojej wypowiedzi nie mówię o słowie static tylko odnosze się do kodu który zamieścił czyli do tego:

public class TwojaKarta  {
 
    public int stanKonta =1337;
    private final String nrKarty = "123";
 
    public String getnrKarty()

powiedz mi gdzie tu jest static? Więc to co zacytowałeś 

W Twoim wypadku problem występuje ponieważ pole stanKonta klasy TwojaKarta zostaje ustawione na 1337zł za każdym razem gdy tworzysz nowy obiekt klasy TwojaKarta.

Jest jak najbardziej poprawne (jak zresztą cała reszta mojej wypowiedzi). Może gdybyś więcej czasu poświęcił na czytanie ze zrozumieniem a nie na klepanie postów pod ilość zrozumiałbyś co tu zostało napisane.  

Podobne pytania

0 głosów
0 odpowiedzi 101 wizyt
pytanie zadane 17 czerwca 2017 w C i C++ przez PClove Początkujący (310 p.)
0 głosów
1 odpowiedź 1,546 wizyt
pytanie zadane 9 maja 2017 w Java przez Milesq Pasjonat (15,140 p.)
0 głosów
2 odpowiedzi 144 wizyt
pytanie zadane 6 marca w Java przez krystian1997 Użytkownik (810 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

64,021 zapytań

110,396 odpowiedzi

231,162 komentarzy

47,800 pasjonatów

Przeglądających: 178
Pasjonatów: 4 Gości: 174

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...