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: Přiřazení do proměnné

Aktivity
Avatar
Benjibs
Člen
Avatar
Benjibs:22.6.2013 14:14

V skorších lekciách je:

String premenna;

V tejto zase, že pri deklarácii floatu treba uviesť hocijakú hodnotu.

float premenna = 5

Je to závislé na dátovom type, jeho skupine (primitívny/re­ferenčný), alebo ako vlastne?

Odpovědět
22.6.2013 14:14
1 + 1 = 2
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Benjibs
David Hartinger:22.6.2013 14:16

Ne, hodnotu je třeba uvést jen proto, aby se dole mohl vypsat výsledek, jinak bys vypisoval proměnnou, která není inicializovaná.

Nahoru Odpovědět
22.6.2013 14:16
You are the greatest project you will ever work on.
Avatar
Benjibs
Člen
Avatar
Odpovídá na David Hartinger
Benjibs:22.6.2013 14:27

Takže ak tomu chápem správne,
Java vyhubuje, aj keď sa kód využívajúci tú premennú ešte nevykonal (resp. je tu len potenciálna možnost využitia takejto premennej? ) ?

Doteraz som pracoval len s interpretovanými jazykmi, preto si nie som istý :)

Editováno 22.6.2013 14:27
Nahoru Odpovědět
22.6.2013 14:27
1 + 1 = 2
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Benjibs
David Hartinger:22.6.2013 14:29

Interpreti mají nižší restrikce, Java tam vidí před přiřazením do proměnné vysledek spoustu podmínek a říká si, že kdyby ani jedna z nich neplatila, tak by ve výsledku nic nemuselo být. A potom se vypisuje, což vidí jako problém.

Nahoru Odpovědět
22.6.2013 14:29
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Kit:22.6.2013 14:58

Ten příklad je napsán procedurálně a to Javě moc nesedí. Správně by tam v daném případě

float premenna = 5;

nemělo být vůbec. Místo toho by bylo vhodnější přizpůsobit zbytek ukázkového programu tak, aby zmíněná definice hodnoty nebyla potřebná. Většinou není potřebná ani deklarace.

Nahoru Odpovědět
22.6.2013 14:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Benjibs
Člen
Avatar
Benjibs:22.6.2013 15:08

Napísať by som to nevedel, ale šlo by to takto?

Pridať do triedy private metódu.
Metóda by vlastne vykonávala toto:

System.out.printf("Výsledek: %f", vysledek);

Ten 'vysledek' by bol jej argumentom
Bola by volaná v každej vetve Switcha.

  • na konci v klauzule default by bola
System.out.println("Neplatná voľba.")
Editováno 22.6.2013 15:08
Nahoru Odpovědět
22.6.2013 15:08
1 + 1 = 2
Avatar
Kit
Tvůrce
Avatar
Kit:22.6.2013 15:21

Víc by se mi líbilo tohle řešení:

    // ...
    int volba = Integer.parseInt(sc.nextLine());
    try {
        System.out.printf("Výsledek: %f", vypocet(a, b, volba));
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
    System.out.println("Děkuji za použití kalkulačky.");
}

float vypocet(float a, float b, int volba) throws Exception {
    switch (volba) {
        case 1: return a + b;
        case 2: return a - b;
        case 3: return a * b;
        case 4: return a / b;
    }
    throw new Exception("Neplatná volba");
}

EDIT: Koukám, že se ztrácí odsazení

Editováno 22.6.2013 15:23
Nahoru Odpovědět
22.6.2013 15:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:22.6.2013 17:26

No jasně, ale tohle je jeden z prvních tutoriálů, metody tady ještě používat nemůžeš :)

Nahoru Odpovědět
22.6.2013 17:26
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:22.6.2013 17:46

To vím. Reagoval jsem jen na připomínku od Benjibs

Nahoru Odpovědět
22.6.2013 17:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Benjibs
Člen
Avatar
Odpovídá na David Hartinger
Benjibs:22.6.2013 17:48
;(

@kit
A placol si mi sem kód, ktorému rozumiem tak na 30% :) Ale aj tak vďaka.

Editováno 22.6.2013 17:50
Nahoru Odpovědět
22.6.2013 17:48
1 + 1 = 2
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Benjibs
Kit:22.6.2013 17:55

To je fajn, už ti zbývá jen 70 % :)

Chtěl jsi privátní metodu, ale bez použití výjimek by to bylo dost nešikovné.

Editováno 22.6.2013 17:57
Nahoru Odpovědět
22.6.2013 17:55
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Benjibs
Člen
Avatar
Benjibs:22.6.2013 18:01

Vlastne mi uniká len zmysel tohto :) :

float vypocet(float a, float b, int volba) throws Exception {

Edit:
A tá privátna metóda je optimálnym riešením?
Žiaľ, 'private' je jedno z mála keywordov ktoré poznám :D

Editováno 22.6.2013 18:02
Nahoru Odpovědět
22.6.2013 18:01
1 + 1 = 2
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Benjibs
David Hartinger:22.6.2013 18:01

Neboj, dostaneš se k tomu :)

Nahoru Odpovědět
22.6.2013 18:01
You are the greatest project you will ever work on.
Avatar
Benjibs
Člen
Avatar
Benjibs:22.6.2013 18:09

Ak by som mohol niečo navrhnúť, nestalo by za uváženie pridanie tohto: http://www.itnetwork.cz/…atch-finally
medzi základné tutoriály? :)

Nahoru Odpovědět
22.6.2013 18:09
1 + 1 = 2
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Benjibs
Kit:22.6.2013 18:15

To slovo "private" jsem tam nějak zapomněl napsat. Podle mne je to kromě přehlednosti i řešení, které je optimální. Je tam redukován počet podmínek a odstraněny závislosti mezi nimi.

throws slouží k exportu výjimky mimo metodu. Je to vlastně druhý return s jiným typem návratové hodnoty, který se používá při vzniku chybových stavů.

return se používá při výstupu regulérního výsledku metody, throw při chybovém výstupu. Pokud je "volba" mimo interval 1-4, je to chyba vstupu a proto je výhodné použít výjimku (exception).

Nahoru Odpovědět
22.6.2013 18:15
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Benjibs
Kit:22.6.2013 18:24

Je fakt, že výjimky mezi články o práci se soubory nepatří. Pro práci se soubory jsou však nezbytné. Souhlasím tedy s tím, že by výjimky měly být mezi základními tutoriály nebo by jim měla být vyčleněna samostatná kapitola.

Nahoru Odpovědět
22.6.2013 18:24
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 16 zpráv z 16.