Tesztesetek írása akkor is javasolt, ha ez nem szerepel a feladatleírásban.
Írj egy Phone
osztályt, type
(String
) és mem (int
) attribútumokkal!
Generálj konstruktort, gettert és settert! Írj bele egy main
metódust, amivel példányosítasz egy osztályt, és kiírod az attribútumok értékeit!
Írj egy Product
oszályt String name
és String code
attribútumokkal!
Legyen egy konstruktora a két attribútummal! Legyen egy areTheyEqual()
metódusa, mely kap egy másik Product
példányt, és eldönti, hogy
azonos-e az adott példánnyal. Két termék akkor egyezik, ha
a nevük megegyezik.
Bónusz: szigorúbb egyelőség a feltételre: a két termék kódjának hosszának különbsége maximum egy karakter lehet.
Hozz létre egy InputNames
Java osztályt, melynek van egy main
metódusa.
Ciklusban kérj be öt nevet! A neveket tárold el egy tömbben!
Írd ki a tömb tartalmát, sortöréssel elválasztva (írd bele, hogy hanyadik elem - 1-től sorszámozva)!
Hozz létre egy Languages
osztályt, main
metódussal!
Ebben hozz létre egy listát, mely karakterláncokat tartalmaz!
Vegyetek fel 3 elemet: Java
, Python
, JavaScript
!
Írd ki, az öt karakternél hosszabb programozási nyelveket!
Írj egy Position
osztályt, melynek van egy name
és egy bonus
attribútuma!
Egy alkalmazotti pozíciót jelöl, melynek a bonus
attribútuma tárolja, hogy
ebben a pozícióban évente mennyi bónuszt kap egy alkalmazott.
A main
metódusban hozz létre egy Position
objektumokat tartalmazo listát!
Menj végig a lista elemein, és írd ki azokat, ahol a bónusz magasabb, mint
150_000. Azonban a kiírás
formátumát a Position
osztály toString()
metódusában implementáld!
Írj egy Phone
oszályt, melynek van egy prefix
és egy number
String
attribútuma! Írj egy PhoneParser
osztályt egy
parse(String)
metódussal, ami beolvas egy 10-1234567
formátumú szöveget, és visszaad egy Phone
objektumot,
feltöltve a prefix
értékét 10
, a number
értékét 1234567
értékekkel!
Írj egy Operation
osztályt, mely konstruktorban kap egy
összeadást, pl. 68+12
! A getResult()
metódus visszaadja a
művelet eredményét. Egy belső leftOperand
és rightOperand
attribútumba dolgozz!
Készítsd el a NameChanger
osztályt, melynek privát attribútuma
legyen a String fullName
, mely egy ember teljes nevét reprezentálja!
A fullName
attribútum [vezetéknév][szóköz][keresztnév]
formátumban épül fel.
A konstruktor állítsa be a paraméterül kapott értékre az adattagot,
de ha az érték null
, vagy üres String, akkor dobjon egy
IllegalAgrumentException
kivételt a következő üzenettel:
Invalid name:[paraméter értéke]
!
Legyen egy changeFirstName(String firstName)
metódusa, mely megváltoztatja az
objektum állapotát és kicseréli a vezetéknevet a paraméterül kapott értékre!
A Search
osztályban írj egy getIndexesOfChar()
metódust, mely első paraméterként vár egy String
értéket,
második paraméterként egy char
értéket! Visszaad egy listát,
melyben visszaadja, hogy a karakter hanyadik indexeken
szerepel az első paraméterként átadott listában.
Pl.: almafa
szóban a a
karakter: 0, 3, 5.
Írj egy számkitaláló programot a GuessTheNumber
osztályba! A
program kitalál egy véletlenszerű számot 1 és 100 között. Majd
bekér a felhasználótól ciklusban számokat. Mindig megmondja,
hogy a szám, kisebb, nagyobb vagy egyenlő-e mint a gondolt szám.
Bónusz feladat: max 6-szor lehet kérdezni!
Írj egy CharOperations
osztályt, abban egy List<Integer> getPositionOfChars(String base, String part)
metódust! A metódus visszaadja, hogy az első stringben a második string
mely pozíciókon helyezkedik el.
A ChangeLetter
osztályban írj meg egy String changeVowels(String)
metódust, mely kicseréli a paraméterként átadott szövegben az angol magánhangzókat
csillag (*
) karakterre.
Írj egy olyan metódust a ListCounter
osztályban, mely a kapott String
listából
összeszámolja azokat, amelyek a
vagy A
betűvel kezdődnek! Ha nulla elemű a tömb,
vagy nincs benne ilyen elem, akkor nulla értéket adjon vissza!
A UserValidator
osztályba írj egy validate(List<User>)
metódust, mely leellenőrzi a paraméterben
átadott felhasználókat! (A User
egy String name
és egy int age
attribútumot tartalmazzon!)
Ha a lista null
, dobjon kivételt! Ha a felhasználó null
, dobjon kivételt! Ha
A felhasználó neve null
, vagy üres, dobjon kivételt! Ha az életkor
kisebb, mint 0, vagy nagyobb, mint 120, dobjon kivételt!
Készíts egy Product
osztályt melyben egy termékről tárolod a nevét és a lejárati dátumát (LocalDate
)! Legyen egy konstruktora, ami a nevet kapja meg illetve a lejárati dátumot három részletben int year
, int month
, int day
(public Product(String name, int year, int month, int day)
)! A lejárati dátumot a konstruktorban állítsd össze! Legyen mindkettőhöz getter metódus! Készíts egy Store
osztályt, melyben van egy Product
-okat tároló lista. Legyen benne egy addProduct(Product)
metódus!
Bónusz: Legyen benne egy getNumberOfExpired()
metódus ami visszaadja a lejárt termékek számát! Használd a LocalDate.now()
és az isBefore()
metódusokat!
Készíts egy osztályt Product
néven, melynek van egy price
(long
) és egy currency
(String
) mezője. A Product
a konstruktorában ellenőrizze a currency
mezőt, melynek az értéke vagy HUF
, vagy USD
lehet.
Készíts egy metódust convertPrice()
néven, melynek egy paramétere van (currency
) és visszaadja a currency
-nek megfelelő összeget (double
). Használjunk 300 forintos átváltási árfolyamot! Példa: ha a Product
-ot létrehozzuk a következőképp: new Product(150, "HUF")
, majd meghívjuk a convertPrice
-ot USD
paraméterrel, akkor az elvárt visszatérési érték 0.5
.
Bónusz feladat: Használj enum-ot String helyett a pénznem reprezentációjára!
Készíts egy osztályt User
néven, melynek van egy firstName
(String
), egy lastName
(String
) és egy email (String
) mezője! Legyen ellenőrzés a User
konstruktorában, mely hibát jelez, ha nincs @
és .
(pont) az e-mail cimben! Készíts egy metódust is getFullName()
névvel, mely visszaadja a firstName
és a lastName
változókat összefűzve. Legyen közöttük egy whitespace (" ").
Készítsünk egy Song
osztályt, melynek az alábbi mezői vannak:
String name
long lengthInSeconds
String artist
A Song
konstruktorában ellenőrizd, hogy a name
és az artist
üres-e! Dobj kivételt, ha igen! Ellenőrizd továbbá a lengthInSeconds
-ot is, hogy nagyobb legyen, mint 0
!
Készítsünk egy Playlist
osztályt, melynek van egy konstruktora, amiben Song
-ok listáját fogadja el!
Írjunk egy metódust findByLengthGreaterThan
néven, mely egy int
-et vár paraméterként mins
néven.
Azoknak a Song
-oknak a listáját adjuk vissza, melyek hosszabbak percben (!), mint a Song
lengthInSeconds
mezője.
Bónusz feladat: Implementáljuk megfelelően a toString
metódust a Song
és a Playlist
osztályban, hogy a Playliset
-et kiirva a konzolra olvasható eredményt kapjunk!
Írj egy olyan metódust az ListSelector
osztályban, mely egy kapott listából minden második elemet kiválogat, és egy szövegként összerak, szögletes zárójelek között.
A páros megállapítása index szerint működik. Azaz az első, nulla indexű elem páros, a második, azaz egyes indexű elem páratlan, stb.
Ha üres a lista, akkor üres stringet adjunk vissza. Ha a paraméterül kapott lista null
, akkor dobj IllegalArgumentExceptiont
a metódusban!
Írj egy SeparatedSum.sum(String s)
metódust, mely kap egy String
-et, melyben lebegőpontos számok szerepelnek pontosvesszővel elválasztva. A számoknál vessző a tizedeselválasztó. Ezt szétszedi, és összeadja külön a pozitív és külön a negatív számokat. Mivel térnél vissza ebből a metódusból?
Hozz létre egy Product
osztályt melynek adattagjai a név, kategória és ár, rendre String
, String
int! Készíts egy Store
osztályt benne egy Product
listával, amit konstruktorban kap meg. Legyen egy getProductByCategoryName(Category)
, ami visszaadja, hogy a paraméterül kapott kategóriából hány darab van a listában!
Bónusz: A kategória legyen enum FROZEN
, DAIRY
, BAKEDGOODS
, OTHER
felsorolókkal!
Hozz létre egy Product
osztályt melynek adattagjai a név, kategória és ár. A kategória legyen enum FROZEN
, DAIRY
, BAKEDGOODS
, OTHER
felsorolókkal. Készíts egy Store
osztályt benne egy Product
listával, amit konstruktorban kap meg. Legyen egy getProductsByCategory()
aminek az lényége, hogy visszaadja valamilyen adatszerkezetben, hogy melyik kategóriából hány darab van a listában. A "valamilyen adatszerkezet" a kreativításodra van bízva, az a lényeg, hogy valahogy egyben kapjam meg, hogy melyik kategóriából hány darab van.
A WordEraser
osztályban legyen egy eraseWord(String words, String word)
metódus, mely az első paraméter szöveget úgy változtatja meg, hogy a második paraméter összes előforulását kitörli belőle. A words
paraméterben a szavak szóközzel vannak elválasztva. A metódus térjen vissza a törölni kívánt szavak nélküli Stringgel. (Mellőzzük a replace
és replaceAll
használatát!)
A Series
osztályban hozz létre egy calculateSeriesType()
metódust, mely egész számok listáját kapja, és eldönti, hogy növekvő, csökkenő vagy össze-vissza sorozatról van-e szó! Feltétel, hogy a bemeneti lista nem tartalmaz egymás után egyenlő értékeket. Ha a lista üres, vagy csak egy elemből áll, dobj kivételt! Mivel térnél vissza?
Készíts az egy Budget
osztályt, amely a konstruktorában Item
példányokat vár listában (List
). Az Item
tartalmazza az alábbi attribútumokat: int price
, int month
, String name
. A Budget
osztály tárolja el egy attribútumban a konstruktorban megkapott items
listát. Írj egy metódust, getItemsByMonth
néven, mely egy hónapot vár (1-12) és visszaadja az Item
-eket az adott hónapban! Bónusz feladat: ellenőrizzük a bemeneti paramétereket!
A ShoppingCart
osztályba dolgozz! Legyen egy addItem(String name, int quantity)
metódusa, mellyel új bevásárlólista tételt lehet felvenni (termék neve és mennyisége). Az adatokat egy Item
listába tárolja. Amennyiben már benne van az adott termék, ne újonnan vegye fel, hanem adja hozzá a mennyiséget a már felvett tételhez! Lehessen visszakérdezni név alapján a felvett mennyiséget a getItem(String name): int
metódussal. Ha nem szerepel benne, 0
értéket adjon vissza!
Készíts egy Biscuit
nevű osztályt, amelynek van két attribútuma: BiscuitType type
és int gramAmount
. A BiscuitType
legyen felsorolásos típus a három kedvenc kekszfajtáddal! A Biscuit
nevű osztálynak legyen egy static
metódusa of
néven, mely paraméterként egy BiscuitType
-ot, és egy int gramAmount
-ot vár és visszaad egy új Biscuit
objektumot amelyet a megadott paraméterek alapján hoz létre. Bónusz feladat: konzolra írás esetén a Biscuit
jelenítse meg a type
és a gramAmount
mezőket!
Készíts egy Bottle
nevű osztályt, amelynek van 2 attribútuma: BottleType type
és int filledUntil
. A BottleType
legyen felsorolásos típus az alábbi értékekkel: GLASS_BOTTLE
és PET_BOTTLE
! A Bottle
nevű osztálynak legyen egy static
metódusa of
néven, mely paraméterként egy BottleType
-ot vár és visszaad egy új Bottle
objektumot amelyet a megadott paraméter alapján hoz létre. A Bottle
osztálynak legyen egy fill
metódusa, mely egy int fillAmount
paramétert vár. A fill
meghívása esetén végezzen ellenőrzést, hogy megtelt-e már a Bottle
objektum. Az ehhez szükséges int maximumAmount
mezőt a BottleType
tartalmazza! Ha túlcsordulna a Bottle
objektum, akkor dobj kivételt!
Készíts egy osztályt MathAlgorithms
néven. Ebben az osztályban legyen egy isPrime(int x)
metódus ami a paraméterül kapott számról eldönti, hogy prím-e vagy sem és ennek megfelelően true
vagy false
értékkel tér vissza. Aki már tart ott és tudja mit jelent a static
az nyugodtan implementálhatja a metódust statikus metódusként. Az egyszerűség kedvért a prímeket most csak a pozitív egész számok körében értelmezzük, így bónuszként rá lehet ellenőrizni, hogy x > 0
, és ha nem, akkor kivételt dobni. Prímeknek tekintjük azokat számokat melyek csak egyel és önmagukkal oszthatók, tehát a 2, 3, 5, 7, 11, 13 stb.
Készíts egy osztályt Fibonacci
néven! Legyen benne egy fib
metódus, ami egy int n
paramétert vár! A visszatérési értékünk legyen egy long
szám, ami az n-edik fibonacci számot tartalmazza. (A fibonacci szám az az az előző kettő fibonacci szám összege és az első két szám az 1, 1.
Bónusz feladat: implementáld az algoritmust ciklus nélkül és mentsd el a részeredményeket egy statikus változóba!
Pontosítás: Ha n = 0, akkor 0-t adunk vissza, ha n = 1, akkor 1-et, ezért lesz a 2. elem szintén 1, mert 0 + 1 = 1
Készíts egy DigitSum
osztályt és benne sumOfDigits(int x)
metódus mely visszaadja a paraméterül kapott szám számjegyeinek összegét! pl.: 123 esetén a visszatérési érték 6.
Készíts egy interfészt User
néven. Az interfésznek legyen egy String getUsername()
, egy String getFirstName()
, egy String getLastName()
és egy String getFullName()
metódusa! Implementáld a User
interfészt egy UserImpl
nevű osztályban, mely konstruktor paraméterként várja az username
, a firstName
és a lastName
paramétereket. A getFullName
metódushoz adjunk az interfészben egy default implementációt!
Bónusz feladat: Készítsünk egy statikus függvényt az User
interfészben of
néven, mely létrehoz egy új User
típusú objektumot!
Hozz létre egy NumberList osztályt! Ennek legyen egy metódusa isIncreasing(List<Integer>)
, mely egy számokból álló listát vár paraméterül és megnézi, hogy a listában a számok növekvő sorrendben szerepelnek-e és ennek megfelelően igaz vagy hamis értékkel tér vissza! Speciális eset ha két egymást követő szám egyenlő, ez nem probléma a 1, 2, 3, 3, 3, 5 számokat növekvőnek tekintjük.
Készítsünk egy Date
osztályt, mely az alábbi attribútumokkal rendelkezik: int year
, int month
, int day
. Az összes attribútum legyen final
! Készítsünk továbbá egy statikus of metódust, mely a year
, month
és day
paramétereket várja és létrehoz egy Date
objektumot ezek alapján. Legyen továbbá a Date
-nek egy withYear(int year)
, withMonth(int month)
és egy withDay(int day)
metódusa, melyek egy új Date
objektumot adnak vissza az eredeti Date
objektum adataival, azzal a különbséggel, hogy az új objektum a megadott paraméter értékét tartalmazza a megfelelő helyen (year
, month
vagy day
).
Hozz létre egy Lab
nevű osztályt, ami azt tárolja el, hogy melyik feladattal készültél el! Három attribútuma: title
ami a tananyag neve, egy completed
, hogy elkészültél-e vele, és a completedAt
, ami azt tárolja, hogy mikor! Legyen két konstruktora! Az egyik csak a címet várja, ekkor úgy állítsa be a példányt, hogy még nem készültél el. Legyen egy másik, ami várja a címet és a dátumot Ekkor azt állítsa be, hogy elvégezted a gyakorlati feladatot. Írj egy complete
metódust, ami kap egy dátumot, és beállítja, hogy elvégezted a gyakorlati feladatot. Legyen egy complete
metódusa, ami semmit nem vár, ez azt állítja be, hogy MOST végezted el a gyakorlati feladatot. Írd meg a toString
metódusát is!
A ShoppingList
osztályba írj egy long calculateSum(String path)
metódust, mely a paraméterként átadott fájlból beolvassa a bevásárlólista tartalmát, és összegzi az árat! A fájl a következő formátumú sorokat tartalmazza: kenyér;2;30
, ahol az első a termék neve, a második a darabszám, a harmadik az egységár. Azaz ezen sor esetén 2 * 30 = 60 értékkel kell számolni.
Készíts egy Vehicle
, egy Car
, egy Truck
és egy Motorcycle
osztályt. A Vehicle
osztálynak legyen egy int getNumberOfGears
és egy TransmissionType getTransmissionType
metódusa. A fenti osztályok értelemszerűen öröklődjenek egymásból és mindegyiknek implementálja a sebességek számát és a váltó típusát. A lehetséges váltótípusok: MANUAL
, AUTOMATIC
, SEQUENTIAL
. Az alapértelmezett váltó típus (a Vehicle
osztályban) MANUAL, de a Car
automatikus, míg a Motorcycle
SEQUENTIAL
. Az alapértelmezett sebesség szám 5.
Kérj be a felhasználótól három sort, majd a fájl nevét! Mentsd el a sorokat ebbe a fájlba! A SaveInput
osztályba dolgozz!
A feladatban egy robot mozgását fogjuk szimulálni. Képzelj el egy koordináta rendszert, ahol a robot az origóban van. A robot négy irányba képes mozogni fel, le, balra és jobbra. A week08d01.Robot
osztályban írj egy move()
metódust ami egy karaktersorozatot vár. pl: FFLLLLLBBBBJJJJJJJ, ahol az F = fel, L=le, B=bal, J=jobb. A metódus visszatérési értéke legyen a robot mozgás utáni pozíciója. A feladat szabadon bővíthető osztályokkal és metódusokkal. Bónusz kiegészítés, hogyha más karaktert is tartalmaz a paraméter String nem csak a FLBJ valamelyikét, akkor dobjunk IllegalArgumentExceptiont!
A török szultán elhatározza, hogy a 100 nap múlva lévő születésnapján szabadon enged néhány rabot a börtönéből. A börtönben 100 cella van. Mindegyik cella zárva van. Ha egyet fordítunk a kulcson akkor nyitva lesz, ha még egyet akkor zárva ha hármat akkor ismét nyitva és így tovább.
A szultán azt a parancsot adja, hogy az első nap mindegyik cellán fordítsanak egyet. (Ekkor minden cella nyitva lesz). A második napon minden másodikon fordítsanak egyet, így minden második zárva lesz. A harmadik napon minden harmadikon fordítsanak egyet így a 3. cella zárva , de a 6. cella például nyitva lesz. A week08d01.Sultan
osztályba írj egy metódust openDoors()
néven, aminek visszatérési értékéből kiderül, hogy mely ajtók lesznek nyitva a 100. napon! Az osztály szabadon bővíthető!
Készíts a week08d02
csomagban egy Lottery
osztályt, melynek legyen egy getNumbers()
metódusa, ami visszaad egy listát amiben 5 véletlen szám van 1-90 között, tehát kvázi készíts egy lottósorsoló programot. A sorrendre nem kell figyelni, a lényeg, hogy a számok különbözők legyenek!
Adott a countries.txt
állomány, melyet helyezz el a projekt gyökérkönyvtárába. A fájlban az adatok a következők: ország_neve népesség hány_színű_a_zászló szomszédos_országok_száma. Készíts a week08d02 csomagba egy CountryStatistics
osztályt melyben van egy metódus, ami az adatokat beolvassa egy listába. A lista legyen az osztály privát attribútuma, és legyen hozzá getter metódus, figyelj arra, hogy ezen keresztül ne lehessen megváltoztatni a listát. Készíts egy metódust maxPopulaton()
néven, ami a listából visszaadja a legnagyobb népességű ország minden adatát. Adatok:
Nepal 31 3 2
Csad 13 3 6
Kongoi_Demokratikus_Koztarsasag 79 3 9
Honduras 8 2 3
Kirgizisztán 6 2 4
Dzsibuti 1 4 3
Togo 7 4 3
Kambodzsa 15 3 3
Guyana 1 5 3
Albánia 3 2 4
Libanon 4 3 2
Készíts week08d03
csomagban egy StringLists
osztályt és benne egy stringListsUnion(List<String> first, List<String> second)
metódust, mely két string listát vár paraméterül és visszaadja az uniójukat. Az úniónak minden elemet tartalmaznia kell mindkét listából, de egy elem nem szerepelhet kétszer!
Készíts a week08d03
csomagban egy StringLists
osztályt és benne egy shortestWords(List<String> words)
metódust, mely paraméterül kap egy String listát és a legrövidebb szavakat vissza adja belőle egy Listában. PL :{"aaa", "aa", "bb", "cccc", "dd"} Itt a legrövidebb szavak az "aa", "bb", "dd".
Hozz létre egy CanMark
interfészt egy int giveMark()
metódussal! Ez azt jelenti, hogy valaki
tud osztályzatot adni. Ennek legyen két implementációja, egy GoodMood
osztály, mely mindig 5
értéket ad vissza, és egy BadMood
osztály, mely mindig 3
értéket ad vissza!
Azaz jó hangulatban valaki mindig ötöst ad, rossz hangulatban hármast.
Legyen egy Trainer
osztály, melynek van egy CanMark
attribútuma, mely konstruktorral állítható be! És
legyen egy int giveMark()
metódusa, mely továbbhív, azaz "delegál" a CanMark
példány felé!
Hozz létre a main()
metódusban egy Trainer
példányt, aki jó hangulatban van (azaz konstruktorban
adj át neki egy GoodMood
példányt, és egy másikat, aki BadMood
példányt kap! Majd hívd meg
a giveMark()
metódusát mindkettőnek, és nézd meg, mit ad vissza!
Legyen a classpath-on egy examples.md
fájl, mely a gyakorlati feladatok leírásait tartalmazza
a következő formátumban! A ExamplesStore
osztályba írj egy getTitlesOfExamples()
metódust, mely visszaadja a feladatok címeit egy listában!
# Első feladat
Írj egy programot, amely
kiírja az összeadás eredményét!
# Második feladat
Írj egy programot,
mely kiírja a kivonás eredményét!
A week08d05 csomagban készíts egy osztályt MathAlgorithms néven. Legyen benne egy metódus, greatestCommonDivisor(), ami paraméterül vár két pozitív egész számot és visszaadja a legnagyobb közös osztójukat.
Egy repülőgéppel átszeljük az óceánt és a közben méréseket végzünk. Tudjuk, hogy partól indulunk és parthoz érünk. A méréseket adott időközönként egyenletesen végezzük. A mérések azt mutatják, hogy sziget vagy óceán fölött repülünk éppen. Az 1-es szigetet míg a 0 óceánt jelöl. pl.: 111000010100001 sorozatban egy három "hosszú" sziget majd négy hosszú "óceán", aztán sziget, víz, sziget, majd óceán és végül egy szigeten leszálltunk. A map.txt állományban egy "térképet" tárolunk. A feladat az, hogy "repüljünk" a térkép fölött végig és határozzuk meg a leghosszabb óceán szakasz hosszát. A térkép fölött csak egyszer repülhetünk el és amikor leszálltunk már tudnunk is kell az eredményt. (Magyarul ne olvasd be a file-t a memóriába) A feladatot a week08d05.Plane osztályba végezzük el. A térkép: 10000000111110000000000001111111111000010000010000100000111111110000101000000000111110000000000000000100000001000000000000111111000000000100000000000011
A mai feladatban Mikulásnak segítünk ajándékokat kiosztani. A week09d03
csomagba dolgozz. Készíts egy Present
nevű enumot a következő felsorolókkal: Toy
, Electronic
, Housekepping
, Decoration
. Ezek fogják az ajándékok típusát reprezentálni. Készíts egy Person
osztályt legyen neki neve és életkora és legyen egy Present típusú attribútuma. A nevet és életkort konstruktorban kapja meg. Legyen egy setPresent()
metódusa ami beállítja az ajándék attribútumot véletlenszerűen, egy kitétel van, 14 év fölötti nem kaphat játékot. Ennek megvalósításához szabadon bővíthetőek az eddig elkészült elemek. Legyen egy SantaClaus
osztály, akinek van egy Person
listája, amit konstruktorban kap meg. Legyen neki egy getThroughChimneys()
metódusa, ami végigmegy az emberek listáján és meghívja minden ember setPresent()
metódusát.
Túrázás közben egy GPS eszköz rögzíti a pontokat. Eltárolja a GPS koordinátákat, valamint a magasságot (mindegyik lebegőpontos érték).
Írj a week10d01.Hiking
osztályba egy getPlusElevation()
metódust, mely megkapja a magasságok listáját, és visszaadja
a emelkedések összegét. Azaz pl. 10,20,15,18
esetén 13
, ugyanis (20 - 10) + (18 - 15)
. A 20
méterről 15
méterre ereszkedést nem számolja bele,
hiszen az ereszkedés, és nem emelkedés.
Túrázás közben egy GPS eszköz rögzíti a pontokat. Eltárolja a GPS koordinátákat, valamint a magasságot (mindegyik lebegőpontos érték). Ezt egy fájlba tárolja, melynek formátuma:
47.497913, 19.040236, 400
47.497912, 19.040232, 420
47.497916, 19.040236, 410
Írj a week10d01.HikingFile
osztályba egy getPlusElevation()
metódust, mely kap egy InputStream
-et, és visszaadja
külön az ereszkedések, és külön az emelkedések összegét. Azaz pl. 10,20,15,18
esetén az emelkedés 13
, ugyanis (20 - 10) + (18 - 15)
.
A 20
méterről 15
méterre ereszkedést pedig 5
.
Van egy egész számok listája, amelyben egy szám azt jelzi, hogy az adott számú buszmegállóban egy ember fel akar szállni. A 12,12,0,3,4,4
sorozat tehát azt jelenti, hogy a 12-es buszmegállóban 2-en, a 0-ásban 1 ember, 3-asban egy ember, 4-esben 2 ember akar felszállni. A MaxTravel
osztály getMaxIndex()
metódusa adja vissza, hogy hanyas megállóban szeretnének a legtöbben felszálln! Maximum 30 megálló lehet.
Leegyszerűsítve a feladat az, hogy a paraméterként átadott tömbben keresse meg, hogy melyik szám szerepel a legtöbbször.
Adott egy fájl, utasadat.txt
, mely a következőket tartalmazza:
0 20190326-0700 6572582 RVS 20210101
0 20190326-0700 8808290 JGY 7
0 20190326-0700 1680423 TAB 20190420
12 20190326-0716 3134404 FEB 20190301
12 20190326-0716 9529716 JGY 0
Egy sor egy felszálló adatait tárolja.
Egy sorban a megálló száma az első oszlop. Írj egy Travel.getStopWithMax(InputStream)
metódust, mely
visszaadja, hogy melyik megállóban szerettek volna a legtöbben
felszállni! Maximum 30 megálló lehet.
Készítsünk egy Calculator
nevű osztályt, melynek van egy findMinSum(int[] arr)
metódusa. A metódus feladata, hogy kiírja a legkisebb összegeket 4
számból, amiket lehetséges összerakni az arr
tömb elemeiből. Példa: ha az arr
tartalma [1, 3, 5, 7, 9]
, akkor a minimum összeg 1+3+5+7=16
.
Készítsünk egy Calculator
nevű osztályt, melynek van egy findMinMaxSum(int[] arr)
metódusa. A metódus feladata, hogy kiírja a legnagyobb és a legkisebb összegeket 4
számból, amiket lehetséges összerakni az arr
tömb elemeiből. Példa: ha az arr
tartalma [1, 3, 5, 7, 9]
, akkor a minimum összeg 1+3+5+7=16
, a maximum összeg 3+5+7+9=24
.
A Calculator
osztály tartalmazzon egy main
metódust is, amely a konzolról olvassa be a számokat és azokból készít tömböt, amivel meghívja a findMinMaxSum
metódust.
Készítsünk egy DivisorFinder
nevű osztályt, melynek van egy int findDivisors(int n)
metódusa. A feladat az, hogy megnézzük a szám minden egyes számjegyére, hogy osztója-e a számnak, majd számoljuk össze őket. Példa: a 425
-ben az 5
osztója a számnak, ezért a visszatérési érték 1
.
Készítsünk egy PairFinder
nevű osztályt, melynek van egy int findPairs(int[] arr)
metódusa. A feladat az, hogy a tömb elemeiből kikeressük, hogy hány darab pár van bennük. Ha egy szám kétszer szerepel a tömbben, akkor az egy párnak számít. Példa: A [5, 1, 4, 5]
tömbben kétszer szerepel az 5, ezért a visszatérési érték 1
. A [7, 1, 5, 7, 3, 3, 5, 7, 6, 7]
tömbben négyszer szerepel a 7, ezért ez 2 párnak számít, illetve a 3 kétszer szerepel, így a visszatérési érték 3
.
A feladatban egy biciklis futár egy heti munkáját rögzítjük és készítünk statissztikákat.
A futár minden fuvar után feljegyzi, hogy a hét hányadik napján történt a fuvar. Ezután azt, hogy az adott nap hányadik fuvarját teljesítette és ezután azt, hogy hány kilométer volt az adott fuvar. A futár egy-egy fuvarját reprezentálja a Ride
nevű osztály, adatagokkal, konstruktorra, getterekkel.
Készítsd el a Courier
osztályt. Ez fogja a futárt reprezentálni. Legyen egy rides listája ami fuvarokat tárol. Legyen egy addRide metódus, ami csak sorrendben enged hozzáadni elemeket a listához. Figyeljünk viszont arra, hogy nem feltétlenül minden nap dolgozott a futár, de ha már bekerült egy 3. napi fuvar, akkor ne kerülhessen be egy 2. napi. És arra is figyelj, hogy a napon belül is sorrendben kerüljenek be az adatok. Ha a paraméterül kapott Ride nem felel meg a feltételeknek dobjunk IllegalArgumentException
-t.
pl egy helyes listára: 1 1 12 1 2 11 2 1 10 4 1 19
Készíts egy metódust, ami visszad egy napot amikor a futár nem dolgozott. Ha több ilyen nap is van akkor a korábbit!
A feladatban egy biciklis futár egy heti munkáját rögzítjük és készítünk statissztikákat.
A futár minden fuvar után feljegyzi, hogy a hét hányadik napján történt a fuvar. Ezután azt, hogy az adott nap hányadik fuvarját teljesítette és ezután azt, hogy hány kilométer volt az adott fuvar. A futár egy-egy fuvarját reprezentálja a Ride
nevű osztály.
Készítsd el a Courier
osztályt. Ez fogja a futárt reprezentálni. Legyen egy metódusa, ami a mellékelt fájl fuvarjait beolvassa és eltárolja a memóriában. Figyelem a fuvarok nem sorrendben vannak! (Készíts magadnak minta fájlt!)
Készíts egy metódust ami visszaadja a hét legelső fuvarjának minden adatát. Figyelj arra, hogy nem sorrendben vannak a fuvaraok és lehet, hogy nem is dolgozott az 1-es számú napon. Készíts egy metódust, ami visszaadja valamilyen formában, hogy mely napokon nem dolgozott a futár! Készíts egy metódust, ami visszaadja valamilyen formában napokra lebontva, hogy melyik nap hány kilométert tekert!
Készíts egy WordFilter
osztályt, melyben van egy List<String> wordsWithChar(List<String> words, char c)
metódus. A metódus kiválógatja a paraméterül kapott String listából azokat a szavakat, melyekben előfordul a c karakter, majd ezeket visszaadja egy listában.
Készítsünk egy CharCounter
osztályt, melyben van egy int countChars(String[] chars)
metódus. A feladat az, hogy összeszámoljuk azokat a karaktereket asz összes chars
-ban lévő String
-ből, amelyek mindegyik String
-ben szerepelnek. Példa: Ha a chars-ban ["abc", "cba", "ab"]
szerepel, akkor a visszatérési érték 2
, mert az a
és a b
karakter szerepel mindegyik String
-ben.
Adott az aktuális könyvtárban több, fájl, melynek a nevei: number00.txt
, number03.txt
, number20.txt
, egészen 99
-ig.
Nem minden fájl létezik, lehet, hogy bizonyos számhoz tartozó fájl kimaradt. Olvasd be az állományból a benne lévő
számot, és ezt összegezd! Használd a Files.isRegularFile()
metódust arra, hogy megnézd, létezik-e a fájl!
Használd a Files.readString()
metódust a fájl beolvasására! A FilesSum
osztály int sumNumbers()
metódusába dolgozz!
try {
String content = Files.readString(Path.of("helloworld.txt"));
System.out.println(content);
} catch (IOException e) {
throw new IllegalStateException("Can not read", e);
}
System.out.println(Files.isRegularFile(Path.of("kutya.txt")));
System.out.println(Files.isRegularFile(Path.of("helloworld.txt")));
Adott egy nevek listája. Add vissza egy listában, hogy milyen hosszúságú J
karakterrel kezdődő nevek szerepelnek a listában! Minden szám
csak egyszer szerepeljen! A NameLength
osztály getLengths(List<String>)
metódusába dolgozz!
Ha a bemenet pl. List.of("Joe", "Jack", "Jane", "Jake", "George", "William")
, a visszatérési érték [3, 4]
legyen!
Készíts egy GradeRounder
osztályt, amiben van egy int[] grades roundGrades(int[] grades)
metódus. A grades
tömb pontszámokat tartalmaz 0 és 100 között. A feladat az, hogy kerekítsük a benne lévő számokat a következő szabály szerint: Ha a pontszám és az 5
következő többszöröse közötti különbség kisebb, mint 3
, akkor kerekítsük fel a számot az 5
következő többszörösére. Fontos: a 40
pont alatti pontszámok elégtelenek, ezeket egyáltalán nem kell kerekíteni. Példa: a pontszám 84
. 85 - 84
kevesebb mint 3
, így felfelé kerekítünk.
Készíts egy GoodsPacker
osztályt, melynek van egy int packGoods(int[][] types, int capacity)
metódusa. A types
tömb számpárokat tartalmaz, melyek tárgyak súlyát és értékét tartalmazzák, például: [(7, 160), (3, 90), (2, 15)]
. Az első szám a súly kilogrammban, a második szám az érték forintban. A feladat az, hogy kiszámoljuk, hogy a megadott táskamérethez (capacity
) mennyi a tárgyak maximum értéke, amit belepakolhatunk a táskába. Például ha a types
[(7, 160), (3, 90), (2, 15)]
és a capacity
20
, akkor a maximum érték 555
.
Készítsd el a Site
(telek) nevű osztályt. Egy telek jellemzői, páros vagy páratlan oldalon található, (0 = páros oldal 1 = páratlan oldal), a telek hossza méterben. Illetve egy Fence
enum, ami a kerítés állapotát írja le. A kerités állapota lehet, PERFECT
, NEED_UPGRADE
, NO_FENCE
. (konstruktor, getterek)
Készítsd el a Street
neű osztályt, melyben eladott telkek listája található. Kezdetben ez egy üres lista.
Készíts egy sellSite(Site site)
metódust, ami egy telek eladását reprezentálja, vagyis hozzádunk egy telket a listához.
Határozd meg az utoljára eladott telek (lista utolsó eleme) házszámát, ha tudjuk, hogy a telkeket a két oldalon egymás után adták el! (páros oldalon kettőtől, páratlan oldalon 1-től indul a számozás)
pl:
0 10 PERFECT
0 7 NEED_UPGRADE
1 12 NEED_UPGRADE
0 9 PERFECT
0 11 NO_FENCE
1 13 PERFECT
A példában a házszámok rendre: 2,4,1,6,8,3
Készíts statisztikát, ami a kerítés állapota alapján visszaadja, hogy mennyi telket adtak el kerítésfajtánként! (Egy metódus legyen, a visszatérési értéket ti döntitek el, de abból legyen egyértelmű, hogy melyikből mennyit adtak el.)
A kerites.txt fájlban egy utca telek nyilvántartását találjuk. Minden sorban három adat található. Az első szám megadja, hogy a telek a páros (0) vagy a páratlan (1) oldalán van az utcának; a második a telek szélességét adja meg méterben (egész szám, értéke 8 és 20 között lehet); a harmadik pedig az utcafronti kerítés színét leíró karakter. A szín az angol ábécé nagybetűje. Ha a kerítést már elkészítették, de nem festették be, akkor a „#” karakter, ha még nem készült el, akkor a „:” (kettőspont) karakter szerepel. Az utca hossza legfeljebb 1000 méter. Mindkét oldalon elkelt legalább 3-3 telek. Amikor vásárolunk mindig csak az utojára eladott telek rákövetkezőjét vehetjük, vagy a másik oldalon utoljára eladott rákövetkezőjét.
Példa:
0 10 P
1 8 K
1 10 :
1 9 S
0 10 P
Magyarázat: Az első telek a páros oldalon található, 10 méter széles, a kerítés kész és P színnel festették be. A harmadik telek a páratlan oldalon van szintén 10 méter, a kerítés kész, de még nincs befestve. A házszámok a következők sorban: 2,1,3,5,4
Feladatok: Olvasd be a fájl tartalmát a memóriába! Minta file-t hozz létre magadnak! Az eddig eladott telkekből készítsünk egy sorrendet, méghozzá a méretük alapján! Határozzuk meg a fájl utolsó sorában szereplő telek házszámát! Írd ki egy fájlba, a páratlan oldal utcaképét! Pl.: (1)KKKKKKKK(3)::::::::::(5)SSSSSSSSS Magyarázat: A házszám zárójelben, majd annyi a kerítést leíró jellemző, amilyen hosszú a telek.
Készítsd el a week12d03.NumberStat osztályt melyben legyen egy metódus, ami paraméterül vár egy egész számokból álló listát. Add vissza azt a számot amelyik pontosan egyszer szerepel a listában. Ha több ilyen szám van akkor a kisebbet! Ellenőrizd, hogy olyan listát fogadunk el, ami legalább 1 elemű, ha a lista nem ilyen, dobj kivételt! pl: {1,1,5,3,4,5,6,5,6,4,1,6,5,4} A megoldás: 3 Bónusz: Módosítsd az osztályt. Legyen egy egész számokból álló lista attribútuma. A fent megírt metódus ezen a listán dolgozzon. A lista elemeit fájlból töltsük fel. A file úgy néz ki, hogy egy sorban három szám van vesszővel elválasztva. Tehát:
1,1,4
2,3,5
2,2,5
Készítsünk egy osztályt AgeSorter
néven, melynek van egy int[] sortAges(int[] ages)
metódusa. Az ages
tömbben emberek életkorai szerepelnek. A feladat az, hogy visszaadjunk egy tömböt, mely az életkorokat tartalmazza sorrendbe rendezve. Ne használjunk beépített sorrendbe rendező algoritmusokat (Collections.sort
) a feladat megoldásához!
Töltsd le a példa bináris állomány a https://github.com/Training360/strukturavalto-java-public/raw/master/examples/week12d04/src/main/resources/secret.dat címről!
Ez bájtokat tartalmaz, egy szöveg van titkosítva benne. Olvasd be bájtonként, és mindegyik bájthoz adjál hozzá tízet! Ez valójában egy karakterkód, ezt alakítsd át char
típusú értékké!
Majd egymás után írd ki ezeket a konzolra! Ne használj közöttük sortörést!
A Client
osztály reprezentál egy ügyfelet name
és regNumber
attribútummal (String
). Az második a regisztrációs száma, mely egyedileg azonosít egy ügyfelet. Írj egy Clients
osztályt, mely az ügyfeleket tartja nyilván.
Regisztrációs szám alapján le kell tudni kérdezni egy ügyfelet a findByRegNumber(String)
metódussal. Dobjon IllegalArgumentException
-t, ha nincs. Fontos, hogy nagyon gyors legyen a lekérdezés a regisztrációs szám alapján!
Ezen kívül legyen benne egy List<Client> findByName(String)
metódus is, ami pedig névtöredék alapján keres! Ez lehet lassabb.
Töltsd le az index.hu nyitólapját böngészőből, ez egy html állomány! Másold be a projektedbe (index.html
) néven!
Ez egy szöveges állomány. Olvasd be, és számold meg, hány sorban szerepel a koronavírus szó!
Adott az alábbi osztály:
public class Employee {
private int age;
private int skillLevel;
private String name;
private List<String> skills;
}
Készítsetek az EmployeeFilter
osztályba egy List<Employee> countSeniorDevs(List<Employee> employees)
metódust, mely a megadott employees
-ből kiválogatja a senior (ahol a skill level nagyobb, vagy egyenlő, mint 3) fejlesztőket!
A fejlesztők rendelkeznek a programming skill-lel!
A GitHubon a examples\week13d01\src\main\resources\iranyitoszamok-varosok-2021.csv
fájl tartalmazza a magyar városok listáját.
Add vissza a leghosszabb nevű várost!
A GitHubon a examples\week13d01\src\main\resources\iranyitoszamok-varosok-2021.csv
fájl tartalmazza a magyar városok listáját.
Add vissza az ábécésorrendben első város nevét és irányítószámát!
Adott egy fájl melyben egy reptér egy napi munkáját rögzítettük. Adott egy járatszám, az, hogy érkező vagy felszálló gépről van-e szó. A kiinduló/cél város, attól függöen hogy indul vagy érkezik-e a gép és a felszállás/leszállás pontos ideje.
A fájl:
FC5354 Arrival Dublin 18:16
KH2442 Departure Berlin 15:54
ID4963 Departure Amsterdam 15:22
CX8486 Arrival Brussels 10:37
EJ9251 Departure Toronto 11:30
KJ7245 Departure Bern 6:18
JN6048 Arrival Moscow 18:39
MN5047 Arrival Athens 9:35
Az időpontok szándékosan így szereplnek, nincsenek nullák a számok előtt. Az adatok össze vissza szerepelnek a fájlban. Feladatok:
- Olvasd be a fájl tartalmát a memóriába.
- Határozd meg, hogy induló vagy érkező járatból volt-e több.
- Legyen egy metódus ami járatszám alapján ad vissza egy járatot.
- Írj egy metódust ami bekér egy várost és azt, hogy az induló vagy érkező járatokat szeretnénk-e. És egy Listába adjuk viassza az összes abba városba induló/érkező repülőt.
- Adjuk vissza a legkorábban induló repülőt! Fájl:
examples\week13d02\src\main\resources\cities.txt
Egy internetes kvíz versenyen egy fájlba rögzitettük a versenyzők válaszait. A versenyzők egyszerre kezdtek és egyszerre egy kérdésre válaszoltak meg. A fájlban az egyes versenyzők válaszai sorban szerepelnek, de a fájlban a sorok a beérkezett válaszok sorrendjében találhatók. PL.:
ABACD
AB123 A
AH2 B
BD452 A
AB123 B
GH1234 C
AB123 D
Magyarázat:A fájl első sora a helyes válaszokat tartalmazza egy sorban. (5 kérdés volt az elsőre a helyes válasz A a másodikra B stb.) Ezek után a sor első eleme egy azonosító a második pedig egy a válasz betűjele. Minden kérdésnél négy válaszlehetőség volt (A,B,C,D) és lehetett ugrani egy kérdést ekkor X szerepel a fájlban.
Tehát az AB123 azonosítóval rendelkező játékos első válasza A a második B. A többieknek csak az első kérdésre adott válaszuk szerepel a példában.
Feladatok:
- Olvasd be a fájl tartalmát a memóriába.
- Legyen egy lekérdező metódus ami paraméterül vár egy kódot és egy számot és megmondja hogy az ileltő az adott kérdésre helyesen vagy helytelenül válaszolt-e.
- Legyen egy metódus ami visszaadja annak versenyzőnek a kódját, akinek a legtöbb X szerepel a válaszai között.
- Adjuk vissza annak a versenyzőnek a kódját, aki a legtöbb pontot szerezte. Pont a helyes válaszért jár méghozzá annyi, ahányadik kérdés volt a sorban. Az első kérdés egy pontos a második kettő stb.
Bonusz: X az 0 pont, de a rossz válasz -2.
Fájl elérhető:
examples\week13d02\src\main\resources\results.txt
Adott a következő szerkezetű fájl, beosztas.txt:
Albatrosz Aladin
biologia
9.a
2
Albatrosz Aladin
osztalyfonoki
9.a
1
Csincsilla Csilla
matematika
9.b
2
A fájl tantárgyfelosztást tartalmaz. A tanttárgyfelosztást 4-es blokkokban adjuk meg. Első sor a tanár neve, majd a tantárgy, majd az osztály ahol tanítja és végül az, hogy heti hány órában. Írj egy metódust,ami paraméterül várja egy tanár nevét, és kiírja, hogy hány órája van egy héten. A fájl megtalálható a examples\week13d03\src\main\resources\beosztas.txt
Legyen egy Book
osztály, melynek van egy String author
, String title
és int numberOfPages
attribútuma.
Írj egy másik osztályban egy olyan metódust, mely visszaadja a legtöbb oldalt
író szerzőt! Figyelj arra, hogy hatékony legyen az algoritmus!
Írj egy a TemplateMerger
osztályba egy public String merge(Path file, List<Employee> employees)
metódust, ami felolvassa a fájlt, melynek tartalma:
Az alkalmazott neve: {nev}, születési éve: {ev}
Nyugodtan beolvashatod egy utasítással!
Majd a visszatérési értékként add vissza soronként az alkalmazottakat, abban a formátumban, mint ahogy a fájlban van, azaz:
Az alkalmazott neve: John Doe, születési éve: 1980
Az alkalmazott neve: Jack Doe, születési éve: 1990
(Persze ehhez kell egy Employee
osztály is a megfelelő attribútumokkal.
Írj egy sablonkezelő rendszert! Hozz létre egy TemplateEngine
nevezetű osztályt, benne egy
void merge(BufferedReader reader, Map<String, Object>, BufferedWriter writer)
metódussal. Az első paraméter a sablon, a második paraméter pedig az értékek, melyeket ki kell cserélni a sablonban.
Képzeljük el, hogy ez a sablon:
Kedves {nev}!
Megküldjük önnek a következő esedékes számláját {datum} dátummal,
melynek összege: {osszeg} Ft!
A fizetési határidő {hatarido}.
Üdvözlettel,
Ügyfélszolgálat
A metódus második paraméterként egy Map
-ben kapja az értékeket:
{"nev" = "John Doe", "datum" = LocalDate}
A feladat, hogy a writer
-be ki kell írni a levelet, de már
kicserélve az értékeket.
Írj egy metódust, amely megszámolja, hogy hány különböző betű van egy szóban. A kis és nagybetűk közötti különbség nem számít! A space-eket, számjegyeket, stb. ne vegye figyelembe! Csak az angol ábécé betűit!
Legyen egy BillItem
osztály, mely tartalmazza a name
, number
, unitPrice
attribútumokat.
Legyen egy BillWriter
osztály, melynek van egy writeBills()
metódusa.
Ennek a számlatételeket egymás alatt szövegesen vissza kell adnia.
Ennek első paramétere egy List<BillItem>
, azaz megkapja a számlatételeket.
A második paraméterét neked kell kitalálni! A lényeg, hogy bármit át tudj adni, hogy egy
számla tételt, hogy lehet kiírni. Ugyanis van, hogy egymás után kell kiírni a 3 attribútumot,
van, hogy tabokkal elválasztva, van, hogy mögé kell írni az összes árat is. Szóval változhat,
gyakorlatilag a sor kiirásának algoritmusát kell paraméterül átadni.
A visszatérési értéke egy String
.
Sem a BillItem
, sem a BillWriter
metódust nem módosíthatod, és a következő
kiírási formákat kell megvalósítanod:
3 kenyér, darabja 10 Ft
5 tej, darabja 20 Ft
Megnevezés (20 karakter) Egységár (Ft) Darab Összeg
kenyer 10 3 30
tej 20 5 100
Egységár 13 karakteren jobbra igazítva. Darab 5 karakteren jobbra igazítva. Összeg, 6 karakteren jobbra igazítva.
kenyér 3 * 10 = 30
tej 5 * 20 = 100
Készíts egy Indexer
osztályt, melynek van egy public Map<Character, List<String>> index(List<String> names)
metódusa. A feladat az, hogy egy indexet készítsünk a megadott nevek kezdőbetűiből (minden kezdőbetűt társítsunk az összes névvel, mely ezzel a betűvel kezdődik).
Példa:
System.out.println(new Indexer().index(Arrays.asList("Odon", "Lujza", "Abraham", "Magdolna")));
// {A=[Abraham], L=[Lujza], M=[Magdolna], O=[Odon]}
Irj egy Transformers
osztályt, melynek van két metódusa: public <T, R> List<R> map(List<T> list, Function<T, R> transformer)
és public <T> T reduce(List<T> list, T identity, BiFunction<T, T, T> combiner)
. A feladat az, hogy a map
metódus visszaadjon egy új listát, melyben a megadott list
elemeinek a transformer
lambdaval transzformált változata található, illetve a reduce
esetében a megadott lista combiner
lambdával kombinált értéke található. Használjuk az identity
-t kezdőértéknek! Irjunk teszteket is!
Példa:
System.out.println(new Transformers().map(Arrays.asList(1, 2, 3), (value) -> value + 1));
// [2, 3, 4]
System.out.println(new Transformers().reduce(Arrays.asList(1, 2, 3), 0, Integer::sum));
// 6
Adott egy fájl melyben online bevásárlások találhatók. A fájl a még ki nem szállított rendeléseket tartalmazza. Egy sorban egy egyedi azonosító és utána a termékek neve van felsorololva. Minden vásárlás legalább 2 termékből áll.
A233 bread,tomato,flour,sugar
A312 sugar,beer,apple,pear
B3402 meet,soda,cola,bbq_sauce
B341 pasta,passata,basil,cheese
A10 corn,hot_dog,rolls
CM231 beer,chips
C123 pepper,salt,rosmary,pizza_dough,passata,oregano
W34111 pasta,sugar,rosmary,cheese,meet,carrot,potato,tomato
K8921 wine,soda
Olvasd be a fájlt és tárold el az adatokat a memóriában, majd oldd meg a következő feladatokat.
- Egyedi azonosító alapján legyenek lekérdezhetőek a vásárolt termékek ABC sorrendben.
- Számoljuk össze, egy termék neve alapján, hogy abból a termékből mennyit adtak el.
- Adjuk vissza egy vásárlási azonosító alapján, hogy hány termék szerepel a vásárlásban.
- Készíts statisztikát melyben visszaadod, hogy az egyes termékek hányszor szerepelnek a fájlban.
A következő feladatban online bevásárlással kapcsolatos staisztikákat kell megoldani. Minden vásárlás a következőképpen épül fel. Vásárló egyedi azonosítója, a vásárlás egyedi azonosítója majd a rendelt termékek, melyek után zárójelben szerepel azok ára. Ezeket egy fájlban tároljuk. Adatok:
BK123-1211: bread(200),soda(120),carrot(320)
RA22-112: tomato(300),sugar(100),salt(100),choclate(200)
BK123-111: beer(300),chips(250),potato(300)
RA22-1145: peas(300),yoghurt(200),milk(200),chicken(1300),bread(200)
SM123-11: pork_belly(1200),ketchup(800),corn(250),alufoil(300)
GT23-011: bread(200),tomato(300),salt(100)
RA22-01112: salami(300),sour_cream(250)
SM123-120: dogfood(900),potato(300),tomato(200),chicken(1300),fish(3000),tuna(1200),pasta(200)
BK123-567: corn(200),jam(800),Nutella(1200),cereal(1200)
A fájlban egy vásárlóhoz több rendelés is tartozhat. Olvasd be és tárold el a memóriában az adatokat. Fontos, hogy a webáruház ismerje a vásárlóit a vásárlók pedig ismerjék összes vásárlásukat. A fájlban a vásárlások időrendi sorrendben szerepelnek egyénenként. Tehát mindig a legújabb vásárlás van legelöl a listában. Oldd meg az alábbi feladatokat:
- Készíts egy metódust, ami visszaadja vásárlási azonosító alapján az adott vásárlás összértékét.
- Készíts egy metódust, ami egy vásárló alapján visszaadja, hogy az adott vásárló mennyit pénzt költött eddig összesen a webáruházban.
- Készíts egy metódus, ami a vásárlónak ABC sorrendbe rendezi egy vásárláson belül a termékeket, vásárlás azonosító alapján. (Bónusz: megoldhatod úgy, hogy vagy név vagy ár alapján rendezze annak megfelelően, hogy hogyan hívjuk a metódust.) Fontos, hogy ne rendezzük át az eredeti listát egy másolatot rendezzünk és azt adjuk vissza.
- Készíts egy metódust, ami visszaadja, adott termék neve alapján, hogy összesen hányat rendeletek belőle a fájl alapján.
- Készíts statisztikát a rendelt termékekből. Tárold el a termékeket és azt, hogy összesen hány darabot rendeltek belőle.
Készíts egy diák (Student
) osztályt melyben egy diák jegyeit tárolod egy Map-ben. A map kulcsa a tantárgy, értéke pedig az adott tantárgy jegyeinek listája. Ezen felül a diáknak legyen neve, melyet konstruktorban kap meg. Legyen benne egy metódus, ami paraméterül vár egy tantárgyat és egy jegyet, és beírja a jegyet a megfelelő tantárgyhoz. Készítsd el a ClassNotebook
nevű osztályt melyben diákok listája található. Készíts egy lekérdező metódust a ClassNoteBook
osztályban, legyen a neve sortNotebook
mely a diákok listáját ABC sorrendben adja vissza.
Adott egy User
osztály:
public class User {
private String name;
private String age;
private String address;
}
és egy UserFilter
interfész:
@FunctionalInterface
public interface UserFilter {
List<User> filter(List<User> users);
}
Készíts hozzá egy UserFilters
osztályt, mely filter objektumokat képes gyártani az alábbi módon lambdak felhasznalasaval:
public class UserFilters {
public UserFilter createFilter(List<Predicate<User>> predicates) {
// TODO
}
}
Példa:
public class Main {
public static void main(String[] args) {
final UserFilter filter = new UserFilters().createFilter(Arrays.asList(
(user) -> user.getAge() > 18,
(user) -> user.getName().startsWith("A")
));
System.out.println(filter.filter(new ArrayList<>(Arrays.asList(
new User("Marton", 16, "Racz Aladar utca 99/b"),
new User("Attila", 19, "Kazmer utca 4")
))));
}
}
Legyen egy szerződés (Contract
) osztály, melynek van egy String client
és egy List<Integer> monthlyPrices
attribútuma.
Az előbbi a szerződő neve, a második pedig a havonta fizetendő összeg.
Legyen egy ContractCreator
osztály, melynek van egy ContractCreator(String client, List<Integer> monthlyPrices)
konstruktora,
mely létrehoz egy szerződéssablont, a paraméterként
megadott adatokkal, melyet összesen EGY Contract template
attribútumban tárolj!
Majd írj egy Contract create(String name)
metódust, mely a sablon alapján létrehoz egy
új szerződést, de a nevet kicseréli a paraméterként megadott névre!
Próbáld ki, hogy a visszaadott szerződésben módosítod a 12. havi értéket! Ha létrehozol egy új szerződést a sablon alapján, akkor a 12 havi érték az eredeti sablon alapján van kitöltve?
Írd meg a következő metódust stream használatával!
public class EmployeeTransformOperations {
public List<Employee> transformToUppercased(List<Employee> employees) {
return ????;
}
}
A metódus visszaad egy listát, amiben az alkalmazottak neve nagybetűsítve van. Azonban a paraméterként átadott lista ne módosuljon!
A examples/week14d05/hachiko.srt
van a Hachiko film felirata. Írj egy
countWords()
metódust, mely paraméterül várja a fájlt, varargsban
szavakat. Megszámolja, hogy melyik szó hány sorban szerepel a
szövegben. Legyenek mondjuk a beadott szavak: "Hachiko", "haza",
"pályaudvar", "jó"
A examples/week14d05/hachiko.srt
van a Hachiko film felirata. Csak streamek
használatával számold ki, hogy hányszor hangzik el a kutya neve a filmben!
Segítség: a Files.lines()
adja vissza a fájl sorait streamben.
Adott egy függvénygrafikon a koordináta rendszerben. A grafikon néhány pontját megkapjuk egy Map-ben. A map kulcsa az x koordináta értéke pedig az y koordináta. Döntsük el, hogy a kapott pontok küzül, hol van a függvénynek maximum helye és ott mennyi az értéke.
Egy befektető cég szeretné megnézni, hogy az elmúlt időszakban mikor lett volna érdemes venni, illetve eladni Bitcoint. Készíts egy metódust, ami paraméterül várja a Bitcoin, valahány napi árfolyamát időrendi sorrendben egy listában, dollárban. (Egész számok listája) A metódus visszatérési értéke két szám legyen, az első hogy hányadik napon lett volna érdemes venni, a második pedig, hogy melyik napon lett volna érdemes eladni. Mindezt úgy, hogy a legnagyobb nyereségünk legyen.
Adott egy vetélkedő kérdésbankja egy fájlban.(examples/week15d02/kerdesek.txt
) A fájlban az egy kérdéshez tartozó adatok két sorban helyezkednek el. Első sorban a kérdés, a második sorban a válasz a pontszám és a téma, szóközzel elválasztava. Olvasd be a fájl tartalmát a memóriába, majd oldjátok meg a lenti feladatokat.
Mikor volt a mohacsi vesz?
1526 1 tortenelem
Melyik evben bomlott fel a Nyugat-Romai Birodalom?
476 1 tortenelem
Melyik a legkisebb primszam?
2 1 matematika
Mennyi 64 kobgyoke?
4 2 matematika
Hany atloja van a szabalyos nyolcszognek?
24 2 matematika
Melyik evben kezdodott a Honfoglalas?
895 1 tortenelem
Mikor adtak ki az Aranybullat?
1222 1 tortenelem
Melyik evben adtak ki Angliaban a Magna Chartat?
1215 3 tortenelem
- Írj egy metódust, melynek paramétere a téma és add vissza, az összes kérdést abban a témában. (Csak a kérdéseket)
- Írj egy metódust, ami random sorsol ki egy kérdést, és adja vissza annak összes adatát.
- Készíts egy metódust ami rendszerezi a kérdéseket témakörönként. Visszatér egy adatszerkezetben amelyben témánként megtalálható az összes kérdés, összes adata.
- Az előző feladat segítségével határozd meg, hogy melyik téma kérdései érik a legtöbb pontot (összpontszám)!
Adott egy fájl(examples/week15d02/orders.txt
) melyben pizza rendeléseket tárolunk. A fájl blokkokra van osztva, egy blokk egy napot jelöl, és minden ilyen blokk egy dátummal kezdődik. Ezután egy rendelés adatai két sorban találhatók. Az első sor a futár azonosítója, a második sorban irányítószám, utcanév, házszám és a szállítás pontos ideje található.
2020.12.01
FUT_1
1113 Petőfi 12 12:30
FUT_2
1114 Kossuth 9 11:20
FUT_2
1211 Jókai 10 19:30
FUT_3
1191 Kossuth 9 18:12
FUT_1
1144 Tököly 11 16:33
2020.12.02
FUT_1
1123 Ady 12 12:30
....
A fájl beolvasása után oldjátok meg a következő feladatokat!
- Melyik napon volt a legkevesebb rendelés?
- Egy metódus várjon paraméterül egy dátumot, pontos időponttal és adjuk vissza a hozzá tartozó rendelést. Ha nincs ilyen akkor dobjunk kivételt. (Vagy Optional)
- Készíts statisztikát a futárok szállításiból, futáronként add vissza, hogy mennyi rendelést teljesítettek.
- Melyik címre szállították a legtöbb pizzát?
Adott az alábbi osztály:
public class Post {
private String title;
private LocalDate publishedAt;
private String content;
private String owner;
}
Implementáljunk a PostFinder
osztályban egy public List<Post> findPostsFor(String user)
metódust az alábbi módon:
- Csak olyan
Post
-ot adjunk vissza, amelynek azowner
-e megegyezik a megadottuser
-rel - A
Post
publishedAt
dátuma korábbi kell, hogy legyen, mint aLocalDate.now()
- A
content
és atitle
nem lehet üres
Tároljunk egy List<Post>
objektumot a PostFinder
osztályban, melyet konstruktor paraméterként kap meg és ezt használjuk!
Adott az alábbi osztály:
public class Post {
private String title;
private LocalDate publishedAt;
private LocalDate deletedAt;
private String content;
private String owner;
}
Implementáljunk a PostFinder
osztályban egy public List<Post> findPosts(String user)
metódust az alábbi módon:
- A
Post
publishedAt
dátuma korábbi kell, hogy legyen, mint aLocalDate.now()
- Ha a
Post
publishedAt
dátuma későbbi, mint aLocalDate.now()
, akkor csak azokat aPost
-okat adjuk vissza, melyekowner
-e megegyezik a megadottuser
-rel. - A
content
és atitle
nem lehet üres - A
deletedAt
értékenull
kell, hogy legyen, vagy későbbi, mint aLocalDate.now()
. - Használjunk stream-eket az implementációhoz!
Tároljunk egy List<Post>
objektumot a PostFinder
osztályban, melyet konstruktor paraméterként kap meg és ezt használjuk!
Letölthetőek a koronavírus adatok innen: https://opendata.ecdc.europa.eu/covid19/casedistribution/csv/data.csv Melyik három héten volt Magyarországon a legtöbb esetszám?
Számoljuk össze, hogy egy fájlban hány mássalhangzó, hány magánhangzó és hány egyéb karakter van. A space-eket ne vegyük figyelembe! A kis- és nagybetű különbség nem számít!
Adott egy fájl a következő címen: https://raw.githubusercontent.com/TheMLGuy/Game-of-Thrones-Dataset/master/battles.csv Melyik ház vett részt a legtöbb csatában?
Letölthetőek a COVID adatok a https://opendata.ecdc.europa.eu/covid19/casedistribution/csv/data.csv címről. Összegezd országonként az esetszámokat, és add vissza azt a három országot, ahol az összes esetszám populációra arányosítva a legnagyobb.
Írj egy VowelFilter.filterVowels(BufferedReader reader)
metódust, mely beolvas egy
fájlt soronként, kiszűri belőle a magánhangzókat, és visszaadja egy String-ként.
Tehát a bemeneti fájl tartalma:
Aprócska
Kalapocska
Benne
Csacska
Macska
Mocska
Kimenet Stringként:
prcsk
Klpcsk
Bnn
Cscsk
Mcsk
Mcsk
Írj egy olyan CanoeRental
osztályt, amely String name, CanoeType canoeType, LocalDateTime startTime, LocalDateTime endTime
attribútumokban tárolja egy kenu kölcsönzés
kölcsönzési adatait.
A CanoeType
egy enum, mely értékei: RED
, GREEN
és BLUE
.
Publikus metódusok:
public CanoeRental(String name, CanoeType canoeType, LocalDateTime startTime)
public void setEndTime(LocalDateTime endTime)
public double calculateRentalSum()
Minden kölcsönzés aktív, amíg vissza nem hozták a kenut, azaz ki nem töltötték
az endTime
értékét.
Írj egy CanoeOffice
osztályt, mely tárolja, hogy milyen kölcsönzések történtek (List<CanoeRental>
).
A következő metódusokat implementáld:
addRental(CanoeRental)
- hozzáad egy kölcsönzéstfindRentalByName(String name)
- megkeres egy AKTÍV kölcsönzést név alapjáncloseRentalByName(String name, LocalDateTime endTime)
- megkeres egy AKTÍV kölcsönzést név alapján, beállítja azendTime
értékétdouble getRentalPriceByName(String name, LocalDateTime endTime)
- kikeresi az AKTÍV kölcsönzést név alapján, és kiszámolja, hogy a megadott kölcsönzés mennyibe kerülne. A számolás úgy történik, hogy óránként 5000 Ft-ot a szín alapján megszoroz egy értékkel, piros, zöld és kék esetén rendre 1, 1,2 és 1,5 értékkel. Minden megkezdett óra számít.List<CanoeRental> listClosedRentals()
- Add vissza a lezárt kölcsönzéseket astartTime
alapján sorbarendezve!Map<CanoeType, Integer> countRentals()
- Számold meg, hány kölcsönzés volt színenként!
Két dátum között eltelt órák számát a következőképp lehet kiszámítani:
Duration.between(beginDate, endDate).toHours()