NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: BMI kalkulačka

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Davemal
Člen
Avatar
Davemal:19.7.2017 0:32

Ahoj,
udělal jsem kalkulačku na výpočet Bmi. Jsem začátečník, Javu jsem se začal učit koncem minulého týdne. Pokud víte, jak by se kalkulačka dala vylepšit, tak mi dejte vědět. Každé nápady přijímám.

https://www.dropbox.com/…fWbVGZkwOiSa?dl=0

 
Odpovědět
19.7.2017 0:32
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Davemal
Lubor Pešek:19.7.2017 2:27

předně na začátečnický kód to není úplně nejhorší;)

  • jakmile už máš víc jak 2x else if, použíj switch
  • pokud máš takové rozmezí, tak nemusíš psát tu pravou stranu operátoru &&. Kdybys ty ifky psal od největší po nejmenší, tak by ses k potřebnému indexu dostal i tak. Ale pokud to vyřešíš switchem, bude to lepší.
  • odstraň češtinu a zkoušej si anglické názvy proměnných (text výpisu můžeš ze začátku ponechat v češtině, později bys musel řešit ještě kódování, ale zase ať z toho nemáš hlavu jako meloun)
  • předělej to na objekty (jinými slovy nervy všechno do main metody, ale použíj víc tříd, metod atd.)
  • zkus použít javu FX nebo ze začátku aspoň swing, abys to měl už jako aplikaci a nejen konzoli
  • pokud tak často používáš statické metody out a println třídy System, tak si i to můžeš uložit třeba do lokální proměnné
java.io.PrintStream p = System.out;
p.print("text");

Je to už moc velký detail, ale je dobré si na takovýto výpis zvyknout:)

  • pak mě napadá sice na první pohled zbytečný upgrade, ale má to smysl dělat už u lehkých projektů. Zkus si dokumentovat, co programuješ. Je to sice simple program, ale právě na takovýchto programech si můžeš i dobře trénovat a zvykat si na dokumentaci. Aby se ti potom u složitějších projektů nestala ta debilní chyba, kdy budeš mít komentář typu:
/**
* for cyklus, který opakuje akci do té doby, dokud není splněná podmínka
*/
for(int i = 0; i<10 ; i++) {
        //TO DO
}

když napíšeš takovýto komentář, tak vlastně jen vysvětluješ, jak funguje cyklus:) což jaksi ztrácí smysl:) takže zkus si jednoduché komentáře, ve kterých musíš stručně zmínit na co třeba ta dotyčná metoda je. Myslím tím, proč existuje, jakou myšlenkou si ji vytvořil atd.). Psát dobré komentáře není zas tak jednoduché jak se zdá;) a když si budeš říkat, že toto je přece lehký projekt a není potřeba to komentovat, budu to dělat až u složitějších projektů, tak pak narazíš:) Vím proč to říkám, sám jsem tak dopadl:)

  • třeba si zkus i vygenerovat .jar file tohoto programu (a zaexperimentuj si, jak se spouští ve windows command lině nebo v linuxovém terminálu. Taky dobrá zkušenost;) )
Nahoru Odpovědět
19.7.2017 2:27
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Davemal
Člen
Avatar
Odpovídá na Lubor Pešek
Davemal:19.7.2017 9:46

Děkuji moc. Tvých rad si cením a vezmu si z nich ponaučení. OOP a Java FX jsem nepoužil, protože ještě nejsem na takové úrovni, abych to použil v programu. K OOP se dostávám teď a Java FX bude následovat potom. :-)
Ta lokální proměnná je skvělý nápad, ostatní proměnné přepíši do angličtiny. Použití switche mě napadlo, ale myslel jsem si, že switch umí pracovat pouze s přesnými hodnotami (==), jestli umí switch pracovat i s (<,>), tak ho použiji.
Až se naučím OOP a Java FX, tak třeba tuto kalkulačku upravím.

Ještě jednou díky. S pozdravem Davemal. :)

 
Nahoru Odpovědět
19.7.2017 9:46
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Davemal
Lubor Pešek:19.7.2017 21:28

máš pravdu, ve switchi nemůžeš dát podmínku. Jediná změna, která přišla tuším že s javou 6 nebo 7 (teď si nejsem sto pro jistý) je, že ve switchi můžeš kromě datového typu int použít i String (případně i char, ale ten se stejně převede automaticky na int, takže to už je fakt blbost)

přiznám se, o půl noci jsem si nevšiml, že tam máš různé rozmezí, takže switch by teď byl trošku komplikovaný a při takovém malém množství možností by nemusel být příliš efekttivní, ale dalo by se to řešit tak, že bys switch zacyklil. Zadáš do casů hraniční hodnoty a v default možnosti bys třeba zadané číslo zmenšoval. Ještě by se musely ošetřit desetinná místa, protože jak jsem řekl, tak switch pracuje jen s 2 datovými typy, takže to bude automaticky zaokrouhlovat.
Uznávám, že toto řešení by bylo efektivní v momentě, když už ti switch naroste aspoň do 10 hraničních hodnot, jinak by takový algoritmus v konečném důsledku ještě celé vlákno zpomalil. Takže switch beru zpět, v tomto případě se hodí tvé řešení (ale jak jsem i poznamenal v předchozím komentu, nemusíš tam psát celé rozmezí, ale stačí, když pojedeš ty ifky od nejvyšších hodnot. Pokud bude hodnota nižší, tak se první podmínka nesplní a přejde na druhou atd. graficky by to vypadalo, že to bude jakoby ztékat dolů:) ale to chce velkou představivost:) )

Jinak jestli ti můžu doporučit.... před tím, než naběhneš na javu FX, tak si projdi swing a applety. Když dobře pochopíš OOP a tyhle dvě věci, tak na FX ti bude stačit víkend, ve kterém stihneš i rande;) Swing bude od příští javy sice nedoporučovaný a zastaralý (kvůli tomu, že FX má širší možnosti a používá se líp na webu), ale když si to projdeš, nic rozhodně nepokazíš;)

Nahoru Odpovědět
19.7.2017 21:28
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
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 4 zpráv z 4.