PPT

pr1j_06_textove_udajove_typy_a_riadiace_struktury.ppt

Formát
PPT
Veľkosť
225 kB
Pridané
Stiahnutí
745
Hodnotenie
2,0/5
Stiahnuť PPT · 225 kB

Preber si túto poznámku so svojou AI

Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto poznámky.

Otvoriť AI: ChatGPT · Claude · Gemini

Náhľad poznámky

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';

char uniZnak = '\u039A';
// veľké grécke písmeno omega
// v kódovaní Unicode

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';

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)

– je veľ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

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);
}

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.

Príklad escape sekvencie

Vypíšte text: Povedala mi: “Vypadni!“.

System.out.println

("Povedala mi: \"Vypadni!\".");

Textové reťazce

 sú pri programovaní často používané
 sú sekvenciami znakov
 v programovacom jazyku Java sú reťazce objekty a 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.

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.

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 „+“:

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);

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.

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);

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);

Ď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;

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);

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);

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.

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());

Operácie triedy StringBuffer

v triede String nie 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

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, int end)

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“

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

Viacnásobné vetvenie - štruktúra

switch (premenná) {

case 1:

prikaz1;
prikaz2;
break;

case 2:

prikaz1;
prikaz2;
break;...

default:

prikaz1;
prikaz2;
break;...

}

 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 - 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.");

}

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 switch blokom

 bez príkazov break by vykonávanie programu

pokračovalo postupne cez jednotlivé podsekvencie
príkazov case

Break - vynechať

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;

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);

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

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

Break

má dve podoby:

– bez návestia (v prípade switch, na ukončenie

cyklu)

– s návestím

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.

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.

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

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.

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.

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.");

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

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;)

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);

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 „\“.

Document Outline


Automaticky vygenerovaný textový náhľad. Pre plné formátovanie si stiahnite súbor.