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

Błędne działanie metody, niepoprawna zainicjowanie instanceof

Object Storage Arubacloud
0 głosów
69 wizyt
pytanie zadane 8 czerwca 2020 w Java przez danielo665 Obywatel (1,040 p.)
edycja 8 czerwca 2020 przez Patrycjerz

Witam wszystkich 

pisze tuta do was bo nie umiem sobie z tym porodzić

 

import java.util.ArrayList;
import java.util.List;

/* 
Usługi sprzątające
*/

public class Solution {

    public static void main(String[] args) {
        List<Apartment> apartments = new ArrayList<>();
        apartments.add(new OneRoomApt());
        apartments.add(new TwoRoomApt());
        apartments.add(new ThreeRoomApt());

        cleanAllApartments(apartments);
    }

    public static void cleanAllApartments(List<Apartment> apartments) {
        // Napisz tutaj swoją implementację Punktów 1-4
        for(int i = 0; i < apartments.size(); i ++){
            if(apartments instanceof OneRoomApt)
            { OneRoomApt oneRoomApt = (OneRoomApt) apartments;
            oneRoomApt.clean1Room();
            }
            if(apartments instanceof TwoRoomApt)
            {
            TwoRoomApt twoRoomApt = (TwoRoomApt) apartments;
            twoRoomApt.clean2Rooms();
            }
            if(apartments instanceof ThreeRoomApt)
            {
                ThreeRoomApt threeRoomApt = (ThreeRoomApt) apartments;
                threeRoomApt.clean3Rooms();
            }
        }
    }

    static interface Apartment {
    }

    static class OneRoomApt implements Apartment {
        void clean1Room() {
            System.out.println("Posprzątano 1 pokój");
        }
    }

    static class TwoRoomApt implements Apartment {
        void clean2Rooms() {
            System.out.println("Posprzątano 2 pokoje");
        }
    }

    static class ThreeRoomApt implements Apartment {
        void clean3Rooms() {
            System.out.println("Posprzątano 3 pokoje");
        }
    }
}

A teraz cos jest zle z instanceof nie wykywa powiazania i metoda nie wywołuje tekstu.

Jeżeli dam sam obiekt bez instanceof wszystko działa prawidłowo .

To wskazówki 

  • Dla wszystkich mieszkań z jedną sypialnią (OneRoomApt) na liście metoda cleanAllApartments musi wywoływać metodę clean1Room.

  • Dla wszystkich mieszkań z dwiema sypialniami (TwoRoomApt) na liście metoda cleanAllApartments musi wywoływać metodę clean2Rooms.

  • Dla wszystkich mieszkań z trzema sypialniami (ThreeRoomApt) na liście metoda cleanAllApartments musi wywoływać metodę clean3Rooms.

Probowałem z equals i tez nic, moze dacie jakies wskazówki ewentualnie komentarze do tego

1 odpowiedź

0 głosów
odpowiedź 8 czerwca 2020 przez Patrycjerz Mędrzec (192,320 p.)

Dlaczego sprawdzasz, czy cała lista jest obiektem klasy, zamiast wykonać to dla pojedynczego obiektu? Oto poprawiona metoda `cleanAllApartments`:

public static void cleanAllApartments(List<Apartment> apartments) {
    // Napisz tutaj swoją implementację Punktów 1-4
    for (int i = 0; i < apartments.size(); i++) {
        if (apartments.get(i) instanceof OneRoomApt) {
            OneRoomApt oneRoomApt = (OneRoomApt) apartments.get(i);
            oneRoomApt.clean1Room();
        } else if (apartments.get(i) instanceof TwoRoomApt) {
            TwoRoomApt twoRoomApt = (TwoRoomApt) apartments.get(i);
            twoRoomApt.clean2Rooms();
        } else if (apartments.get(i) instanceof ThreeRoomApt) {
            ThreeRoomApt threeRoomApt = (ThreeRoomApt) apartments.get(i);
            threeRoomApt.clean3Rooms();
        }
    }
}

Warto także zamienić klasyczną pętlę `for` na tę zakresową:

for (Apartment apartment : apartments) {
    // ...
}

Podobne pytania

+1 głos
2 odpowiedzi 119 wizyt
pytanie zadane 24 lipca 2020 w Java przez danielo665 Obywatel (1,040 p.)
0 głosów
0 odpowiedzi 86 wizyt
pytanie zadane 17 czerwca 2020 w Java przez danielo665 Obywatel (1,040 p.)
0 głosów
1 odpowiedź 82 wizyt
pytanie zadane 27 lutego 2018 w Java przez rubesom Obywatel (1,690 p.)

92,577 zapytań

141,426 odpowiedzi

319,653 komentarzy

61,961 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!

...