Pomoc w cwiczeniu z butelką.

Dyskusje na temat Javy.
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Pomoc w cwiczeniu z butelką.

Post przez Morfidon »

Hej:

Code: Zaznacz cały

  if (this.wylej(ilosc) && this.wlej(ilosc))
            {    
                gdziePrzelac.wlej(ilosc);
            }


jak wywołujesz w if metodę this.wylej(ilosc)

to już wylewasz ilość jeśli jest możliwość wylania takiej ilości. Pamiętaj, że wywołuje się wtedy całe ciało metody.
mario13021
Początkujący
Początkujący
Posty: 13
Dołączył(a): sobota, 26 sierpnia 2017, 20:33

Re: Pomoc w cwiczeniu z butelką.

Post przez mario13021 »

no tak... wylewałem i wlewałem do tej samej butelki. Zrobiłem to teraz w taki sposob i prawie dziala dobrze:

Code: Zaznacz cały

    package butelka;

    public class Butelka {

    private double ileLitrow;


    Butelka(double ileLitrow)
        {
            this.ileLitrow = ileLitrow;
        }

    double getIleLitrow()
        {
            return ileLitrow;
        }

    boolean wlej(double ilosc)
        {
            if (this.ileLitrow + ilosc <= 5)
                this.ileLitrow += ilosc;
            else
                {
                    System.out.println("Za mała pojemnosc butelki");
                    return false;
                }   
            return true;
        }

    boolean wylej (double ilosc)
        {
             if (ilosc <= this.ileLitrow)
                this.ileLitrow -= ilosc;
            else
                {
                System.out.println("Za mało wody");
                return false;
                }
            return true;
        }

    boolean przelej (double ilosc, Butelka gdziePrzelac)   
        {
            if (this.wylej(ilosc) && gdziePrzelac.wlej(ilosc))
                {   
                 return true;
                }
            else
                System.out.println("nie da rady");
                return false;

           
        }

     
        public static void main(String[] args) {

            Butelka[] butelka = new Butelka[50];
           
           
            for (int i = 0; i < butelka.length; i++)
                 {
                    butelka [i] = new Butelka (1) ;         
                 }
           
            butelka[0].wlej(4);
    //        butelka[0].wylej(6);
            butelka[0].przelej(5, butelka[1]);
//            butelka[2].przelej(4, butelka[3]);

    //       
    //        butelka[0].wylej(3);
    //       
            System.out.println(butelka[0].getIleLitrow());
            System.out.println(butelka[1].getIleLitrow());
            System.out.println(butelka[2].getIleLitrow());
            System.out.println(butelka[3].getIleLitrow());

           
        }
       
    }
teraz odejmuje i niby wszystko ładnie pięknie, ale gdy chce z butelki a=5 do butelki b=1 przelac 5 litrów to oczywiście nie dodaje mi tej wartości bo metoda nie pozwala, ale w dalszym ciągu odejmuje i to jest zrozumiałe bo metoda na to pozwala. Ale w metodzie przelej założenie miałem takie, że jeżeli któryś z warunków nie będzie spełniony to wyświetli sam komunikat nie wlewając ani wylewając nic... Poprostu przejdzie do else. Natomiast dzieje sie tak jak napisałeś. Pierwszy warunek mimo wszystko jest wykonywany nawet gdy drugi jest false.
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Pomoc w cwiczeniu z butelką.

Post przez Morfidon »

Nie możesz korzystać w instrukcji warunkowej z metod, które coś wykonują poza sprawdzaniem czy coś jest prawdziwe lub fałszywe, bo to rodzi same problemy.

Jeśli chcesz sprawdzić, czy możesz coś wlać lub też wylać to zrób jeszcze jedną metodę, która sprawdza, czy ilość, którą chcesz wlać jest mniejsza niż tyle ile pozostało miejsca w butelce do której chcesz przelać.
mario13021
Początkujący
Początkujący
Posty: 13
Dołączył(a): sobota, 26 sierpnia 2017, 20:33

Re: Pomoc w cwiczeniu z butelką.

Post przez mario13021 »

ok, czaje bazę i zapamiętam na przyszłość :) Sorry za nie kompetencję ale nowicjusz ze mnie jak wiesz :) wziąłem pod uwagę Twoje razy i wyszło mi coś takiego

Code: Zaznacz cały

    package butelka;

    public class Butelka {

    private double ileLitrow;

    final double maxPojemnosc = 5;

    Butelka(double ileLitrow)
        {
            this.ileLitrow = ileLitrow;
        }

    double getIleLitrow()
        {
            return ileLitrow;
        }
    
    double ileZostalo ()
    {
        double ileZostalo = maxPojemnosc - this.getIleLitrow();
        return ileZostalo;
    }

    boolean wlej(double ilosc)
        {
            if (this.ileLitrow + ilosc <= maxPojemnosc)
                this.ileLitrow += ilosc;
            else
                {
                    System.out.println("Za mała pojemnosc butelki, wlano tylko " + this.ileZostalo());
                    this.ileLitrow += this.ileZostalo();
                    return false;
                }   
            return true;
        }

    boolean wylej (double ilosc)
        {
             if (ilosc <= this.ileLitrow)
                this.ileLitrow -= ilosc;
             
            else
                {
                System.out.println("Za mało wody, wylano tylko " + this.ileLitrow);
                this.ileLitrow -= this.ileLitrow;
                return false;
                }
            return true;
        }

void przelej (double ilosc, Butelka gdziePrzelac)
    {
       if (ilosc <= gdziePrzelac.ileZostalo())
            {
                System.out.println("Przelano " + ilosc);
                this.wylej(ilosc);
                gdziePrzelac.wlej(ilosc);
            }
       
        else
            {
                System.out.println("przelano tylko " + gdziePrzelac.ileZostalo()+ "z powodu za małej ilości miejsca w butelce");
                this.wylej(gdziePrzelac.ileZostalo());
                gdziePrzelac.wlej(this.ileZostalo());
            }
 
    }

     
        public static void main(String[] args) {

            Butelka[] butelka = new Butelka[50];
           
           
            for (int i = 0; i < butelka.length; i++)
                 {
                    butelka [i] = new Butelka (1) ;         
                 }
           
            butelka[0].wlej(4);
//            butelka[0].wylej(6);
            butelka[0].przelej(3, butelka[1]);
//            butelka[0].przelej(2, butelka[1]);

            System.out.println(butelka[0].getIleLitrow());
            System.out.println(butelka[1].getIleLitrow());
            System.out.println(butelka[2].getIleLitrow());
            System.out.println(butelka[3].getIleLitrow());

           
        }
       
    }v
wygląda na to że wszystko działa :) jak Ci się to podoba?
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Pomoc w cwiczeniu z butelką.

Post przez Morfidon »

Jest OK :) Dobra robota.
mario13021
Początkujący
Początkujący
Posty: 13
Dołączył(a): sobota, 26 sierpnia 2017, 20:33

Re: Pomoc w cwiczeniu z butelką.

Post przez mario13021 »

dzięki :) lecę dalej w takim razie :)
Post Reply