Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 10. diel - Cyklus for v Jave

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Miroslav Melzer:4.10.2016 19:27

Teď mě napadlo, že ten první běh nemusí bejt v cyklu a trochu to napůl funguje:

System.out.println("zadej kurs");
   float a = Float.parseFloat(sc.nextLine());
   System.out.println("Celkový kurs je zatím " + a);

  String dalsi = "a";
  while(dalsi.equals("a"))
  {
   System.out.println("zadej kurs");
   float b = Float.parseFloat(sc.nextLine());
   System.out.println("Celkový kurs je zatím " + a*b);
   System.out.println("další ? a/n");

   dalsi = sc.nextLine();
   dalsi= dalsi.toLowerCase();
  }
run:
zadej kurs
1.5
Celkový kurs je zatím 1.5
zadej kurs
1.8
Celkový kurs je zatím 2.6999998
další ? a/n
a
zadej kurs
2
Celkový kurs je zatím 3.0
další ? a/n
n
BUILD SUCCESSFUL (total time: 30 seconds)

akorát tam zůstává těch 1.5 ze začátku......což je to o čem jsi mluvil...proměnná mimo cyklus......

Avatar
pocitac770
Tvůrce
Avatar
Odpovedá na Miroslav Melzer
pocitac770:4.10.2016 19:32

Msg, už je toho dosti

Avatar
Misko X007X
Člen
Avatar
Misko X007X:6.1.2017 21:02

int mensi , cislo1 = 2, cislo2 = -5;
int vecsi = (cislo1 > cislo2) ? cislo1 : cislo2;
if (vecsi == cislo1) {
mensi = cislo2;
} else {
mensi = cislo1;
}
int sucet = 0;
for (int i = vecsi; i >= mensi; i--) {
sucet += i;
}
char vysledok = (sucet > 0) ? 'k' : 'z';

Poradíte mi prosím? lebo mi nechce spustiť program vôbec a neviem kde som pochybil .. Diki :)

Avatar
Moss
Člen
Avatar
Odpovedá na Miroslav Bejlek
Moss:30.1.2017 19:50

Premenna ktoru deklarujes v cykle, tak zanikne po opusteni cyklu, takze nijak :(

Avatar
Oskar Nový
Člen
Avatar
Odpovedá na @PeWy@
Oskar Nový:31.1.2017 14:18

Vygoogli si, nebo se podívej do dalších lekcích.

Avatar
Moss
Člen
Avatar
Moss:31.1.2017 17:24

Ahoj, vytvoril som si kalkulacku s pouzitim cykla while, ale po druhy krat sa nic nenacita do premennej
kod:

Scanner sc = new Scanner(System.in, "Windows-1250");
        boolean cyklus = true;
        while (cyklus) {
        System.out.println("KALKULACKA");
        System.out.println("Zadajte cislo1: ");
        float a = Float.parseFloat(sc.nextLine());
        sc.nextLine();
        System.out.println("Zadajte cislo2: ");
        float b = Float.parseFloat(sc.nextLine());
        System.out.println("Zadajte operaciu(+,-,*,/)");
        char c = sc.next(".").charAt(0);
        double vysledok = 0.0;
        switch (c) {
            case '+':
                vysledok = a + b;
                break;
            case '-':
                vysledok = a - b;
                break;
            case '*':
                vysledok = a * b;
                break;
            case '/':
                vysledok = a / b;
                break;
        }
            System.out.println("Vysledok: " + vysledok);
        System.out.println("Pokracovat?A/n: ");
        char d = sc.next(".").charAt(0);
        if (d == 'y') {
            cyklus = false;
        }
        else {
            cyklus = true;
        }
    }

po spusteni a naslednom vykonani vypoctu po 1. krat to napise:
Exception in thread "main" java.lang.Num­berFormatExcep­tion: empty String
at sun.misc.Floa­tingDecimal.re­adJavaFormatStrin­g(FloatingDeci­mal.java:1842)
at sun.misc.Floa­tingDecimal.par­seFloat(Floatin­gDecimal.java:122)
at java.lang.Flo­at.parseFloat(Flo­at.java:451)
at KalkulackaMat­ko.main(Kalku­lackaMatko.ja­va:10)
at sun.reflect.Na­tiveMethodAcces­sorImpl.invoke0(Na­tive Method)
at sun.reflect.Na­tiveMethodAcces­sorImpl.invoke(Na­tiveMethodAcces­sorImpl.java:62)
at sun.reflect.De­legatingMetho­dAccessorImpl­.invoke(Delega­tingMethodAcces­sorImpl.java:43)
at java.lang.reflec­t.Method.invo­ke(Method.java:498)
at com.intellij.rt­.execution.ap­plication.AppMa­in.main(AppMa­in.java:147)

Process finished with exit code 1

Avatar
Moss
Člen
Avatar
Odpovedá na Moss
Moss:31.1.2017 21:56

Riesenie som nasiel sam. Parsovanie pri sc.nextLine robilo neplechu. Riesenie:

public static void main(String[] argc) {
    Scanner sc = new Scanner(System.in);
    char d = 'a';
    while (d == 'a') {
        System.out.println("KALKULACKA");
        System.out.println("Zadajte cislo1: ");
        float a = sc.nextFloat();
        System.out.println("Zadajte cislo2: ");
        float b = sc.nextFloat();
        System.out.println("Zadajte operaciu(+,-,*,/)");
        char c = sc.next(".").charAt(0);
        double vysledok = 0.0;
        switch (c) {
            case '+':
                vysledok = a + b;
                break;
            case '-':
                vysledok = a - b;
                break;
            case '*':
                vysledok = a * b;
                break;
            case '/':
                vysledok = a / b;
                break;
        }
        System.out.println("Vysledok: " + vysledok);
        System.out.println("Pokracovat?A/n: ");
        d = sc.next(".").charAt(0);
    }}
Avatar
zitekv
Člen
Avatar
zitekv:31.1.2017 21:58

Ahoj, když si necháš přeložit následující text, pak by ti to mělo být jasný

Exception in thread "main" java.lang.NumberFormatException: empty String ... at KalkulackaMatko.main(KalkulackaMatko.java:10)

překlad Google: Výjimka ve vláknu "hlavní" java.lang.Num­berFormatExcep­tion: prázdný String ... na KalkulackaMat­ko.main (KalkulackaMat­ko.java:10)

Podle mne ti zůstanou prázdné znaky konce řádku po otázce na pokračování na konci. Uprav to na

...
char d = sc.next(".").charAt(0); sc.nextLine();
...

A mělo by to projít.

Avatar
Petr Vopalecký:6.2.2017 0:51

Ahoj, může mi někdo prosím nastínit proč se mi, viz níže, nevrací while? :)

