Diskuze: Neviem zopakovať cyklus
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
//= 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.
Všeobecně (ve všech jazycích) funguje "while" dokud je platná podmínka. Pokud ti cyklus nefunguje, zkontroluj podmínku. Koukni se, jaký výsledek proměnných ti z toho leze.
Keď píšeš otázku tak si všimni, že troška vyššie je taká ikonka
smajlíka a napravo od nej je ikonka </>. Keď na ňu klikneš a potom
medzi ten text ktorý ti pribudol vložíš svoj kód tak to tu na stránke bude
pekne farebné ako u teba keď to píšeš Eclipse
Cyklus nezopakuješ pretože program nejde ani zbuildovať
Java je case sensitive takže premenná double x je úplne iná než double X
Nepoužívaj diakritiku v názvoch premenných čislo ,
najlepšie je hneď od začiatku písať všetko v angličtine
Scanner ti slúži na načítavanie vstupu od užívateľa a ten nemusí byť vždy len číslo tak prečo si premennú nazývať číslo? Nazvime ju scanner a potom z metód Scannera bude jasne vidno čo od neho chceme
Pre načítanie čísla zo vstupu je lepšie načítať celý riadok a nakoniec to parsovať Double.parseDouble(scanner.nextLine())
Keď máš viacero podmienok ktoré závisia od rovnakej premennej a vieš, že vždy nastane len jeden prípad tak nepoužívaj viacero samostatných if-ov za sebou ale použi aj vetvu else, tak sa nemusia kontrolovať ostatné podmienky ak niektorá pred nimi už platila
Keďže do tých premenných a, b, c... v každom cykle načítame nové hodnoty tak ich vytiahneme pred ten cyklus nech sa dookola nealokujú nové
V prípade, že rovnica má len jeden koreň nepotrebuješ ďalšiu premennú do ktorej ho ukladať ale môžeš ju uložiť už do existujúcej x1
Desatinné čísla neporovnávaj priamo cez == z dôvodu toho ako sa ukladajú do pamäte tam vznikajú odchýlky. Buď to porovnaj s nejakou malou odchýlkou 0,00001 alebo či jedno je < prípade > a ak ani jedno neplatí tak budú rovnaké
Keď už Scanner nebudeš používať uvoľni prostriedky OS príkazom scanner.close()
Nakoniec o riadiacej premennej musí ten cyklus vedieť že existuje ešte pred tým než sa doňho vojde takže premennú do ktorej uložíme nakoniec rozhodnutie či sa má cyklus zopakovať deklarujeme ešte pred cyklom s tým že ju nazveme nejako lepšie než X alebo cmd
PS: je obor reálnych čísiel a nie oDbor + treba doplniť kontrolu či
a nie je nula aby si ňou nedelil
private static final String nextInputChar = "X";
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
double a, b, c, D, x1, x2;
String nextInput;
do {
System.out.print("Zadaj a: ");
a = Double.parseDouble(scanner.nextLine());
System.out.print("Zadaj b: ");
b = Double.parseDouble(scanner.nextLine());
System.out.print("Zadaj c: ");
c = Double.parseDouble(scanner.nextLine());
D = (b * b) - 4 * a * c;
//TODO pridat kontrolu ci a nie je nula
if (D < 0) {
System.out.println("D = " + D);
System.out.println("Kvadratická rovnica nemá žiadne riešenie v obore R!");
} else if (D > 0){
x1 = (-b + sqrt(D)) / (2 * a);
x2 = (-b - sqrt(D)) / (2 * a);
System.out.println("D = " + D);
System.out.println("Prvý koreň kvadratickej rovnice, x1 = " + x1);
System.out.println("Druhý koreň kvadratickej rovnice, x2 = " + x2);
} else {
x1 = (- b) / (2 * a);
System.out.println("D = " + D);
System.out.println("Kvadratická rovnica má len jeden koreň, x = " + x1);
}
System.out.println("Pre další príklad vpíš tlačidlo " + nextInputChar + " a potom enter");
nextInput = scanner.nextLine();
} while(nextInput.equals(nextInputChar));
scanner.close();
}
Zobrazeno 3 zpráv z 3.