Avatar
dinokino
Člen
Avatar
dinokino:

Může mi někdo poradit s tímhle kódem?

    public static void main(String[] args) throws java.io.IOException {
char znak=0;
while (znak!='1') {
System.out.print("Napište znak a já vám vrátím jeho číselnou hodnotu!\nPro ukončení napište \"0\"\n");
znak=(char)System.in.read();
System.out.println((int)znak);
    }
    }

Nevím co je na něm blbě, ale jaksi blbne... :D viz.obr.(doplnil jsem jen a,ostatní(vč. čísla 10) se doplnilo samo...)

Editováno 5.10.2014 20:41
 
Odpovědět 5.10.2014 20:40
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na dinokino
Matěj Kripner:

Co se ti na výstupu nezdá? Pokud nechceš dokola vypisovat úvodní hlášku, musíš její výpis umístit nad cyklus - nikoli do něj.
EDIT: promiň, nestihl jsem přečíst editaci

Editováno 5.10.2014 20:44
Nahoru Odpovědět 5.10.2014 20:42
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
dinokino
Člen
Avatar
Odpovídá na Matěj Kripner
dinokino:

nezdá se mi ta desítka... Vše co jsem udělal je, že jsem napsal znak 'a' , a zbytek se doplnil sám... :(

Napište znak a já vám vrátím jeho číselnou hodnotu!
Pro ukončení napište "0"
aDoplnil jsem jen tohle
97
Tohle se doplnilo jakmile jsem stiskl enter
Napište znak a já vám vrátím jeho číselnou hodnotu!A tohle taky
Pro ukončení napište "0"
A tohle taky
10A tohle taky
Napište znak a já vám vrátím jeho číselnou hodnotu!
A tohle taky
Pro ukončení napište "0"//A tohle taky

 
Nahoru Odpovědět 5.10.2014 20:45
Avatar
IT Man
Redaktor
Avatar
Odpovídá na dinokino
IT Man:

Nejdříve polož srozumitelně dotaz a pak ti poradíme :)

Nahoru Odpovědět 5.10.2014 20:46
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na dinokino
David Čápka:

Tam budou IMHO blbnout konce řádků, které se zadávají z konzole, \n má ASCII 10. Čti to pomocí Scanneru jak je to tu ukázané v tutoriálech.

Nahoru Odpovědět 5.10.2014 20:50
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
dinokino
Člen
Avatar
dinokino:

Tak jsem upravil kód na:

    public static void main(String[] args) throws java.io.IOException {
char znak=0;
while (znak!='1') {
znak=(char)System.in.read();
System.out.println((int)znak);
    }
    }

Ale výsledek je pořád stejný...Když zadám písmenko a,na nový řádek se mi vytiskne "97" (což je správně),ale na další se bezprostředně vytiskne "10"...

 
Nahoru Odpovědět 5.10.2014 20:55
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na dinokino
tomisoka:

musíš vyprázdnit input ( načíst zbylé znaky)
tohle by mělo fungovat:

...
znak = System.in.read();
if(znak!='\n')while( System.in.read()!='\n');
...
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 5.10.2014 21:03
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na dinokino
Matěj Kripner:

David Čápka má pravdu. I přes třídu Scanner jsou tam furt potíže s ukončením řádku. Možná neohrabané, ale funkční řešení:

BufferedReader w = new BufferedReader(new InputStreamReader(System.in));
        char znak = 0;
        while (znak != '0') {
            System.out.print("Napište znak a já vám vrátím jeho číselnou hodnotu!\nPro ukončení napište \"0\"\n");
            znak = w.readLine().charAt(0);
            System.out.println((int) znak);
        }
Editováno 5.10.2014 21:05
Nahoru Odpovědět 5.10.2014 21:03
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Matěj Kripner
David Čápka:

Přes scanner musíš číst jako nextLine().cha­rAt(), ne jako nextChar :)

Nahoru Odpovědět 5.10.2014 21:11
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
dinokino
Člen
Avatar
Odpovídá na David Čápka
dinokino:

a neměla by být v tom nextLine().charAt() ve druhé závorce 0? Já jsem v programování naprostý začátečník, jen mě to tak napadlo, protože bez té nuly to hlásilo chybu... :D A napadlo mě to prostě jen tak, aby ta závorka nebyla prázdná a k mému překvapení to funguje... :D

 
Nahoru Odpovědět 5.10.2014 21:42
Avatar
Matěj Kripner
Redaktor
Avatar
Nahoru Odpovědět 6.10.2014 7:39
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
dinokino
Člen
Avatar
Odpovídá na Matěj Kripner
dinokino:

Reagoval jsem na David Čápka...

 
Nahoru Odpovědět 6.10.2014 13:05
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Matěj Kripner
David Čápka:

Psal jsi že i se scannerem ti to nešlo, takže jsi ho použít musel nextLine() maže z bufferu znak \n.

Nahoru Odpovědět  +1 6.10.2014 13:15
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Matěj Kripner
Redaktor
Avatar
Nahoru Odpovědět 6.10.2014 17:26
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Avatar
dinokino
Člen
Avatar
dinokino:

Kód sem přepsal na tohle:

    public static void main(String[] args) throws java.io.IOException {
Scanner sc=new Scanner(System.in);

System.out.println("Hello world!");


char znak,a;
for(;;){
System.out.print("Napište znak a já vám vrátím jeho číselnou hodnotu!\nPro ukončení napište \"1\"\n");
znak=(char)System.in.read();
do {a=(char)System.in.read();
}while(a!='\n');
if(znak=='1'){break;}
else {System.out.println((int)znak);}
}

}

A funguje...tu část:

do {a=(char)System.in.read();
}while(a!='\n');

Mám z jedné knihy o javě...Ale nechápu co přesně to dělá...Chápu tedy že jde o to, že když stisknu nějakou klávesu a ještě i enter, tak se uloží i hodnota klávesy enter,ale nechápu jakým způsobem se ten enter "vymaže", co přesně ta část kódu dělá... :/
Nemá prosím někdo nějaký odkaz, kde bych se o tom něco mohl dočíst? Moc tomu nechápu... :/ :D

 
Nahoru Odpovědět 8.10.2014 17:19
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na dinokino
Matěj Kripner:

Smyčka do-while dělá v podstatě to samé jako smyčka while, ale s tím rozdílem, že máš zaručeno, že se smyčka provede alespoň 1-krát. Jinak řečeno, u do-while se podmínka pro pokračování kontroluje až na konci smyčky, ne na začátku jako u while.
Tvůj kód čte znaky, dokud nenarazí na konec řádku a poté vypíše číselnou hodnotu pouze posledního znaku.

Nahoru Odpovědět  +1 8.10.2014 21:13
"We reject kings, presidents and voting. We believe in rough consensus and running code" David Clark
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.