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:2.10.2016 11:54

Snažim si procvičovat co jsem se dosud naučil, ale tohle svoje cvičení nějak nemůžu dotáhnout. Potřeboval bych poradit jestli to s dosavadníma znalostma( tj. 6 lekce) můžu dokončit. Nechci poradit jak to vyřešit, baví mě se s tím trápit, ale zase abych u toho nezůstal do smrti....Jde o jednoduchou kalkulačku pro sázkaře tedy s jedinou funkcí, pronásobit zadané kursy a opakovat to dle libosti uživatele.Cílem je získat výsledný kurs pro třeba deset událostí (čísel).
Došel jsem sem :

Scanner sc= new Scanner(System.in, "Windows-1250");
String dalsi = "a";
while(dalsi.equals("a"))
{

System.out.println("zadej kurs");
float kurs = Float.parseFloat(sc.nextLine());

  float vysledek = kurs;

 System.out.printf("Celkový kurs je zatím %.2f ", vysledek);
 System.out.println("další ? a/n");
 dalsi = sc.nextLine();
 dalsi= dalsi.toLowerCase();

\---

což funguje dobře až na to že to nepronásobuje ty kursy.....:)
Jdu na to zbytečně složitě ? Nebo mi zatim ještě nějaká znalost chybí k úspěchu?

 
Odpovědět
2.10.2016 11:54
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:2.10.2016 12:51

Jestli dobře chápu, tak to má nějak zpracovávat více čísel, které se navzájem ovlivňují, když jich je více (promiň, že to říkám tak složitě, ale snažím se být obecný,když si nedokážu zaboha představit, jak s tím souvisí přímé dosazování, jestli to tam máš schválně nebo... no, to je jedno). Tak jako tak, ano, umíš to řešit, akorát jsi zapomněl na jednu drobnost, napovím: "Lokálnost" proměnných ;)

 
Odpovědět
2.10.2016 12:51
Avatar
Odpovídá na pocitac770
Miroslav Melzer:2.10.2016 16:49

Děkuju za snahu pomoct, ale zatim mě to moc nenakoplo...

 
Odpovědět
2.10.2016 16:49
Avatar
Odpovídá na Miroslav Melzer
Miroslav Melzer:3.10.2016 15:24

Mělo by to fungovat takhle:

System.out.println("zadej kurs");
     float a =Float.parseFloat(sc.nextLine());

     System.out.printf("celkový kurs je zatím %.2f ",a);
     System.out.println("zadej další");

      float b =Float.parseFloat(sc.nextLine());
      System.out.printf("celkový kurs je zatím %.2f ",a*b);
      System.out.println("zadej další");

      float c =Float.parseFloat(sc.nextLine());
      System.out.printf("celkový kurs je zatím %.2f ",a*b*c);
      System.out.println("zadej další");
         }
run:
zadej kurs
1.58
celkový kurs je zatím 1,58 zadej další
1.26
celkový kurs je zatím 1,99 zadej další
1.8
celkový kurs je zatím 3,58 zadej další
BUILD SUCCESSFUL (total time: 18 seconds)

Těch případů (kursů) by tam mělo jít vložit kolik bude uživatel chtít.
Ale nedokážu to napasovat do nějakýho toho cyklu.
 
Odpovědět
3.10.2016 15:24
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Miroslav Melzer
pocitac770:3.10.2016 16:30

Otázka. Potřebuješ na každou hodnotu novou proměnnou? Vždyť ji použiješ jen jednou, pokaždé použiješ její hodnotu vynásobenou nějakým číslem, potom výsledek vynásobený dalším číslem, atd atd. A k tvému původnímu problému, proměnné, které jsou uvnitř cyklu mají trvání pouze po dobu jednoho opakování, pak se načtou znovu, ale ty, co jsou mimo něj si poslední uloženou hodnotu pamatují, ať jsi cyklů udělal kolik chceš. Popřemýšlej nad tím ;)

 
Odpovědět
3.10.2016 16:30
Avatar
Odpovídá na pocitac770
Marian Benčat:3.10.2016 16:46

to by byla samozřejmě pravda, kdyby to byla pravda... :-) Java nerozlišuje z hlediska bytecodu jestli je proměnná uvnitř cyklu, nebo vně.. pořád generuje stejný bytecode.. Programátorská poučka však je, že by se proměnná měla definovat co nejblíže použití. Takže správně je naopak dávat proměnnou dovnitř cyklu.

" premature optimization is the root of all evil (or at least most of it) in programming." -Donal Knuth

Editováno 3.10.2016 16:48
Odpovědět
3.10.2016 16:46
Totalitní admini..
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Marian Benčat
pocitac770:3.10.2016 17:17

Ano, ale on se snaží najít způsob, jak něco udělat, a jestli sis toho nevšiml, tak já se mu snažím napovědět jak, sám řekl, že nechce přímé řešení

Editováno 3.10.2016 17:18
 
Odpovědět
3.10.2016 17:17
Avatar
Odpovídá na Marian Benčat
Miroslav Bejlek:3.10.2016 17:26

Pokud definuji proměnnou uvnitř cyklu, tak po opuštění cyklu ztratím údaje té hodnoty. Jak mohu tuto proměnnou použít o opuštění cyklu?

 
Odpovědět
3.10.2016 17:26
Avatar
Odpovídá na pocitac770
Miroslav Melzer:4.10.2016 19:17

Ne, nechápu to co s tim mam udělat....

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

    dalsi = sc.nextLine();
    dalsi= dalsi.toLowerCase();
   }

Tyhle věci se mi tam musí opakovat :zadej kurs +celkovy je....+ další a/n
musí tam bejt i ten vstup uživatele, jestli teda cyklus s dalším během načte novou zadanou hodnotu....
Ale jak mam dát jinou proměnnou mimo cyklus, když musí pracovat s tou proměnnou "a" ?
A jak potom změnim ten -Celkový kurs je ..."a" ?

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

K proměnným vně cyklu můžeš přistupovat i zevnitř (ovšem ne naopak), vždyť jsi to i udělal s proměnnou "dalsi"

 
Odpovědět
4.10.2016 19:22
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.