IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: Chytrá proměnná

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

Aktivity
Avatar
vlastajuracka:27.10.2015 20:28

Čues lidi chtel bych se zeptat existuje nějaka proměnna ktera si rozezná jestli do ní ukládam double s des. místem nebo int bez des. místa a samo si to podle toho vypíše ?

 
Odpovědět
27.10.2015 20:28
Avatar
Vladislav Domin:28.10.2015 10:37

Nechcem byt fakt hnusny, ale nechces si vytvorit jednu temu, kde budes pisat svoje problemy? Nebol by den, ak by si nevytvoril novu temu :D, taktiez pokial sa to chces naucit, tak treba skusat, vediet vyhladat informacie a nie, ze ti kazdy presne vzdy napise, co treba urobit :D.

 
Nahoru Odpovědět
28.10.2015 10:37
Avatar
Odpovídá na vlastajuracka
Ondřej Krsička:28.10.2015 12:28

var? kámo používej google,( ale můžeš i bing! ;) :D)

 
Nahoru Odpovědět
28.10.2015 12:28
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Ondřej Krsička
Ondřej Štorc:28.10.2015 12:47

Až na to že klíčové slovo var v Jave neexistuje...

Editováno 28.10.2015 12:47
Nahoru Odpovědět
28.10.2015 12:47
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na Ondřej Štorc
Ondřej Krsička:28.10.2015 13:06

Aha, sekce Java :D pardon.

 
Nahoru Odpovědět
28.10.2015 13:06
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na Ondřej Krsička
Milan Křepelka:28.10.2015 14:25

Asi důsledek zdejší skvělé navigace. Tedy někteří říkají že taková je.

 
Nahoru Odpovědět
28.10.2015 14:25
Avatar
mayyyo
Člen
Avatar
mayyyo:28.10.2015 15:22

Keď to chceš len vypísať tak ti stačí využiť Object

 
Nahoru Odpovědět
28.10.2015 15:22
Avatar
Odpovídá na vlastajuracka
Neaktivní uživatel:28.10.2015 15:47

Nazdar. Pokud vím, tak nic takového neexistuje. Holt si to budeš muset ošetřit třeba try...catch, ale raději počkej na zkušenější, v Javě pracuju jen minimálně. :)

Editováno 28.10.2015 15:47
Nahoru Odpovědět
28.10.2015 15:47
Neaktivní uživatelský účet
Avatar
Richard H.
Tvůrce
Avatar
Richard H.:28.10.2015 17:04

Ne můzes jedině použít try-catch.

Nahoru Odpovědět
28.10.2015 17:04
Malý užitečný manuál je vždy lepší než bichle k ničemu.
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na vlastajuracka
Petr Čech:28.10.2015 17:29

Můžeš si vytvořit třídu, která by to dělala za tebe. Jen se mi nepodařila vygooglit implicitní konverze v Javě, takže to asi nejde udělat bez toho, že bys musel vždy přiřazovat hodnotu metodou. Nevím, jestli ti někdo poradí, jak to udělat lépe.
A na co to vůbec chceš? To nevypadá jako příliš čisté řešení čehokoliv.

Nahoru Odpovědět
28.10.2015 17:29
the cake is a lie
Avatar
Milan Křepelka
Tvůrce
Avatar
Milan Křepelka:28.10.2015 21:08

"a samo si to podle toho vypíše "

Máš to obráceně. Čísla si nevybírají jak budou prezentována. To určuje prezentační vrsvta. Takže až takhle chytrou číselno proměnnou zatím nikdo nevymýšlel.

 
Nahoru Odpovědět
28.10.2015 21:08
Avatar
David Novák
Tvůrce
Avatar
David Novák:28.10.2015 21:53

Má Java něco jako union? :D

Nahoru Odpovědět
28.10.2015 21:53
Chyba je mezi klávesnicí a židlí.
Avatar
coells
Tvůrce
Avatar
Odpovídá na Milan Křepelka
coells:28.10.2015 23:23

