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

Tylko pytam dla pewności. :)

VPS Starter Arubacloud
0 głosów
170 wizyt
pytanie zadane 14 stycznia 2017 w JavaScript przez PelikanFix16 Użytkownik (950 p.)

Przerabiam książkę "Rusz głową! Programowanie w JavaScript",

Chciałbym zapytać o metodę obiektu, która została przedstawiona w książce, czy dobrze zrozumiałem jak ona działa.

Czy metoda za każdą iteracją pętli pobiera z właściwości ships 1 element tablicy, następnie sprawdza tablice właściwości locations pobranego elementu czy w niej znajduje się liczba podana przez użytkownika i kiedy już sprawdzi po kolei każdy element tablicy ships pętla się kończy ? 

Nie jestem pewien czy dobrze zrozumiałem działanie tej metody dlatego chciałbym Was zapytać, czy to jest tak jak napisałem powyżej ?

A to ten obiekt. 

var model = {
  boardSize:7,
  numShips:3,
  shipLength:3,
  shipsSunk:0,
  ships:[ {locations:["06","16","26"],hits:["","",""]},
          {locations:["24","34","44"],hits:["","",""]},
          {locations:["10","11","12"],hits:["","",""]}
        ],
   fire:function(guess){
    for(var i = 0; i< this.numShips;i++){
      var ships = this.ships[i];
      var locations = ships.locations;
      var index = locations.indexOf(guess);
      if(index >= 0){
        ship.hits[index] = "hit";
        return true;
      }
    }
    return false;
   }      
};

 

 

komentarz 14 stycznia 2017 przez PelikanFix16 Użytkownik (950 p.)
edycja 14 stycznia 2017 przez PelikanFix16

Jeszcze jedno pytanie.

Czytałem kilka razy przeglądałem stronę, na której był podany już pełen obiekt porównywałem z tym, co ja napisałem, ale wszystko dobrze przepisałem.

Mianowicie metoda isSunk według mnie źle działa i także widać to złe działanie w programie.

Kiedy zostaje wywołana metoda fire i w argumencie jej wywołania zostaje podana 1 pole statku na którym się znajduje to metoda isSunk już to traktuje statek jako zatopiony.

Czy tu jest gdzieś błąd ? 

Rozumiem poniekąd dlaczego isSunk zwraca true.

var model = {
  boardSize:7,
  numShips:3,
  shipLength:3,
  shipsSunk:0,
  ships: [
		      { locations: ["06", "16", "26"], hits: ["", "", ""] },
		      { locations: ["24", "34", "44"], hits: ["", "", ""] },
		      { locations: ["10", "11", "12"], hits: ["", "", ""] }
	       ],
	       fire:function(guess){
	         for(var i =0;i<this.numShips;i++){
	           var ship = this.ships[i];
	           var index = ship.locations.indexOf(guess);
	           if(index >=0){
	             ship.hits[index] = "hit";
	             view.displayHit(guess);
	             view.displayMessage("TRAFIONY!");
	             if(this.isSunk(ship)){
	               view.displayMessage("Zatopiłeś mój okręt!");
	               this.shipsSunk++;
	             }
	             return true;
	           }
	         }
	         view.displayMiss(guess);
	         view.displayMessage("Spudłowałeś");
	       },
	       isSunk:function(ship){
	         for(var i=0;i<this.shipLength;i++){
	           if(ship.hits[i] !== "hit"){
	             return false;
	           }
	           return true;
	         }
	       }
  
};

model.fire("06");

#EDIT dobra znalazłem problem ale w książce chyba został popełniony malutki błąd z zwracaną wartością logiczną. Instrukcja return true zostało umieszczone w pętli czyli z automatu metoda zwracała wartość true jeżeli juz przy 1 iteracji pętli w tabeli byłaby wartość "hit". 

 

2 odpowiedzi

0 głosów
odpowiedź 14 stycznia 2017 przez Mlody89 Mądrala (6,920 p.)
wybrane 14 stycznia 2017 przez PelikanFix16
 
Najlepsza
Tak, z zaznaczeniem że pętla przerwie działanie wcześniej jeżeli w locations wykryte zostaną szukane współrzędne
komentarz 14 stycznia 2017 przez PelikanFix16 Użytkownik (950 p.)
I dlatego po instrukcji if nie dodawali else, ponieważ gdyby index już przy pierwszej iteracji pętli zwrócił -1 to kod nie działał by poprawnie ?
komentarz 14 stycznia 2017 przez Mlody89 Mądrala (6,920 p.)
Przy instrukcji if, else jest opcjonalny. Funkcja indexOf zwraca index elementu tablicy pod którym znalazła wysłaną jej zawartość. Jeżeli znajdzie taki element w tablicy zwróci wartość >= 0 ( tablice sa numerowane od 0 ), a jeżeli nie to ma pominąć zawartość if i przejść do kolejnej iteracji pętli.
0 głosów
odpowiedź 14 stycznia 2017 przez Kamil Naja Nałogowiec (27,330 p.)
Nigdzie tego nie masz lepiej wyjaśnionego niż w tej książce.

Podobne pytania

+4 głosów
3 odpowiedzi 403 wizyt
pytanie zadane 17 sierpnia 2021 w Offtop przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
2 odpowiedzi 454 wizyt
0 głosów
0 odpowiedzi 530 wizyt

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...