public static void main(String[] args) {
    Scanner sc = new Scanner (System.in, "windows-1250");
    System.out.println("VÝPOČET BMI: ");

    String pokracovat = "jo";
    while (pokracovat.equals("jo")){

    System.out.println("Zadej váhu (KG): ");
    float vaha = sc.nextFloat();
    System.out.println("Zadej výšku (cm)!: ");
    float vyska = sc.nextFloat();
    //vzorec
    float vysledek = (vaha / (vyska*vyska/10000));

    //možnosti
    if (vysledek < 18.5){
        System.out.println("Tvoje BMI je: " + vysledek + " což znamená, že máš podváhu a zároveň vysoké zdravozní riziko");
    }
    else if (vysledek > 18.5 && vysledek < 24.9){
        System.out.println("Tvoje BMI je: " + vysledek + " což znamená, že jsi normální :) ");
    }
    else if (vysledek > 25 && vysledek < 29.9){
        System.out.println("Tvoje BMI je: " + vysledek + " což znamená, že máš nadváhu");
    }
    else if (vysledek > 30 && vysledek < 34.9){
        System.out.println("Tvoje BMI je: " + vysledek + " což znamená, že máš obezitu 1. stupně");
    }
    else if (vysledek > 34.9 && vysledek < 39.9){
        System.out.println("Tvoje BMI je: " + vysledek + " což znamená, že máš obezitu 2. stupně (závažná)");
    }
    else if (vysledek > 40){
        System.out.println("Tvoje BMI je: " + vysledek + " což znamená, že máš obezitu 3. stupně (těžná)");
    }

    //tohle nefunguje...
    System.out.println("Napiš 'jo' a zkus to znova");
    pokracovat = sc.nextLine();
    }
    System.out.println("Tak ne no...");
}
Avatar
Atrament
Člen
Avatar
Odpovedá na Petr Vopalecký
Atrament:6.2.2017 2:10

Zjednodušeně řečeno jde o to, že po provedení

float vyska = sc.nextFloat();

ti ve scanneru zůstane to závěrečné 'Enter', kterým uživatel ukončil zadávání své výšky. To se pak hned předá do

pokracovat = sc.nextLine();

nextLine() čte vstup do zadání Enter (konec řádku), jelikož ten už má jako zbytek po nextFloat(), tak to vypadá, jako bys nezadal nic jenom ten Enter. Proto bude podmínka ve while false a program skončí.

Mezi voláním nextFloat() a nextLine() je tedy třeba se zbavit toho přebytečného Enteru, nejjednodušeji tak, že zavoláš jedno extra nextLine():

float vyska = sc.nextFloat();
sc.nextLine() //tady se zbavíme přebytečného Enteru
... výpočet
System.out.println("Napiš 'jo' a zkus to znova");
pokracovat = sc.nextLine();

Stejný problém je i u použití nextInt()

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 153.