Pornind de la diagrama data, implementati clasele si interfetele din diagrama si cele care mai sunt necesare pentru a putea apoi sa construiti un obiect de tip IceCream ce contine doua toppinguri: Chocolate si Vanilla. Afisati pretul si descrierea acestei inghetate (design pattern-ul Decorator)
In constructorul fiecarui topping, respectiv in constructorul BasicIceCream se va afisa un mesaj prin care se specifica ce se adauga.
Preturi: basicIceCream 0.5, ciocolata 1.5, vanilie 2.
Descriere metode:
Adding cone Adding choco Adding vanilla Ingrediente: cone, chocolate, vanilla Cost: 4.0
Sa se scrie un program pentru afisarea pe ecran a liniilor aflate pe pozitii impare dintr-un fisier text. Fiecare linie va fi precedata de numarul ei si un spatiu. In implementare, se va folosi un obiect de tip LineNumberReader. Tratati toate exceptiile care ar putea sa apara exact acolo unde apar! Atentie la inchiderea fisierelor – sa se faca chiar daca apare exceptie la citire!
Pentru validarea acestei cerinte, puteti folosi fisierul text test01.in pus la dispozitie in arhiva laboratorului.
Sa se scrie un program care citeste un text de la tastura si il salveaza intr-un fisier pe disc. Citirea se va face pana la introducerea cuvantului exit. In implementare se va uzita metoda readLine() pentru un obiect de tip DataInputStream sau BufferedReader. Tratati toate exceptiile care ar putea sa apara!
Sa se implementeze un program care citeste din fisierul test02.in un text si determina numarul de cuvinte din text. Pentru citire se vor utiliza un obiect de tip FileReader si unul de tip StreamTokenizer.
FileReader in = new FileReader(new File("test02.in")); StreamTokenizer str = new StreamTokenizer(in);
Realizați o arhitectură unificată, similară cu Collections, pentru manipularea listelor care să conțină:
Veți porni implementarea de la clasa ListUtil, pusă la dispoziție în arhiva laboratorului.
Explicatii pentru functionale:
-foldl(function, init, list)- returnează rezultatul aplicării functiei function pe rând asupra unui element din listă si a unui acumulator init. Ordinea folosirii elementelor din listă este de la stânga la dreapta; Exemplu: foldl(f(x, y) = x + y, 5, [0, 1, 2, 3]) ⇒ 11
-foldr(function, init, list)- are un comportament similar cu foldl, însă ordinea folosirii elementelor din listă este de la dreapta la stânga; Exemplu: foldr(f(x, y) = y, 4, [0, 1, 2, 3]) ⇒ 0
-map(function, list)- returnează lista rezultatelor aplicării unei functii f asupra fiecărui element dintr-o listă; Exemplu: map(f(x) = 2*x,[0, 1, 2, 3]) ⇒ [0, 2, 4, 6]
-filter(predicat, list)- returnează lista elementelor dintr-o listă care satisfac un predicat p (un predicat îl vom percepe ca o functie care are un rezultat de tip Boolean); Exemplu: filter(f(x) = x % 2 == 0, P[0, 1, 2, 3]) ⇒ [0, 2]
-reduce(function, list)- aplică functia pentru primele două elemente din lista, apoi pentru rezultatul obtinut anterior si urmatorul element si tot asa; Exemplu: reduce(f(x, y) = x + y, [47, 11, 42, 13]) ⇒ 113
-all(predicat, list)- primeste un predicat (metoda ce are ca rezultat un boolean) si verifică dacă toate elementele din listă satisfac predicatul; Exemplu: all(f(x) = x > 0, [0, 1, 2, 3]) ⇒ True ; all(f(x) = x % 2 == 0, [0, 1, 2, 3]) ⇒ False
-any(predicat, list)- primeste un predicat si verifică dacă exista cel putin un element în lista care satisface predicatul. Exemplu: any(f(x) = x < 0,[1, 2, 3, 4]) ⇒ False ; any(f(x) = x % 2 == 0,[1, 2, 3]) ⇒ True
Pentru testare, completati exemplele din clasa Test.