1 / 39

Textové údajové typy a riadiace štruktúry

Textové údajové typy a riadiace štruktúry. textové údajové typy trieda String trieda StringBuffer viacnásobné vetvenie – case prerušenie behu riadiacej štruktúry. Znaky. ak chceme pri programovaní použiť znak, použijeme jednoduchý údajový typ char: char znak = 'a';

fineen
Download Presentation

Textové údajové typy a riadiace štruktúry

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Textové údajové typy a riadiace štruktúry • textové údajové typy • trieda String • trieda StringBuffer • viacnásobné vetvenie – case • prerušenie behu riadiacej štruktúry

  2. Znaky • ak chceme pri programovaní použiť znak, použijeme jednoduchý údajový typ char: char znak = 'a'; char uniZnak = '\u039A'; // veľké grécke písmeno omega // v kódovaní Unicode

  3. Znak ako objekt • existujú však i prípady, keď sa potrebujeme k znaku správať inak • napr. argument funkcie, ktorú chceme použiť vyžaduje nie char, ale objekt a má aj niekoľko zaujímavých metód • objekt vytvárame prostredníctvom konštruktora Character ch = new Character('a'); • alebo necháme konverziu na kompilátor: Character ch ='a';

  4. Užitočné metódy pre char • isLetter(char ch)– je písmeno • isDigit(char ch)– je číslica • isWhiteSpace(char ch)– je medzera • isUpperCase(char ch)– jeveľké písmeno • isLowerCase(char ch)– je malé písmeno • toUpperCase(char ch)– zmeň na veľké písmeno • toLowerCase(char ch)– zmeň na malé písmeno • toString(char ch)– zmeň na objekt String

  5. Príklad Character • Napíšte program, ktorý zadaný reťazec vypíše tak, že v reťazci zmení malé písmená na veľké, veľké na malé a namiesto číslice vloží bodku. char ch; String ret; ret = JOptionPane.showInputDialog("text:"); for(int i=0;i<ret.length();i++) { ch = ret.charAt(i); if (Character.isLowerCase(ch)) { ch = Character.toUpperCase(ch); } else { if (Character.isUpperCase(ch)) { ch = Character.toLowerCase(ch); } else { if (Character.isDigit(ch)) ch = '.'; }} System.out.print(ch); }

  6. Escape sekvencie • \t – vloží do textu tabulátor. • \b – vloží do textu backspace. • \n – vloží do textu nový riadok. • \r – vloží do textu znak pre návrat vozíka. • \f – vloží do textu vertikálny tabulátor. • \' – vloží do textu apostrof. • \" – vloží do textu úvodzovky. • \\ – vloží do textu spätné lomítko.

  7. Príklad escape sekvencie • Vypíšte text: Povedala mi: “Vypadni!“. • System.out.println ("Povedala mi:\"Vypadni!\".");

  8. Textové reťazce • sú pri programovaní často používané • sú sekvenciami znakov • v programovacom jazyku Java sú reťazce objektya reprezentuje ich trieda String • najrýchlejší spôsob na vytvorenie reťazca už poznáme: String pozdrav = "Ahoj svet!"; • "Ahoj svet!"je textový literál — zoskupenie znakov uzatvorené do úvodzoviek • vždy, keď do kódu napíšeme takýto textový literál, kompilátor vytvorí objekt typu String s príslušnou hodnotou.

  9. Textové reťazce • trieda String je nemenná, • akonáhle je vytvorený objekt triedy String, nemôže byť zmenený • trieda String má niekoľko metód, ktoré môžu reťazec meniť, ale vzhľadom na to, že reťazce sú nemenné, tieto metódy v skutočnosti vytvoria nový reťazec s výsledkom zadanej operácie a vrátia ho namiesto pôvodného.

  10. Spájanie reťazcov • retazec1.concat(retazec2); • táto metóda vráti nový reťazec, ktorý vznikne tak, že na koniec prvého reťazca je pripojený druhý reťazec. • Metódu concat() tiež môžeme použiť s textovým literálom, takto: "Moje meno je ".concat("HruškoMrkvová"); • namiesto concat()sa používa aj „+“:

  11. Spájanie reťazcov – príklad • Pre zadané meno a priezvisko vložte do premennej spolu celé meno a vypíšte ho. String meno, priezvisko, spolu="pa"; meno = JOptionPane.showInputDialog("meno"); priezvisko = JOptionPane.showInputDialog("pr."); spolu = meno +" "+ priezvisko; System.out.print(spolu);

  12. String • Trieda String má množstvo metód na: • skúmanie obsahu reťazcov, • hľadanie znakov alebo častí reťazcov v iných reťazcoch, • zmenu veľkosti písmen a pod.

  13. Znaky v reťazci • získanie znaku na zadanej pozícii už poznáme: String Palindrom = "Kobyla má malý bok."; char znak = Palindrom.charAt(8);

  14. Substring • má dve verzie: String substring(int beginIndex, int endIndex) • vracia reťazec, ktorý je časťou pôvodného reťazca. Prvý argument určuje index prvého znaku, druhý je index posledného znaku + 1. String substring(int beginIndex) • vracia reťazec, ktorý je časťou pôvodného reťazca. Argument určuje index prvého znaku. Koncový znak je totožný s koncovým znakom pôvodného reťazca. String iPalindrom = "Kobyla má malý bok."; String cast = iPalindrom.substring(10, 14);

  15. Ďalšie metódy • trim()– vracia kópiu reťazca, z ktorého odstráni medzeru z konca a začiatka. • toLowerCase()– vracia kópiu reťazca konvertovaného na malé písmená. Ak konverzia nie je potrebná, metóda vráti pôvodný reťazec. • toUpperCase()– vracia kópiu reťazca konvertovaného na veľké písmená. Ak konverzia nie je potrebná, metóda vráti pôvodný reťazec. • Napr. spolu = meno.toLowerCase() +" "+ priezvisko;

  16. Vyhľadávanie reťazcov • indexOf(String str) lastIndexOf(String str) • vracia index prvého (posledného) výskytu zadanej časti reťazca • indexOf(String str, int fromIndex) lastIndexOf(String str, int fromIndex) • vracia index prvého (posledného) výskytu zadanej časti reťazca, za (pred) zadanou pozíciou (fromIndex). • Napr.: String text="mama ma Emu"; int prva = text.indexOf("ma"); int posledna = text.lastIndexOf("ma"); System.out.print(prva + "." + posledna);

  17. Porovnávanie reťazcov • compareTo(String anotherString) • compareToIgnoreCase(String anotherString) • porovná dva reťazce lexikograficky. • vracia celočíselnú hodnotu indikujúcu či je reťazec: • väčší (výsledok je > 0), • zhodný (výsledok je = 0), • menší (výsledok < 0)ako anotherstring. • napr. výsledkom príkladu je záporná hodnota: String meno1="mama", meno2="tata" ; int i = meno1.compareTo(meno2); System.out.print(i);

  18. Trieda StringBuilder, StringBuffer • operáciu „sčítavania“ stringov sme použili, avšak jej použitie bolo nehospodárne • trieda StringBuffer zodpovedá triede String s tým, že obsah jej objektov môže byť menený • Na rozdiel od reťazcov má každá inštancia triedy StringBuffer aj kapacitu, predstavujúcu počet alokovateľných miest pre znaky. • Kapacita, ktorú vráti metóda capacity(), je vždy väčšia alebo rovná dĺžke (zvyčajne je väčšia), a ak je to potrebné, automaticky sa rozširuje, aby v objekte bolo možné nahromadiť spojenia.

  19. Príklad // vytvorí prázdny buffer s kapacitou 16 prvkov StringBuffer sb = new StringBuffer(); // pridá 9 znakov reťazca na začiatok sb.append("Zdravíčko"); System.out.println(sb); System.out.println(sb.capacity());

  20. Operácie triedy StringBuffer • v triede Stringnie sú dostupné • sú preťažené, takže akceptujú dáta rôznych typov – každá metóda konvertuje svoj argument na reťazec, a potom pripojí alebo vloží znaky toho reťazca do sekvencie znakov StringBuffera • append() – pridá znaky na koniec jestvujúcej sekvencie znakov • insert()–vkladacia metóda pridá znaky na určené miesto

  21. Operácie triedy StringBuffer • insert(int offset, String s) • vloží druhý argument do stavbára reťazcov. Prvý celočíselný argument určuje pozíciu, pred ktorú majú byť dáta vložené. Dáta sa pred vložením skonvertujú na reťazec. • delete(int start, intend) • maže z reťazca znak od pozície start po end-1 • Napr. StringBuffer sb = new StringBuffer(); sb.append("Zdravíčko"); sb.delete(5,9); sb.insert(0,"Na "); System.out.print(sb); // vráti „Na Zdrav“

  22. Viacnásobné vetvenie • vetvenie zabezpečuje štruktúra if • k dispozícii má jednu (if) až dve vetvy (else) • existuje štruktúra, ktorá umožňuje viacnásobné vetvenie • načo? – napr. matematické operácie sú až 4 a rozpisovanie do 4 podmienok zneprehľadňuje kód

  23. Viacnásobné vetvenie - štruktúra • Každý príkaz obsiahnutý v switch bloku môže byť označený jedným alebo viacerými návestiami case (prípad) alebo návestím default (predvolený prípad). Príkaz switch vyhodnotí výraz a vykoná príkazy s prislúchajúcim návestím case. switch (premenná) { case 1: prikaz1; prikaz2; break; case 2: prikaz1; prikaz2; break;... default: prikaz1; prikaz2; break;... }

  24. Switch - príklad int body = 90; switch(body){ case 100: System.out.println( "Excellent!" ); break; case 90: System.out.println("Good job!" ); break; case 80: System.out.println("Study harder!" ); break; default: System.out.println("Sorry, looser."); }

  25. Ako pracuje switch • switch kontroluje hodnotu premennej a porovnáva ju s hodnotami uvedenými za case • dôležitý je tiež príkaz break, ktorý sa nachádza za každým návestím case a zabezpečí, aby vykonávanie príkazov pokračovalo až prvým príkazom za switchblokom • bez príkazovbreakby vykonávanie programu pokračovalo postupne cez jednotlivé podsekvencie príkazov case

  26. Break - vynechať case 4: case 6: case 9: case 11: pocetDni = 30; break; case 2: pocetDni = 28; break; default: System.out.println("Zlý mesiac."); break; } System.out.println("Počet dní = " + pocetDni); int mesiac = 2; int pocetDni = 0; switch (mesiac) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: pocetDni = 31; break;

  27. Diskusia k príkladu • posledný príkaz break nie je potrebný, pretože program aj tak dôjde na koniec príkazu switch • napriek tomu, odporúčame príkaz break použiť, vyhnete sa tak chybe, ktorá môže vzniknúť následnou úpravou kódu • návestie default zahrňuje všetky hodnoty, ktoré nie sú explicitne zahrnuté v návestiach case

  28. Diskusia ku switchu • či použiť príkaz if-then-else alebo príkaz switch je na uvážení programátora. • môže sa rozhodnúť na základe lepšej čitateľnosti kódu a iných faktorov • pre príkaz if-then-else sa môže rozhodnúť, ak ide o rozsah hodnôt alebo viacero podmienok • pre príkaz switch sa môže rozhodnúť, iba ak ide o celé čísla alebo vymenované hodnoty

  29. Break • má dve podoby: • bez návestia (v prípade switch, na ukončenie cyklu) • s návestím

  30. Break a for char hladane = 'a'; String txt="Mama ma Emu"; boolean najdene = false; int i; for (i = 0; i < txt.length(); i++) { if (txt.charAt(i) == hladane) { najdene = true; break; } } if (najdene) {System.out.println(“Je na pozícii "+i); } else {System.out.println("nenachádza sa");} • Príkaz break preruší opakovanie for v prípade, keď je hodnota nájdená. Spracovávanie programu sa presunie za cyklus na príkaz výpisu na konci programu.

  31. Break s návestím • Príkaz break bez návestia preruší vykonávanie vo vnútri príkazov switch, for, while, or do-while, ale príkaz break s návestím preruší i vonkajšie príkazy.

  32. Príklad – zatiaľ celkom nechápeme ... search: for (i = 0; i < poleCisel.length; i++) { for (j = 0; j < poleCisel[i].length; j++) { if (poleCisel[i][j] == hladane) { najdene = true; break search; } } } if (najdene) {System.out.println(“Je na pozícii "+i); } else {System.out.println("nenachádza sa");} • príkaz break preruší označený príkaz. Nepresúva riadenie programu k označeniu, ale na najbližší príkaz, ktorý nasleduje za označeným (prerušeným) príkazom. • návestie musí byť pred cyklom, medzi návestím a cyklom nesmie byť žiaden príkaz

  33. Príkaz continue • Príkaz continue (pokračuj) preskočí aktuálny prechod opakovania v príkazoch for, while , or do-while. • Forma bez návestia preskočí na koniec tela najvnútornejšieho opakovania a vyhodnotí výraz zabezpečujúci pokračovanie alebo ukončenie cyklu.

  34. Príkaz continue • postupuje cez String, spočítava písmená "p„ • ak aktuálny znak nie je "p", príkaz continue preskočí zvyšok príkazov v cykle a zameria sa na dalšie písmeno • ak je to ale "p", program zvýši hodnotu vyjadrujúcu počet ich výskytov.

  35. Príkaz continue String prehladat = "pukance popukali na panvici"; int max = prehladat.length(); int pocetPcok = 0; for (int i = 0; i < max; i++) { // zaujímam sa iba o p-čka if (prehladat.charAt(i) != 'p') continue; // skocim na koniec/zaciatok // ak som neodskocil zvýšim počet p-čok pocetPcok++; } System.out.println("Našiel som " + pocetPcok+" p-čok.");

  36. Príkaz continue s návestím outerLoop: for( int i=0; i<5; i++ ){ for( int j=0; j<5; j++ ){ System.out.println(j); //message1 if( j == 2 ) continue outerLoop; } System.out.println(i); //message2 } • keď j nadobudne hodnotu 2 ukončí cyklus a skočí na cyklus bežiaci pod definovaným návestím – t.j. na i, kde v ňom pokračuje

  37. Príkaz return • Príkaz return odíde z aktuálnej metódy a spracovanie programu sa vráti tam, odkiaľ bola metóda vyvolaná. má dve formy: • jednu, ktorá vracia hodnotu • jednu, ktorá ju nevracia. • aby bola vrátená hodnota, stačí napísať hodnotu (výraz) za kľúčové slovo return (return ++pocet;) • dátový typ vrátenej hodnoty musí súhlasiť s typom, ktorý je pre danú metódu deklarovaný. • Ak je metóda deklarovaná ako void, použite formu return bez návratovej hodnoty (return;)

  38. Príkaz return • v prípade pokusu delenia nulou aplikácia bez výstrahy končí int a=10, b=0; if (b == 0) return; else System.out.print(a/b);

  39. Príklady • Napíšte program, ktorý v reťazci zmení malé písmená na veľké, veľké na malé a namiesto číslice vloží bodku. • Zistite či zadané priezvisko je mužské alebo ženské. Predpokladajte, že všetky ženské priezviská končia na „ová“. • Napíšte program, ktorý ore zadanú číselnú hodnotu slovne vypíše mesiac, ktorý jej zodpovedá. • Riešte matematický výraz zadaný prostredníctvom dvoch čísel a operácií medzi nimi. Využite štruktúru switch, informácie zadávajte postupne (t.j. najprv prvé číslo, potom operácia a následne druhé číslo. • Riešte predchádzajúcu úlohu tak, že na vstupe zadáte celý reťazec naraz (napr. 43+8). • „Rozoberte“ zadané číslo na cifry a poskladajte z nich čo najväčšie číslo. • Zistite, ktorá cifra sa v zadanom čísle vyskytuje najčastejšie a ktorá najmenej ráz (ale viac ako 0). • Zistite, ktoré cifry sa v zadanom čísle nevyskytujú vôbec. • Pre zadanú cestu na pevnom disku vypíšte pod seba zoznam adresárov, ktoré sa v nej nachádzajú. Predpokladajte, že adresáre sú oddelené znakom „\“.

More Related