6. Lekce - proměnné, metody, parametry , návratové hodnoty

Proměnné

Proměnná je místo, které má jméno a datový typ. Do proměnné  si můžeme uložit libovolnou hodnotu daného datového typu a následně ji použít například i opakovaně. Uloženou hodnotu v proměnné můžeme v průběhu programu měnti.

  • Vytvoření - proměnnou vždy vtvoříme uvedením datového tybu následovaného  jménem proměnné. Jméno proměnné může a nemusí být následováno znaménkem rovnáse a výrazem (matematickým, voláním metody, hodnotou), které určuje počáteční hodnutu, která bude do proměnné uložena.
  • Použití - pokud chceme použít hodnotu proměnné stačí uvést jméno proměnné v místě kde checme proměnnou použít-. Takovým místem  může být výpočet nové hodnoty proměnné, volání metody a určení hodnoty jejího parametru.
  • Změna/Nastavení/Zápis -  hodnotu proměnné změníme tak že uvedem její jméno a znaménko rovnáse pak následuje výraz, který po vyhodnocení vytvoří hodnotu, které se do proměnné uloží. Takovým výrazem může být konstanta (tedy nějaké číslo), jiná proměnná, matematický výraz nebo funkce jejíž návratová hodnota se použije.
/* vytvoření promenné */
int cislo;
double cislo2 = 5.0;
String text;
String text2 = "Ahoj!";
int[] poleCislel;
int[] poleCisel2 = new int[10];

/*použití hodnoty uložené v proměnné*/
System.out.println(text2);
System.out.println(cislo2 / 8);


/*nastavení/zápis hodnoty do proměnné*/
cislo = 8;
cislo = 7+9;
cislo = cislo + 1;
cislo = poleCisel2[2] *8;
text = text2 + " Cau! " + text2;
poleCisel2[0] = poleCisel2[0] * poleCisel2[0];

Metody

Metoda je kus programu (posloupnost instrukcí), který můžeme volat opakovaně z libovolných míst programu.

Definice

  • začíná zatím vždy "public static"
  • následuje datový typ hodnoty, která bude vracená jako výsledek volání metody. Pokud metoda nemá výsledek je datový typ void
  • dále je uveden název metod
  • následuje seznam parametrů v kulatých závorkách oddělených čárkou. Pookud metoda nemá parametry jsou vedeny prázdné kulaté závorky ().
  • Každý parametr má vždy uveden datový typ a jméno pod, kterým bude moct být využit uvnitř metody jako by to byla proměnná.
  • Nakonec následu je tělo metody, blok kódu ovnitř složených závorek.
  • Pokud metoda vrací jiný datový typ než void, musí obsahovat jeden nebo více příkazu return, které jsou následovány výrazem (proměnou, vzorcem, hodnotou, voláním jiné metody), které po vyhodnocený vrátí hodnotu, která bude použita jako hodnota, která se předá do místa volání jako návratová hodnota.

Použití

  • uvedeme název metody a v kulatých závorkách hodnoty všech parametrů metody oddělené čárkou
  • pokud je metoda bez parametrů uvedeme prázdné kulaté závorky ()
  • pokud metoda vrací hodnotu, můžeme ji použít v místě kde se výsledný vrácená hodota použije pro další zpracování. Uloží se do proměnné, použije se jako hodnota pro výpočet ve vzorci, použije se jako hodnota parametru volání nějaké další metody.
public static void mojePrvniMetoda() {
System.out.println("Ahoj");
}

public static void pozdrav(String jmeno) {
System.out.println("Ahoj " + jmeno + "!");
}

public static String vytvorTextPozdravu(String jmeno) {
return "Ahoj " + jmeno + "!";
}

public static int najdiHodnotuVPoli(int[] pole, int hodnota) {
for (int i = 0; i < pole.length; i++) {
if(pole[i] == hodnota) {
return i;
}
}
return -1;
}

public static void vypis(int[] p) {
System.out.print("[");
for (int i = 0; i < p.length; i++) {
if(i != 0) {
System.out.print(", ");
}
System.out.print(p[i]);
}
System.out.println("]");
}

public static int faktorial(int n) {
if(n <= 1) {
return 1;
}
return faktorial(n-1)*n;
}

