[ miljan9602 @ 16.11.2013. 21:58 ] @
Pozdrav, radim tu neki primer iz knjige sto sam kupio i dosao sam do koda gde se kombinuju switch i while.

Code:

//Upotreba petlje do-while za obradu izbora iz menija
public class Meni 
{
    public static void main(String args[])
    throws java.io.IOException
    {
        char izbor;
        
        do
        {
            System.out.println("Pomoc za:");
            System.out.println("    1. if");
            System.out.println("    2. switch");
            System.out.println("    3. while");
            System.out.println("    4. do-while");
            System.out.println("    5. for \n");
            System.out.println("Izaberite samo jedno:");
            izbor=(char) System.in.read();
        }
        while(izbor < '1' || izbor > '5');
        
        System.out.println("\n");
        
        switch(izbor)
        {
        case '1':
            System.out.println("Naredba if:\n");
            System.out.println("if(uslov) naredba;");
            System.out.println("else naredba;");
            break;
        case '2':
            System.out.println("Naredba switch:\n");
            System.out.println("switch(izraz) {");
            System.out.println("   case konstanta:");
            System.out.println("   niz naredbi");
            System.out.println("  break;");
            System.out.println("  //  ...");
            System.out.println("}");
            break;
        case '3':
            System.out.println("Naredba while:/n");
            System.out.println("while(uslov) naredba;");
            break;
        case '4':
            System.out.println("Naredba do-while:\n");
            System.out.println("do {");
            System.out.println("  naredba");
            System.out.println("} while(uslov);");
            break;
        case '5':
            System.out.println("Naredba for:\n");
            System.out.println("for(inicijalizacija; uslov; iteracija)");
            System.out.println(" naredba;");
            break;
            
        }
    }

}

Jasno mi je sta kod radi i zasta sluze while i switch, ali mi nije jasan ovaj deo.

"izbor=(char) System.in.read();" znam da je ovo System.in.read(); trazi unos od korisnika, pre jave sam radio u C++ i tamo smo koristili za unos cin << x; // primer
definisali smo promenljivu izbor i ona je tipa char ali zasto smo morali da dodamo i ovo (char) ? Posto sam tek stigao do 5 poglavlja a sa unosom podataka cu raditi tek u
12 poglavlju ovo mi je prvi put da sam koristio tu opciju pa samo malo da mi pojasnite.

izbor=(char) System.in.read(); // Ovde promenljivoj izbor dodajemo unos korisnika ? kao sto bi u C++ bilo cin << izbor; tako je ovde ?
I zasto smo morali da koristimo u while i switchu ' ' na primer '1' '5' zasto jednostavno nije moglo bez toga ? zato sto je char promenljiva znakovnog tipa ?
Probao sam da promenim promenljivu u tip int ali onda kada unesem broj izmedju 1 i 5 on me opet vraca u while ne pusta me iz nje, mozda je ovo malo glupo pitanje za vas iskusnije ali ne znam kome da se obratim, hvala unapred !
[ HeYoo @ 16.11.2013. 23:19 ] @
Ne znam za Javu ali izbor=(char) System.in.read(); bi trebala da bude konverzija vracene vrednosti u tip char i dodeljivanje promenljivoj izbor.
Prazna while petlja ceka na odgovor koji je u intervalu ponudjenih stavki menija (od 1 do 5). Sve dok ne uneses korektan odgovor opsega ostajes zaglavljen u while petlji.

Citat:
Probao sam da promenim promenljivu u tip int ali onda kada unesem broj izmedju 1 i 5 on me opet vraca u while ne pusta me iz nje

Ne pusta te iz nje zato sto se ocekuje char (broj izmedju navodnika nije vise int vec char) izmedju '1' i '5'
[ dusans @ 16.11.2013. 23:21 ] @
Postoji mnogo načina na koje možeš odraditi jednu istu stvar.
U ovom primeru je dat akcenat na upotrebu while i switch konstrukcija,
dok je sam izbor char tip podatka manje-više nebitan (ali je zgodan) i nije ključan.

