Diskuze: problem pri vipise textu
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 6 zpráv z 6.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
než jsem na to přišel, tak jsem se trošku zapotil .
Náhodné číslo je 6 a začnu hádat od menšího:
ako sa volas ?:v
[ PC ] :hadaj ake cislo si mislim:
[ v ] :0
[ PC ] :viac
[ v ] :1
[ PC ] :viac
[ v ] :2
[ PC ] :viac
[ v ] :3
[ PC ] :viac
[ v ] :4
[ PC ] :viac
[ v ] :5
[ PC ] :viac
[ v ] :6
*****************uhadol si*****************
*****************uhadol si*****************
*****************uhadol si*****************
*****************uhadol si*****************
*****************uhadol si*****************
*****************uhadol si*****************
*****************uhadol si*****************
Náhodné číslo je 6 a začnu od většího
ako sa volas ?:v
[ PC ] :hadaj ake cislo si mislim:
[ v ] :9
[ PC ] :menej
[ v ] :8
[ PC ] :menej
[ v ] :7
*****************uhadol si*****************
Nyní to fungovalo zprávně.
Zde modelace běhu programu. Nepoužíváš cyklus a místo toho se zanořuješ hlouběji a hlouběji. Jako by rekurze. Takže když pak uhodneš, vracíš se zpátky (vynořuješ se).
main()
-> vstup()
-> hadaj() - neuhodnu
-> -> vstup()
-> -> hadaj() - neuhodnu
-> -> -> vstup()
-> -> -> hadaj() - uhodnu
-> -> vstup()
-> -> hadaj()
-> vstup()
-> hadaj()
main()
To znamená, když v hadaj() je můj odhad nižší, než náhodné číslo tak se znovu zavolá vstup() a to zde:
private static void hadaj() {
if (a == 123456789) {
System.out.println("spravne cislo je--->" + uran + "<---");
============================
vstup(); ZDE SE VOLÁ VSTUP
============================
}
if (a < uran) {
System.out.println(pc + "viac");
vstup();
}
if (a > uran) {
System.out.println(pc + "menej");
vstup();
} else {
System.out.println("*****************uhadol si*****************");
}
}
a následně hadej(). Pokud se nyní trefím, vypíše se "uhadol si" a běh programu se vrátí na konec metody vstup() a do metody hadaj(), kde přetím skončil:
private static void hadaj() {
if (a == 123456789) {
System.out.println("spravne cislo je--->" + uran + "<---");
vstup();
==============================================
} ZDE SE OPĚT VYNOŘÍM A PROGRAM POKRAČUJE
==============================================
if (a < uran) {
System.out.println(pc + "viac");
vstup();
}
if (a > uran) {
System.out.println(pc + "menej");
vstup();
} else {
System.out.println("*****************uhadol si*****************");
}
}
a pokračuji (měj na paměti, že nyní je již a == uran) k dalšímu if (a < uran), tan se přeskočí, jde se na if (a > uran), ten je false, takže se přejde k části else, která se provede -> vypíše se opět "uhadol si".
Sakra sakra, sám jsem to napsal špatně . To je tak, když celou dobu mluví člověk na netu jen anglicky
dakujem za podrobne visvetlenie ale asi to nechapem alebo som debil
ti chces povedat ze cim viac krat budem hadat tak tim viac to napise "uhadol
si" ?
lebo tuto moznost som skusal a na rovnaki pocet hadani visiel rozdielni pocet
vitaznich textou
a neviem ci si ten program skusal alebo nie ale ta podmienka
if (a == 123456789){
System.out.println("spravne cislo je--->"+uran+"<---");
vstup();
}
je len pre pripad ze nedokazes uhadnut a ak to napises tak ti vipise spravne
cislo
(ktore je generovane nahodne)
ok no ak to je tak ako hovoris tak ako podla teba to mam opravit ?
Spíš jsem chtěl říct, že jak nepoužíváš cyklus, tak se neustále zanořuješ do programu.
Možné řešení:
import java.util.Random;
import java.util.Scanner;
public class Hra {
private static Scanner scanner = new Scanner(System.in);
private static Random generator = new Random();
private static final int CISLO_MIN = 0;
private static final int CISLO_MAX = 10;
private static int nahodneCislo;
public static void main(String[] args) {
nahodneCislo = generator.nextInt(CISLO_MAX) + 1;
System.out.println("=====");
System.out.println("Start");
System.out.println("=====\n");
String vstup = null;
boolean uhodnuto = false;
do {
System.out.print("Jaké číslo si myslím? (zadej celé číslo v rozsahu " + CISLO_MIN + " až " + CISLO_MAX + "): ");
vstup = scanner.next();
try {
int cislo = Integer.parseInt(vstup);
if (cislo == nahodneCislo) {
System.out.println("Uhodl jsi.");
uhodnuto = true;
} else if (cislo < nahodneCislo) {
System.out.println("Málo.");
} else if (cislo > nahodneCislo) {
System.out.println("Hodně.");
}
} catch (Exception e) {
System.out.println("Chybný vstup!");
}
} while (!uhodnuto);
System.out.println("\n=====");
System.out.println("Konec");
System.out.println("=====");
}
}
Výstup programu:
=====
Start
=====
Jaké číslo si myslím? (zadej celé číslo v rozsahu 0 až 10): 19
Hodně.
Jaké číslo si myslím? (zadej celé číslo v rozsahu 0 až 10): 8888888888888888888888888888888
Chybný vstup!
Jaké číslo si myslím? (zadej celé číslo v rozsahu 0 až 10): aslha
Chybný vstup!
Jaké číslo si myslím? (zadej celé číslo v rozsahu 0 až 10): -1254
Málo.
Jaké číslo si myslím? (zadej celé číslo v rozsahu 0 až 10): 4
Hodně.
Jaké číslo si myslím? (zadej celé číslo v rozsahu 0 až 10): 2
Málo.
Jaké číslo si myslím? (zadej celé číslo v rozsahu 0 až 10): 3
Uhodl jsi.
=====
Konec
=====
Vysvětlení:
nahodneCislo = generator.nextInt(CISLO_MAX) + 1;
Vygeneruje náhodné číslo v rozsahu 0 až CISLO_MAX.
do {
...
} while (!uhodnuto);
Dokud má proměnná uhodnuto hodnotu false, provádí se blok v do. Blok v do se provede minimálně jednou .
if (cislo == nahodneCislo) {
System.out.println("Uhodl jsi.");
uhodnuto = true;
}
Pokud hráč uhodne, vypíše se text a hodnota proměnné uhodnuto je změněna na true.
Zobrazeno 6 zpráv z 6.