ITI0011:harjutus 07
Üldine
Ülesande tähtaeg: 7. - 8. märts
Kaust git'is: EX07
git'i lisage kaks faili: EX07.java ja Friend.java
Lisalugemist
- Java:Objektid - Klassid, objektid.
- Java:Kogumid - Loendi (list) kasutamine.
Ülesanne
Madisel on väga palju sõpru.
Väga väga palju.
Selleks, et kõikide nimed meelde jätta, on Madis need kenasti failidesse kirja pannud. Nüüd tahaks Madis leida oma sõpru üles perekonnanimede järgi. Kuna Madis on kuulnud, et olete kõva progeja, siis palkab ta teid (pai eest(noa ähvardusel)) tegema talle programmi, mis loeks sisse sõbrad ja võimaldaks otsida perekonnanimede järgi.
Luua klass Friend
. Kõik selle klassi väljad peavad olema teiste klasside eest peidetud. Väljadele ligipääsuks on vaja luua get
ja set
meetodid.
Klassil Friend
peab olema vähemalt neid meetodeid:
String getLastName()
tagastab perekonnanime,String getFullName()
tagastab eesnimedest ja perekonnanimest moodustatud stringi (täisnime), eesnimed peavad olema samas järjekorras mis lähtefailis, neile järgneb perenimi (kõik tühikutega eraldatud).List<String> getNames()
tagastab List tüüpi järjendi eesnimedest.void setLastName(String lastname)
- määratakse sõbra perenimi.void setNames(List<String> names)
- määratakse sõbra eesnimed.Friend()
(ehk tühi konstruktor). Kui soovite, võite mugavamaks andmete sisestamiseks luua kõrvale ka oma konstruktori, mis võtab ette mõned argumendid. Kui te ühtegi konstruktorit ei lisa, siis ei pea eraldi tühja konstruktorit looma.
Klassi EX07
staatiline meetod Friend findFriendByLastName(String lastName)
tagastab viite sõbrale, kelle perenimi on lastName
. Kui sõpra ei leidu, tagastada null
.
Klassi EX07
meetod List<Friend> readFriendsFromFile(String fileName)
loeb sisse argumendiga ette antud nimega failist loendi Madise sõpradest. Failis on sõbrad esitatud ridadena, st igal real on üks sõber ning sõbra nimed on lahutatud üksteisest tühikutega, viimane nimi on perenimi. Meetod peaks muutma failis olevad sõbrad Friend
klassi objektideks. Fail sisaldab vaid tähti (kaasa arvatud õ, ä jms) ja tühikuid ja reavahetusi (muid sümboleid pole).
Näidisfail example.txt:
Ain Ain Baul Punn Deiv Phentagon Kaera Jaan Rukis Drop Table User Tamm
Mall:
<source lang="java"> public class EX07 {
public static List<Friend> friends; public static void main(String[] args) { friends = readFriendsFromFile("EX07/example.txt"); System.out.println(findFriendByLastName("Ain").getFullName()); // Ain Ain System.out.println(findFriendByLastName("Punn").getFullName()); // Baul Punn System.out.println(findFriendByLastName("Rukis").getFullName()); // Kaera Jaan Rukis System.out.println(findFriendByLastName("Tamm").getNames()); //[Drop, Table, User] System.out.println(findFriendByLastName("Kaera")); //null }
public static List<Friend> readFriendsFromFile(String inputFilename) { return friends; } public static Friend findFriendByLastName(String lastName) { return null; }
</source>
Boonusülesanne
Tuleb välja, et osades failides on formaat läinud paigast ära. Mõne nime vahel on rohkem kui üks tühik.
Juhul kui sõprade hulgas on mitu sama perekonnanimega inimest (näiteks: Bilbo Baggins ja Frodo Baggins), tagastab meetod vaid Bilbo Bagginsi täisnime, ehk, tähestikus eespool oleva nime. Kusjuures järjestuse kontrollimine ei tohi olla tõstutundlik (ehk siis peab olema case-insensitive, paul ja Paul on samaväärsed).
Näidissisend:
Mati Kaal mat Kaal
<source lang="java"> System.out.println(findFriendByLastName("Kaal").getFullName()); // mat Kaal </source>