Vlastně vymyslel, v R to takhle funguje.

 
Nahoru Odpovědět
28.10.2015 23:23
Avatar
Milan Křepelka
Tvůrce
Avatar
Milan Křepelka:29.10.2015 6:55

Dobře. Jak to funguje? Na základě nějakého obecného předpisu. Mířím tam, že takovýchto nápadů může být vícero. Jak se to potom "řídí"?

 
Nahoru Odpovědět
29.10.2015 6:55
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na vlastajuracka
Jindřich Máca:29.10.2015 9:29

Jak psal Petr Čech, nejednoduší řešení je vytvořit si vlastní třídu. Ta by mohla vypadat nějak takto:

public class SmartVariable {

    private double number;

    public SmartVariable(double number) {
        this.number = number;
    }

    public double getNumber() {
        return number;
    }

    public void setNumber(double number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return (number - (int) number == 0) ? Integer.toString((int) number) : Double.toString(number);
    }
}

A její použití je potom následující:

public class Main {
    public static void main(String[] args) {
        SmartVariable test = new SmartVariable(9.0);
        System.out.println(test); // Vypíše 9
        test.setNumber(9.3);
        System.out.println(test); // Vypíše 9.3
    }
}

Doufám, že to je to, co hledáš. :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
29.10.2015 9:29
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na Jindřich Máca
Milan Křepelka:29.10.2015 12:01

Soustřeďujete se na blbosti ... dané tedy blbou základní otázkou. Kde jsou operátory, typové konverze s ostatními čísly. Nejdřív je potřeba přemýšlet o tom číslo používat jako číslo :-)

 
Nahoru Odpovědět
29.10.2015 12:01
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Milan Křepelka
Jindřich Máca:29.10.2015 12:11

Kód odpovídá požadavkům v otázce, nic víc nic míň. Pokud bude tazatel potřebovat další funkce, jako např. typovou konverzi, jste více než vítán ji sem dopsat. Jinak je to ale zbytečná práce, která nejspíše ani nedojde svému užitku. :-)

Editováno 29.10.2015 12:13
 
Nahoru Odpovědět
29.10.2015 12:11
Avatar
coells
Tvůrce
Avatar
Odpovídá na Milan Křepelka
coells:29.10.2015 12:23

Většinou se to neřídí, protože to řídit nechceš.

Pro typického programátora, který chápe "programovací jazyk" = "C#" nebo "Java" nebo něco podobného, to může vypadat jako pitomá otázka. Ale to nestačí k prohlášení, že takhle chytré proměnné nikdo nevymýšlí.

Existují jazyky, kde motivací není programování, ale řešení problémů. Ty se chovají odlišně a tam to smysl prostě dává. Související operace se pak podřizují sémantice obsahu. Primitivní programy se nakonec dají psát i v Excelu (a to nemluvím o VBS), který chytračí, kde to jde.

 
Nahoru Odpovědět
29.10.2015 12:23
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na Jindřich Máca
Milan Křepelka:29.10.2015 12:26

Ano, s tím s Tebou souhlasím. Pokud bych měl vyjádřit svoje přesvědčení, tak je to klasické vymýšlení bejkáren na základě toho, že Vlasta neumí formátovat čísla.

V .NETu se to dá vyřešit jedním formátovacím stringem nebo IFormatProviderem. Nepředpokládám, že by tomu v Javě bylo jinak.

 
Nahoru Odpovědět
29.10.2015 12:26
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na coells
Milan Křepelka:29.10.2015 12:33

Jsem si jistý, že i při programování které řeší problémy vesmíru se řeší formátování čísla pokud se má zobrazit uživateli. Ale jinak pravda, pokud počítač řeší složité algoritmy, tak tam mě jeho prezentaze nezajímá a je nedůležitá a jistě ji řešit nikdo nechce.

 
Nahoru Odpovědět
29.10.2015 12:33
Avatar
Atrament
Tvůrce
Avatar
Atrament:29.10.2015 12:50

