V této kapitole si ukážeme, jak lze v Javě zapisovat na obrazovku
a číst z klávesnice. K výstupu na obrazovku slouží tzv. výstupní
proud (angl. output stream)
System.out. Používat budeme tři jeho
metody: print(),
println() a
printf().
System.out.println( "Pozdrav z Afriky!" );
Metody print() a
println() vytisknou hodnotu, kterou
uvedeme v závorkách za jménem metody (této hodnotě říkáme parametr).
Liší se tím, že println() k výstupu navíc
připojí přechod na nový řádek a tudíž následující volání metody
print() nebo
println() bude tisknout od začátku řádky.
Při tisku lze využít spojování řetězců pomocí operátoru
+.
int v = 100;
System.out.println( "Gepard dokáže běžet rychlostí " + v + " km/h" );
Elegantnější výstup nabízí metoda printf()
(tzv. formátovaný výstup), která je obdobou stejnojmenné funkce
jazyka C.
int m = 6;
System.out.printf( "Slon africký váží %d tun", m );
Parametry metody printf() jsou
formátovací řetězec a seznam hodnot. Formátovací řetězec může
obsahovat tzv. výstupní konverze, které určují, v jakém tvaru se
vytiskne příslušná hodnota. Každá konverze začíná znakem
%. Např. %d
znamená výstup celého čísla v desítkové soustavě. Při
provádění příkazu se místo konverze dosadí příslušná hodnota ze
seznamu hodnot. Pokud hodnota chybí nebo neodpovídá výstupní
konverzi, nastane chyba.
Zvláštním případem je konverze %n,
které neodpovídá žádná hodnota
v seznamu hodnot. Na výstupu se tato konverze projeví přechodem na
nový řádek. V MS Windows se pro přechod na nový řádek používá
dvojice znaků \r (carriage return)
a \n (line feed).
Unixové systémy používají znak \n.
Konverze %n zajistí, že se
použije správný přechod na nový řádek, tj.
\r\n na MS Windows
a \n na Unixu.
Pro reálná čísla máme konverzi %f.
Můžeme u ní stanovit počet číslic za desetinnou tečkou (implicitní
hodnota je 6). Např. %.2f
vytiskne dvě číslice za desetinnou tečkou.
System.out.printf( "Eulerova konstanta je asi %.2f%n", Math.E );
Znaky tiskneme pomocí konverze %c.
char c = '@';
int i = c;
System.out.printf( "Znak '%c' je v tabulce Unicode na pozici %d%n", c, i );
Pro řetězce používáme konverzi %s.
String java = "Java";
System.out.printf( "Náš oblíbený programovací jazyk je %s%n", java );
Pro čtení z klávesnice máme v Javě tzv. vstupní proud
(angl. input stream)
System.in.
Většinou jej nepoužíváme přímo, ale např. přes třídu
Scanner. Tato třída nabízí metody pro
čtení primitivních typů a řetězců. Používáme-li třídu
Scanner, náš program obvykle začíná
příkazem import, kterým překladači
říkáme, kde má třídu Scanner hledat.
Před prvním čtením vytvoříme instanci třídy
Scanner pomocí klíčového slova
new. Načtení hodnoty typu
int provedeme voláním metody
nextInt() na této instanci.
import java.util.Scanner;
public class Cteni {
public static void main( String[] args ) {
Scanner sc = new Scanner( System.in );
int x = sc.nextInt();
System.out.printf( "Načtená hodnota: %d%n", x );
}
}
Načtení hodnoty typu double zajistí metoda
nextDouble(). Řetězec načteme metodou
next().
Scanner sc = new Scanner( System.in );
double d = sc.nextDouble();
System.out.printf( "Načtené číslo: %f%n", d );
String s = sc.next();
System.out.printf( "Načtený řetězec: %s%n", s );
Úloha 1
Doplňte chybějící části kódu.
Úloha 2
Doplňte kód tak, aby byl výstup ve tvaru 1 + 2 = 3.
Úloha 3
Doplňte chybějící části kódu.
Úloha 4
Spárujte hodnoty, které patří k sobě.
Úloha 5
Určete, co se vytiskne.
Úloha 6
Napište ve správném pořadí.
Úloha 7
Napište ve správném pořadí.
Otázky a odpovědi
Student:
Mistře, jak můžu v programu reagovat na stisk klávesy?
Java guru:
Doposud jsme mluvili pouze o čtení hodnot v tzv. textovém
režimu. Textový režim pochází z doby, kdy se programy ovládaly
z příkazové řádky. V textovém režimu Java možnost reagovat na
stisk klávesy nenabízí. Je to dáno tím, že terminál, který
zprostředkovává interakci mezi uživatelem a programem, je
obvykle v tzv. řádkovém režimu. V tomto režimu je vstupní řádka
předána programu až po stisku klávesy Enter. Do té doby ji
můžeme editovat. Dnes používáme textový režim jen výjimečně,
např. v učebnicích jako je tato. Většina programů má grafické
uživatelské rozhraní. V něm je reakce na stisk klávesy snadná.