zadanie dla początkujacego - WYBÓR restauracji

0

Witam Was, proszę o podpowiedz. Przerabiam książkę z JAVY dla początkujących i po każdym rozdziale są zadania kontrolne. Jedno zadanie nie daje mi spokoju, ponieważ opierając się tylko na materiale danego rodziału (spis tresci w zalaczeniu) muszę napisac program, który na podstawie trzech kryterii zywieniowych ma wybrac mozliwe restauracje spelniajace moje wymagania. PROBLEM jest w tym, że po przerobieniu materiału bardzo dokladnie (tak mi się wydaje) nie widzę mozliwości rozwiazania (mam do dyspozycji struktury decyzyjne I NIC WIECEJ). Oczywiscie mogę rozpisac wszystkie WARIACJE Z POWTORZENIAMI (8 mozliwosci) i umiescic je w strukturze decyzyjnej typu IF... no ale chyba nie tędy droga.
OCZYWIŚCIE NIE OCZEKUJE ROZWIAZANIA ALE POPROSZE O PODPOWIEDZ. Dzieki.

0

Ale pytasz jak to zrobić po ludzku czy jak to zrobić znając tylko if? :) Obawiam się że bez żadnej sensownej struktury danych to nic lepszego od drabinki ifów nie zrobisz. Gdybyśmy mieli to zrobić po ludzku to ja bym zrobił klasę Restauracja która by miała konfiguracje (nazwa, czyWegetarianska, czyWeganska, czyBezglutenowa) i zrobiłbym tam jakąś metodę w tej klasie czyPasuje i tam porównywał te parametry.

0

Robisz zbiór wszystkich restauracji
Robisz zbiór kryteriów: np. vege + vegan

Dla każdego sub-kryterium wyrzucasz ze zbioru te restauracje które nie spełniają akurat tego kryterium
1-sze: (nie ma vege, to usuwasz każdą knajpę która nie ma vege)
2-gie: (nie ma vegan, to usuwasz z tego co zostało po pierwszym kryterium każdą knajpę która nie ma vagan)

Coś zostało? To jest odpowiedź

1
Shalom napisał(a):

Ale pytasz jak to zrobić po ludzku czy jak to zrobić znając tylko if? :) Obawiam się że bez żadnej sensownej struktury danych to nic lepszego od drabinki ifów nie zrobisz. Gdybyśmy mieli to zrobić po ludzku to ja bym zrobił klasę Restauracja która by miała konfiguracje (nazwa, czyWegetarianska, czyWeganska, czyBezglutenowa) i zrobiłbym tam jakąś metodę w tej klasie czyPasuje i tam porównywał te parametry.

bez przesady, to się da zrobić na zwykłych flagach bitowych. Każdy rodzaj diety to niech będzie jeden bit (czyli potęga dwójki: np. VEGAN = 1, VEGETARIAN = 2, NONGLUTEN = 4). Każda restauracja niech ma przypisaną maskę np. VEGETARIAN | VEGAN.

(| czyli operacja bitowa or).

potem można pobrać od użytkownika info (isVegan, isVegatarian, isNongluten)

I stworzyć maskę bitową w ten sposób: mask = isVegan * VEGAN + isVegatarian * VEGETARIAN + isNongluten * NONGLUTEN;
(gdzie isVegan itp. to albo 0 czyli fałsz, albo 1 czyli prawda).

a potem przelecieć przez wszystkie restauracje i sprawdzać, czy maska danej restauracji jest zgodna z naszą maską:
if ((restaurantMask & mask) == mask) {...... }

(& czyli operacja bitowa and)

jeśli tak, to dodajemy restaurację do listy "dobrych" restauracji.
i już.

0
import java.util.*;

public class Main {
    
    private static class Restaurant {
        final String name;
        final boolean vege;
        final boolean vegan;
        final boolean glutenFree;
        
        Restaurant (String name, boolean vege, boolean vegan, boolean glutenFree) {
            this.name = name;
            this.vege = vege;
            this.vegan = vegan;
            this.glutenFree = glutenFree;
        }
    }

    public static void main(String []args){
        final List<Restaurant> restaurants = List.of(
            new Restaurant("L", false, false, false),
            new Restaurant("P", true, false, true),
            new Restaurant("Ka", true, true, true),
            new Restaurant("W", true, false, false),
            new Restaurant("Ku", true, true, true)
        );
        final Scanner scanner = new Scanner(System.in);
        System.out.print("wege? ");
        final boolean vege = scanner.nextBoolean();
        System.out.print("wegan? ");
        final boolean vegan = scanner.nextBoolean();
        System.out.print("bez lepiku? ");
        final boolean glutenFree = scanner.nextBoolean();
        
        System.out.println("wege: " + vege + ", wegan: " + vegan + " bez lepiku: " + glutenFree);
        
        restaurants.stream()
            .filter(r -> (vege ? r.vege : true) && (vegan ? r.vegan : true) && (glutenFree ? r.glutenFree : true))
            .forEach(r -> System.out.println(r.name));
        
        System.out.println("WriteOnly.pl");
    }
}

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