Funkcija System.in.read() vraća ASCII kod (broj, byte) onoga što čeka na ulazu.
Kada pritisneš 0, System.in.read() vraća 48, za 1 vraća 49, za 2 varća 50, itd...
http://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

Dakle ne moraš u ovom slučaju da koristiš char, možeš i int ili byte ili nešto treće
jedino moraš da znaš kako je "kodirana" vrednost koja te interesuje.

Ako bi koristio int, onda bi uslovi bili ovakvi:
Code:

// int data type
...
while(izbor < 49 || izbor > 53);
...
case 49:
...
case 50:
...


Program će raditi sasvim korektno, međutim možeš primetiti da je
korištenje char podatka mnogo jasnije, čitljivije i zgodnije u ovoj situaciji:
Code:

// char data type
...
while(izbor < '1' || izbor > '5');
...
case '1':
...
case '2':
...


Na kraju i sam vidiš zbog čega nisi mogao da izađeš iz while petlje kada si pisao:
Code:

while(izbor < 1 || izbor > 5);
[ miljan9602 @ 16.11.2013. 23:58 ] @
Da sad sam skontao ako ocu da koristim promenljivu tipa int,byte ili tako to moram da pisem brojeve iz ASCII coda kao sto si ti napisao 49 za 1 50 za 2 i tako dalje ?

Jel se zato koristi ovo izbor=(char) System.in.read(); ?
Da ne moramo da stavljamo 49 za 1 nego samo stavimo '1' i on ga sam konvertuje u ASCII ?
[ dusans @ 17.11.2013. 10:01 ] @
Baš tako.
[ miljan9602 @ 17.11.2013. 11:28 ] @
Jos jedno pitanje, to sto si rekao 49 daje '1', a kako bi napisali mi je trebala na primer vrednost '151' ili '15' ili neki dvocifren ili veci broj ?
[ dusans @ 17.11.2013. 13:53 ] @
U glavi ne bi trebao i ne smeš da mešaš (poistovećuješ) brojeve i stringove (karaktere).
Dakle int a = 153 nije isto što i string a = '153'.
Iako je čoveku 153 jedno te isto, u programiranju nije takva situacija.

Dakle int a = 153 je numerička vrednost, sa kojom možeš da radiš aritmetičke operacije i slično.

U drugu ruku, string a = '153' je niz karaktera ('1', '5', '3') sa kojima ne možeš da radiš aritmetiku
ali možeš druge operacije koje spadaju u domen rada sa stringovima, itd...

Na kraju, analogno stringu, char a = '1' nije isto što i int a = 1.
Svaki char je u suštini ASCII kod (broj) simbola! (slova, cifre, interpunkcije, itd...)
Npr:
Code:

(int)'A' == 65
(int)'Z' == 90
(int)'8' == 56
(int)'c' == 99


JEDAN CHAR == JEDAN SIMBOL!
JEDAN STRING == NULA ILI VIŠE SIMBOLA!

U slučaju 2-cifrenih, 3-cifrenih vrednosti, ... morao bi da radiš ili preko int-ova
ili preko string-ova i normalno ne preko funkcije System.in.read() koja vraća jedan
jedini kod (char) koji se nalazi na ulazu.

[ miljan9602 @ 17.11.2013. 14:53 ] @
E hvala ti ! Sada sam skontao o cemu pricas, malo me bila zbunila ova nova funkcija Syste.in.read(); jer nju nisam jos nijednom do sada koristio pa nisam tacno ni razumeo u cemu je fora sve dok nisam procitao ovaj deo tvoje poruke

"U slučaju 2-cifrenih, 3-cifrenih vrednosti, ... morao bi da radiš ili preko int-ova
ili preko string-ova i normalno ne preko funkcije System.in.read() koja vraća jedan
jedini kod (char) koji se nalazi na ulazu."

Hvala ti mnogo !