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

Kolejność wykonywania kodu

Object Storage Arubacloud
0 głosów
213 wizyt
pytanie zadane 10 lutego 2019 w JavaScript przez Kubs Mądrala (5,190 p.)
edycja 10 lutego 2019 przez Kubs

Dlaczego w tym kodzie gdy `fuel` otrzymuje wartość większą niż 0 ,wykonuje się 

"Najpierw musisz włączyć silnik."

a nie ten drugi `if`

drive: function() {                 
                if (this.started) {
                    if (this.fuel > 0) {
                        alert(this.make + " " +
                              this.model + " robi: brum wrrrr!");
                        this.fuel = this.fuel - 1;
                    } else {
                        alert("Osz..., brak paliwa.");
                        this.stop();
                    } 
                } else {
                    alert("Najpierw musisz włączyć silnik.");
                }
            },

 

Update. Ale metoda `start` wygląda tak:

start: function() {                
                if (this.fuel == 0) {
                    alert("Bak jest pusty, zatankuj przed jazdą!");
                } else {
                    this.started = true;
                }
            },

Czyli `started` jest `true`

 

Cały kod

var fiat = {                   
            make: "Fiat",
            model: "500",
            year: 1957, 
            color: "szaroniebieski",
            passengers: 2,
            convertible: false,
            mileage: 88000,
            fuel: 0,
            started: false,
        
            start: function() {               
                if (this.fuel == 0) {
                    alert("Bak jest pusty, zatankuj przed jazdą!");
                } else {
                    this.started = true;
                }
            },
        
            stop: function() {        
                this.started = false;
            },
        
            drive: function() {                
                if (this.started) {
                    if (this.fuel > 0) {
                        alert(this.make + " " +
                              this.model + " robi: brum wrrrr!");
                        this.fuel = this.fuel - 1;
                    } else {
                        alert("Osz..., brak paliwa.");
                        this.stop();
                    } 
                } else {
                    alert("Najpierw musisz włączyć silnik.");
                }
            },
        
            addFuel: function(amount) {           
                this.fuel = this.fuel + amount;
            }
        };
        
        fiat.start();        
        fiat.drive();        
        fiat.addFuel(2);    
        fiat.start();       
        fiat.drive();       
        fiat.drive();        
        fiat.drive();       
        fiat.stop();        
        

 

1 odpowiedź

+1 głos
odpowiedź 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)

Ponieważ wartość this.started nie zwraca true.

komentarz 10 lutego 2019 przez kenjiro244 Dyskutant (8,600 p.)

No ale przecież sam napisałeś sobie nawet odpowiedź w zadaniu :D.

Najpierw musisz włączyć silnik.

Czyli started wynosi false.

komentarz 10 lutego 2019 przez Kubs Mądrala (5,190 p.)

@DeBos123, zerknij proszę, uaktualniłem kod.

komentarz 10 lutego 2019 przez Kubs Mądrala (5,190 p.)

@kenjiro244, Zerknij proszę na uaktualnienie postu.

komentarz 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)

@Kubs, pokaż kod, który używa tych funkcji.

Może nie wywołujesz metody start albo wywołujesz ją mając 0 paliwa, czyli this.started nie jest ustawiane na true.

komentarz 10 lutego 2019 przez Kubs Mądrala (5,190 p.)
Umieściłem cały kod. Zerknij proszę.
komentarz 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)

Twój kod jakby go zapisać jako pseudokod to wyglądałby tak:

Stwórz samochód
Uruchom samochód (nie masz paliwa)
Jedź (nie uruchomiłeś samochodu z powodu braku paliwa)
Zatankuj
Uruchom samochód
Jedź
Jedź
Jedź
Zatrzymaj samochód

Napisałem ci w nawiasach w czym prawdopodobnie leży problem.

komentarz 10 lutego 2019 przez Kubs Mądrala (5,190 p.)
No ale przecież mam bo  2>0 a wykonuje się ten else podczas gdy powinien ten `if`
komentarz 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)
Dodajesz paliwo dopiero po pierwszej próbie uruchomienia i ruszenia samochodem.
komentarz 10 lutego 2019 przez Kubs Mądrala (5,190 p.)
Tak , potem wykonuje się start gdzie started przyjmuje true i potem wykonuje się drive gdzie zamiast if wykonuje sie else.
komentarz 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)

