NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 10 - Cyklus for v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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......

 
Odpovědět
4.10.2016 19:27
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:4.10.2016 19:32

Msg, už je toho dosti

 
Odpovědět
4.10.2016 19:32
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 :)

 
Odpovědět
6.1.2017 21:02
Avatar
Moss
Člen
Avatar
Odpovídá na Miroslav Bejlek
Moss:30.1.2017 19:50

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

 
Odpovědět
30.1.2017 19:50
Avatar
Oskar Nový
Člen
Avatar
Odpovídá na @PeWy@
Oskar Nový:31.1.2017 14:18

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

 
Odpovědět
31.1.2017 14:18
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

 
Odpovědět
31.1.2017 17:24
Avatar
Moss
Člen
Avatar
Odpovídá 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);
    }}
 
Odpovědět
31.1.2017 21:56
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.

 
Odpovědět
31.1.2017 21:58
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...");
}
 
Odpovědět
6.2.2017 0:51
Avatar
Atrament
Člen
Avatar
Odpovídá 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()

 
Odpovědět
6.2.2017 2:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 151.