NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 2 - První objektová aplikace v Javě - Hello object world

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
Filip (animátor/programator):6.9.2017 17:15

Moja verzia oop kalkulačky v jave
main:

package oop.kalkulacka;

import java.util.*;
/**
 *
 * @author My
 */
public class OopKalkulacka {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner sc = new Scanner(System.in, "Windows-1250");

        operacia operacia = new operacia();

        System.out.println("vitajte v kalkulačke");
         System.out.println("zadajte prve číslo");
         float a = Float.parseFloat(sc.nextLine());
         System.out.println("zadajte druhe číslo");
         float b = Float.parseFloat(sc.nextLine());
          System.out.println("zvolte si operáciu");
         System.out.println("číslo 1 sčítanie");
         System.out.println("číslo 2 odčítanie");
         System.out.println("číslo 3 násobenie");
         System.out.println("číslo 4 delenie");
         int op = Integer.parseInt(sc.nextLine());
    operacia.operacia(op, a, b);

    }
}

operacia:

package oop.kalkulacka;

/**
 *
 * @author My
 */
public class operacia {

    public void operacia(int op,float a,float b){
    plus plus = new plus();
    minus minus = new minus();
    krat krat = new krat();
    deleno deleno = new deleno();
    if (op == 1){
    plus.plus(a, b);
    }
    else
        if (op == 2){
    minus.minus(a, b);
    }
    else
            if (op == 3){
    krat.krat(a, b);
    }
    else
                if (op == 4){
    deleno.deleno(a, b);
    }
                else
                    System.out.println("Neplatná volba");

    }

}
Editováno 6.9.2017 17:17
Odpovědět
6.9.2017 17:15
Nikdy sa nevzdávaj a choď si za svojim snom.......
Avatar
Radka Jánská:23.9.2017 21:51

Ahoj, tak bych s vámi ráda zkonsultovala moje řešení jednoduché kalkulačky OOP. Vycházela jsem z toho, že znovupoužitelnost bych ocenila u samotného výpočtu. Vytvořila jsem tedy samostatnou třídu Kalkulacka pro deklaraci proměnných (cislo1, cislo2 a volba) - jako atributy - a pro samotný výpočet operace s proměnnými - jako metodu. V metodě main jsem nechala vše, co se týká "prostředí kalkulačky" - tedy uvítání, způsob výzvy k zadání čísel a výběru operace, způsob prezentace výsledku.

Co jsem nedokázala pořešit bylo ošetření zadání operace jiné než 1 až 4 přímo v Kalkulačce, musela jsem to nechat v main, což není zrovna ideální řešení. Zkoušela jsem přijít na to, jak rozšířit syntaxi za příkazem return, ale zatím se mi to nepovedlo. Máte někdo nějakou radu?

TŘÍDA KALKULACKA:

/**
* Třída umožňuje výpočet pro dvě čísla a s přednastavené operace (+, -, *, /).
* @author janska
*/
public class Kalkulacka {

/**
* První číslo ve výpočtu (při rozdílu číslo, od kterého se odčítá, při dělení čitatel).
*/
public float cislo1;

/**
* Druhé číslo ve výpočtu (při rozdílu číslo, kterého se odčítá, při dělení jmenovatel).
*/
public float cislo2;

/**
* Volba operace, která se má s čísly provést:
* 1 - sčítání,
* 2 - odčítání,
* 3 - násobení,
* 4 - dělení.
*/
public int volba;

/**
* Metoda provádějící výpočet operace.
* V případě, že volba není 1 až 4, vrátí výpočet hodnotu 0.
* @return
*/
public float vypocet() {
float vysledek = 0;

switch(volba)
{
case 1:
vysledek = cislo1 + cislo2;
break;
case 2:
vysledek = cislo1 - cislo2;
break;
case 3:
vysledek = cislo1 * cislo2;
break;
case 4:
vysledek = cislo1 / cislo2;
break;

}
return vysledek;
}
}

METODA MAIN:

public static void main(String[] args) {
Scanner sc = new Scanner(System.in, "Windows-1250");
Kalkulacka kalkulacka = new Kalkulacka();

System.out.prin­tln("Vítejte v kalkulačce");

String pokracovat = "ano";
while(pokraco­vat.equals("a­no"))
{
System.out.prin­tln("Zadejte první číslo:");
kalkulacka.cislo1 = Float.parseFlo­at(sc.nextLine());
System.out.prin­tln("Zadejte druhé číslo:");
kalkulacka.cislo2 = Float.parseFlo­at(sc.nextLine());
System.out.prin­tln("Zvolte si operaci:\n\t 1 - sčítání,\n\t 2 - odčítání,\n\t 3 - násobení,\n\t 4 - dělení");
kalkulacka.volba = Integer.parse­Int(sc.nextLi­ne());
if ((kalkulacka.volba > 0) && (kalkulacka.volba < 5))
{
System.out.prin­tln("Výsledek: " + kalkulacka.vy­pocet());
}
else
{
System.out.prin­tln("Neplatná volba");
}
System.out.prin­tln("Přejete si zadat další příklad? [ano/ne]");
pokracovat = sc.nextLine();
}
System.out.prin­tln("Děkuji za použití kalkulačky");
}

 
Odpovědět
23.9.2017 21:51
Avatar
Odpovídá na Radka Jánská
Petr Štechmüller:24.9.2017 7:51