Vždyť už jsem ti tu před časem ukazoval jak se formátují čísla pro výstup pomocí DecimalFormater. Tak to použij a nesnaž se vymýšlet 'narovnák na ohejbák' :) Jak píše Milan Křepelka, o tom jak se číslo zobrazí má rozhodovat presenční vrstva aplikace a ne číslo samotné.

 
Nahoru Odpovědět
29.10.2015 12:50
Avatar
coells
Tvůrce
Avatar
Odpovídá na Milan Křepelka
coells:29.10.2015 17:04

Vlastně je to přesně naopak.

Napíšeš program, který počítá všelijaké složitosti a potřebuješ z toho udělat report pro "uživatele". Jenže to neumíš a tím pádem se v tom nechceš vrtat, ale stále chceš mít něco hezkého, co bys mohl ukazovat. Tyhle jazyky se pak starají o to, aby ses o to nemusel starat. A pokud ti to nevyhovuje, je obvykle jednodušší použít jinou knihovnu, než zkoušet ručně formátovat čísla.

 
Nahoru Odpovědět
29.10.2015 17:04
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na coells
Milan Křepelka:29.10.2015 17:31

Asi moc často řešíš přespříliš složité problémy a neumíš normálně popsat poměrně jednoduchou věc. Tak to zkusíme ještě jednou. Jak pro takovéto "chytré" proměnné vyřešit to jak je zobrazovat tak ja není v defaultu. Tedy jednou chci třeba zobrazovat čísla bez desetinné tečky, jednou s desetinnou tečkou. Jednou chci číslo zobrazovat s oddělováním tisíců a jednou chci vidět číslo jako měnu v národním formátu.

Tedy se odprostíme od teoretického plkání a zkusíme něco popsat prakticky.

Editováno 29.10.2015 17:33
 
Nahoru Odpovědět
29.10.2015 17:31
Avatar
coells
Tvůrce
Avatar
Odpovídá na Milan Křepelka
coells:29.10.2015 21:26

To je stejná lojzovina, na kterou se ptá Vlasta. Zřejmě naformátuješ string a pokusíš se ho někam vložit. Takže google: http://www.dummies.com/…rs-in-r.html

Nikdy jsem to nepotřeboval, protože se o to musí postarat knihovny. Není sranda vkládat číselné hodnoty do grafů. A musí být snadné vložit tabulky a grafy do reportu, když používáš literate programming.

 
Nahoru Odpovědět
29.10.2015 21:26
Avatar
Odpovídá na Milan Křepelka
Ondřej Krsička:29.10.2015 21:56

Zabývat se problémem 9.00 vs. 9 mi přijde jako nesmysl a mrhání časem. Jednoduše si najdu nějakou knihovnu na úpravu čísel nebo něco podobného (v HTML je to tuším vestavěné) a jedu.

 
Nahoru Odpovědět
29.10.2015 21:56
Avatar
Milan Křepelka
Tvůrce
Avatar
Odpovídá na Ondřej Krsička
Milan Křepelka:30.10.2015 7:07

Hrhání časem je hledání knihovny a programování jakési chytré proměnné. Ve standardních jazycích můžeš na výstupu čísla formátovat dle libosti podle jasně daných specifikací. Ten zdejší pseudoproblém bys v C# vyřešil třeba takto.

Console.WriteLine((0.12m).ToString("0.##"));
Console.WriteLine((10m).ToString("0.##"));
 
Nahoru Odpovědět
30.10.2015 7:07
Avatar
Odpovídá na Ondřej Krsička
Drahomír Hanák:30.10.2015 15:47

Promiň za mínus. Asi jsem na něj nechtěně kliknul na mobilu.

 
Nahoru Odpovědět
30.10.2015 15:47
Avatar
Odpovídá na Milan Křepelka
Ondřej Krsička:30.10.2015 15:50

Jojo přesně to jsem myslel :-)

 
Nahoru Odpovědět
30.10.2015 15:50
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 28 zpráv z 28.