public static void main(String[] args) {
mojePrvniMetoda();
pozdrav("Davide");
String text1 = vytvorTextPozdravu("Davide");
System.out.println(text1);
System.out.println(vytvorTextPozdravu("Alberte"));
int[] mojePole = new int[] {5,7,9,6,7,8,1};
vypis(mojePole);
int nalezenyIndex = najdiHodnotuVPoli(mojePole, 5);
System.out.println(nalezenyIndex);
System.out.println("5!="+faktorial(5));
}

Úkoly k procvičení

Vytvořte hru Šibenice (popis). Využijte projekt z adresy https://git.cs.vsb.cz/jez04/obesenec.git Pro jeho úspěšné zkopírování použijte v eclipsu menu File -> Import... vyberte možnost Git/Project from Git (with smart import) dále zvolte možnost Colne URI a do políčka URI nakopírujte výše uvedený odkaz.

Rady:

  • vytvořte sdi proměnnou typu char[] s názvem tajenka přímo ve třídě Hraj. Před definici proměnné dejte klíčová slova private static. Tuto proměnnou pak můžete použít v kterékoliv metodě uvnitř třídy Hraj.
  • Stejnou proměnnou na stejném místě typu String si vytvořte pro slovo, které se bude hádat.
  • Proměnná oknoSibenice obsahuje objek, který umožní zobrazit uživatelské rozhraní (GUI) pro hru.
  • Použijte metodu oknoSibenice.setWorldText("") pro nastavení textu hádaného slova na prázdný řetězec.
  • Metoda public static void startHry() se automaticky vyvolá po zmáčknutí tlačítka "Start" v okně hry šibenice.
  • Použíte třídu SibeniceZaklad a její metodu vyberNahodneSlovo pro získání řetězce s náhodným slovem.
  • Každý řetězec má metodu toUpperCase, kterou použijte k převedení všech písmenek na velká písmenka. Výsledný text uložte do proměnné pro hádané slovo.
  • do proměnné tajenka si vytvořte pole znaků stejné délky jako je délka řetězce (metoda length).
  • Pole vyplňte podtržítky.
  • Pomocí metod objektu oknoSibenice:
    • setWorldText - nastavte text který se bude zobrazovat hráči místo hádaného slova. Vytvořte ho z pole tajenka pomocí new String(tajenka)
    • setInfoText - nastavte text, který slouží pro informaci hráči zda vyhrál, prohrál, nebo ukončil hru.
    • setMistakeCount - nastavte počet chyb, které hráč udělal. Minimum 0 a maximum 8, ovlivňuje jaký obrázek se šiběnicí se zobrazuje.
  • Metoda public static void konecHry() se volá automaticky, pokud hráč zmáčkne tlačítko "End" pro ukončení hry. Pomocí metod setWorldText  a setInfoText zobrazte hráči slovo, které měl hádat a vypište informační text o ukončení hry.
  • Metoda public static void zvolenoPismeno(List<Character> pismena) se volá automaticky, pokud hráč zmáčkl tlačítko s písmenem. Metoda jako parametr dostane "chytré" pole s daným písmenem a jeho varianty s diakritikou. V případě písmeka E bude pole obsahovat písmena/znaky E,Ě,É.
  • Je třeba projít předané pole (List) pismena a pro každé z nich je třeba projít celé hádané slovo znak po znaku, obdobně jako pole. Lze použít metodu třídy String charAt. A zjistit zda dané písmeno slova je stejné jako písmeno z pole pismena. Pokud ano písmeno ze slova se zapíše do pole tajenka. Navíc je třeba si do proměnné typu boolean zaznamena zda jsme uhodli alespoň jedno písmeno.
  • Pokud jsme neuhodli alespoň jedno písmeno, zvýšíme počet chyb o jedna. Metody setMistakeCount a getMistakeCount.
  • Pokud ano, zobrazíme hráči nový obsah pole tajenka. Stejně jako na začátku hry.
  • Pokud pole tajenka neobsahuje, žádné podtržítko je konec hry a hráč vyhrál. je třeba mu zobrazit informaci o výhře pomocí metody setInfoText.
  • Pokud je počet chyb větší nebo roven 8 hráč prohrál. Zobrazte hráči hádané slovoa informaci o prohře.
public static String nactiRadek() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
return reader.readLine();
} catch (IOException e) {
return null;
}
}