Ahoj,

  1. Pro vložení kódu je tu tlačítko vložit kód.
  2. Konstrukce switch má ještě defaultní větev, do které se kód dostane, pokud není splněna ani jedna podmínka v case případech. Tudíž můžeš kód v metodě vypocet upravit takto:
switch(volba)
{
  case 1:
    vysledek = cislo1 + cislo2;
    break;
  case 2:
    vysledek = cislo1 - cislo2;
    break;
  case 3:
    vysledek = cislo1 * cislo2;
    break;
  case 4:
    vysledek = cislo1 / cislo2;
    break;
  default:
  // zde osetris nespravne znaménko
  // já osobně bych vyhodil nějakou výjimku typu IllegalArgumentException.

}
return vysledek;

3. Nemusís si ukládat výsledek operace do proměnné, ale rovnou ho vracet.

vysledek = cislo1 * cislo2; // tvůj přístup
return cislo1 * cislo2; // můj návrh

4. Přistupovat k atributům třídy přímo není úplně dobré. Na to by měly sloužit gettery a settery.

Přeji hodně úspěchu v učení...

Odpovědět
24.9.2017 7:51
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Bertram
Člen
Avatar
Odpovídá na Radka Jánská
Bertram:24.9.2017 11:33

Hádanka, proč se tvá kalkulačka dostala k takovému výsledku?

Vítejte v kalkulačce
Zadejte první číslo:
2.1
Zadejte druhé číslo:
1.1
Zvolte si operaci:
         1 - sčítání,
         2 - odčítání,
         3 - násobení,
         4 - dělení
2
Výsledek: 0.9999999
Přejete si zadat další příklad? [ano/ne]
 
Odpovědět
24.9.2017 11:33
Avatar
Odpovídá na Petr Štechmüller
Radka Jánská:25.9.2017 21:31

Ahoj, děkuji za reakci.

  1. Super, nevěděla jsem jak to tam vložit, už jsem to tlačítko našla a otestovala, jak funguje.
  2. Větev default znám, ale nevěděla jsem, jak do proměnné vysledek uložit String "Neplatná volba". V jednom z dalších tutoriálů jsem se teď setkala s tím, že je příkaz return použit vícekrát v rámci podmínky if, tak to zkusím napasovat na switch, jestli to dokážu rozchodit. :-)
  3. To navazuje na dvojku, nevěděla jsem, že return lze použít víckrát, tak mi drž palce, ať to napasuju. :-D
  4. Absolutně nevím o čem mluvíš, snad se k tomu dostanu v dalších tutoriálech, případně později při dalším studiu. :-D

Těším se na další podnětné reakce k mým dotazům. ;-)

 
Odpovědět
25.9.2017 21:31
Avatar
Odpovídá na Bertram
Radka Jánská:25.9.2017 21:32

Krutá hádanka, z hlavy nevím, jdu hledat. :-( Asi budu muset příště lépe testovat :-(

 
Odpovědět
25.9.2017 21:32
Avatar
Odpovídá na Bertram
Radka Jánská:25.9.2017 21:41

Týká se to hádám datového typu? Vím, že v tutoriálu o datových typech se psalo něco o problémy se zaokrouhlováním ... kvůli tomu je i speciální datový typ pro měnu, která by tyhle problémy měla ošetřit ... BigDecimal, nebo tak nějak, že? Mířím správným směrem nebo jsem mimo mísu?

 
Odpovědět
25.9.2017 21:41
Avatar
Radka Jánská:25.9.2017 21:58

Ahoj všem, napadl mne ještě jeden dotaz, možná hloupý, ale vrtá mi to hlavou. :-D Jde mi o grafické znázornění OOP - members v IDe... kolečko (koule?) jsou metody, čtvereček (krychle?) jsou atributy ... co je kosočtvereček (jehlan?) :-D

 
Odpovědět
25.9.2017 21:58
Avatar
Bertram
Člen
Avatar
Odpovídá na Radka Jánská
Bertram:25.9.2017 23:10

Jde o to, že pro každý datový typ je v paměti vyhrazen určitý prostor. V javě je to pro float 32 bitů.

Pokud ale budeš chtít převést výsledek z ukázky výše, tedy 0,1 do dvojkové soustavy, tak zjistíš, že má toto číslo ve dvojkové soustavě nekonečný rozvoj.

Do paměti se ale uloží pouze 32 bitů. Po zpětném převodu takto uloženého čísla do desítkové soustavy tak dochází k chybě.

V přiloženém obrázku jde vše vidět. V levo převod z desítkové na dvojkovu soustavu, kde lze vidět periodicky se opakující sekvence, která tvoří nekonečný rozvoj a v pravo zpětný převod 32 bitů z tohoto rozvoje zpět na desítkové číslo.

 
Odpovědět
25.9.2017 23:10
Avatar
Branislav David:9.10.2017 21:19

Ahoj, chcel som sa opytat co treba stlacit aby mi ukazal netbeans tu dokumentaciu co sme tam zapisovali v komentaroch ku tej triede zdravic.

 
Odpovědět
9.10.2017 21:19
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 196.