Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
dinokino
Člen
Avatar
dinokino:5.10.2014 20:40

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
Tvůrce
Avatar
Odpovídá na dinokino
Matěj Kripner:5.10.2014 20:42

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
Avatar
dinokino
Člen
Avatar
Odpovídá na Matěj Kripner
dinokino:5.10.2014 20:45

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
Jan Lupčík
Tvůrce
Avatar
Odpovídá na dinokino
Jan Lupčík:5.10.2014 20:46

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

Nahoru Odpovědět
5.10.2014 20:46
TruckersMP vývojář
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na dinokino
David Hartinger:5.10.2014 20:50

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
You are the greatest project you will ever work on.
Avatar
dinokino
Člen
Avatar
dinokino:5.10.2014 20:55

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
Tvůrce
Avatar
Odpovídá na dinokino
tomisoka:5.10.2014 21:03

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
5.10.2014 21:03
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na dinokino
Matěj Kripner:5.10.2014 21:03

David Hartinger 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
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Matěj Kripner
David Hartinger:5.10.2014 21:11

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

Nahoru Odpovědět
5.10.2014 21:11
You are the greatest project you will ever work on.
Avatar
dinokino
Člen
Avatar
Odpovídá na David Hartinger
dinokino:5.10.2014 21:42

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
Tvůrce
Avatar
Odpovídá na David Hartinger
Matěj Kripner:6.10.2014 7:39

Copak používám nextChar? 8|

 
Nahoru Odpovědět
6.10.2014 7:39
Avatar
dinokino
Člen
Avatar
Odpovídá na Matěj Kripner
dinokino:6.10.2014 13:05

Reagoval jsem na David Čápka...

 
Nahoru Odpovědět
6.10.2014 13:05
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Matěj Kripner
David Hartinger:6.10.2014 13:15

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
6.10.2014 13:15
You are the greatest project you will ever work on.
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na dinokino
Matěj Kripner:6.10.2014 17:26

Já taky...

 
Nahoru Odpovědět
6.10.2014 17:26
Avatar
dinokino
Člen
Avatar
dinokino:8.10.2014 17:19

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
Tvůrce
Avatar
Odpovídá na dinokino
Matěj Kripner:8.10.2014 21:13

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
8.10.2014 21:13
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.