Błąd przy zmiennej

0

Cześć. Chciałbym wiedzieć gdzie zrobiłem błąd przy zmiennej. Po oddaniu strzału magazynek cały czas jest pełny.

public class Lekcja1{
    public void strzel(Kaczka dojakiejkaczki, int liczbanaboi){dojakiejkaczki.czyZywa = false; liczbanaboi--;}
public static void main(String[] args){
    Lekcja1 polowanie = new Lekcja1();
    Kaczka nieswiawdomazagrozeniadzikakaczka = new Kaczka(true);
 int liczbanaboi = 2;

    nieswiawdomazagrozeniadzikakaczka.kwacz();
    System.out.println("Magazynek: " + liczbanaboi);
    polowanie.strzel(nieswiawdomazagrozeniadzikakaczka, liczbanaboi);
    nieswiawdomazagrozeniadzikakaczka.kwacz();
    System.out.println("Magazynek: " + liczbanaboi);

}
} 
 class Kaczka {
    boolean czyZywa;
    public Kaczka(boolean czyZywa){
        this.czyZywa = czyZywa;}

public void kwacz(){
    if(this.czyZywa){
        System.out.println("Kwa!Kwa!");}
        else{
        System.out.println("Ponura cisza");}
    }

}
0

Bo operujesz na kopii zmiennej liczbanaboi, więc poza funkcją strzel() nadal ma starą wartość. Jednym z możliwych rozwiązań jest zwrócenie nowej wartości

 public int strzel(Kaczka dojakiejkaczki, int liczbanaboi) {
    dojakiejkaczki.czyZywa = false; 
    liczbanaboi--;
    return liczbanaboi;
}
0

Gdzieś się zagubiłem, bo wciąż wartość wynosi 2.

 public class Lekcja1 {
    public int strzel(Kaczka kaczka, int liczbanaboi) {kaczka.czyZywa = false;liczbanaboi--;;
    return liczbanaboi;}



    public static void main(String[] args) {
        int liczbanaboi = 2;
        Lekcja1 polowanie = new Lekcja1();
        Kaczka nieswiawdomazagrozeniadzikakaczka = new Kaczka(true);
        nieswiawdomazagrozeniadzikakaczka.kwacz();
        System.out.println("Magazynek: " + liczbanaboi);
        polowanie.strzel(nieswiawdomazagrozeniadzikakaczka, liczbanaboi);
        nieswiawdomazagrozeniadzikakaczka.kwacz();
        System.out.println("Magazynek: " + liczbanaboi);
        polowanie.strzel(nieswiawdomazagrozeniadzikakaczka, liczbanaboi);
1

nie zapisujesz nigdzie zwracanej zmiennej z metody strzel

0

kombinuje jak koń pod górkę żeby to zrobić, nie potrafię. mógłbyś mnie oświecić, proszę?

1
liczbanaboi = polowanie.strzel(nieswiawdomazagrozeniadzikakaczka, liczbanaboi);

I nazwij zmienne sensownie, a nie nieswiawdomazagrozeniadzikakaczka. Tak samo nie produkuj takich potworów:

public int strzel(Kaczka kaczka, int liczbanaboi) {kaczka.czyZywa = false;liczbanaboi--;;
    return liczbanaboi;}

jedna instrukcja jedna linia

0

Wielkie dzięki za pomoc i za rady!

1 użytkowników online, w tym zalogowanych: 0, gości: 1