Uruchomiłem twój kod i działa prawidłowo.

Pierwsze co robisz po stworzeniu samochodu to próba uruchomienia go.

this.fuel==0, więc dostajesz komunikat o braku paliwa.

this.started==false, ponieważ samochód się nie uruchomił z powodu braku paliwa.

Następnie próbujesz ruszyć tym samochodem.

this.started==false, więc dostajesz informację, że musisz uruchomić samochód.

komentarz 10 lutego 2019 przez MsMaciek123 Pasjonat (24,760 p.)
Przekompilowałem kod w głowie i wszystko wydaje się być ok. Poszukaj czy gdzieś nawiasu nie urwało.

 

Daj więcej paliwa !!! Tak z 15 w tamtej lini
komentarz 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)
W jego kodzie się nawet nie uruchamia ta funkcja przed komunikatem o włączeniu silnika.

Objaśniłem to wyżej.
komentarz 10 lutego 2019 przez MsMaciek123 Pasjonat (24,760 p.)
        fiat.start();        //started=false paliwo=0
//Bak jest pusty.
        fiat.drive();        //started=false paliwo=0
        fiat.addFuel(2);    //paliwo=2
        fiat.start();       //started=true
        fiat.drive();       //paliwo=1
        fiat.drive();        //paliwo=0
        fiat.drive();       
        fiat.stop();  

 

komentarz 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)

Autor pytania pyta się czemu dostaje komunikat "Najpierw musisz włączyć silnik."

Komunikat ten pojawia się jeżeli przy wywołaniu funkcji drivethis.started==false, co się dzieje w linii nr 45 (w kawałku kodu, który wkleiłeś jest to linia nr 2), więc funkcja addFuel nie jest wywołana przed wyświetleniem tego komunikatu.

komentarz 10 lutego 2019 przez Kubs Mądrala (5,190 p.)

@DeBos123, No ale this.started==true zaraz po dodaniu paliwa i wykonaniu metody start

komentarz 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)

Ale dodajesz paliwo w linii nr 46.

Samochód uruchamiasz w linii nr 44, a próbujesz nim ruszyć w kolejnej.

Czyli:

Uruchamiasz samochód
Jedziesz
Tankujesz paliwo

Robisz to w złej kolejności.

komentarz 10 lutego 2019 przez Kubs Mądrala (5,190 p.)
edycja 10 lutego 2019 przez Kubs

Ok, ok rozumiem teraz o co Ci chodzi :) Po prostu ten komunikat "Najpierw...." wykonuje się w tym pierwszym wywołaniu metody drive.

Ja cały czas referowałem do tej metody drive zaraz po addFuel.

Czy to o to chodzi?

Czasami takie nieuważnie niedopatrzenia mogą być bardzo czasochłonne :)

DZIĘKUJE SERDECZNIE.

komentarz 10 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)

Czy to o to chodzi?

Tak. 

komentarz 10 lutego 2019 przez Kubs Mądrala (5,190 p.)
Naprawdę doceniam, że mi pomogłeś i byłeś wytrwały.
komentarz 11 lutego 2019 przez MsMaciek123 Pasjonat (24,760 p.)
Czyli zamknięte?
komentarz 11 lutego 2019 przez DeBos123 Nałogowiec (44,950 p.)
Napisał, że pomogłem, więc chyba tak.

Podobne pytania

+1 głos
1 odpowiedź 290 wizyt
pytanie zadane 28 lutego 2020 w C# przez kubekszklany Gaduła (3,190 p.)
0 głosów
1 odpowiedź 676 wizyt
pytanie zadane 23 maja 2018 w JavaScript przez kenjiro244 Dyskutant (8,600 p.)
0 głosów
1 odpowiedź 394 wizyt
pytanie zadane 28 stycznia 2017 w JavaScript przez DariuszH Gaduła (3,100 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...