Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 2. diel - Prvá objektová aplikácia v Jave - Hello object world

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
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");

    }

}
Editované
Odpovedať
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");
}

Avatar
Odpovedá 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í...

Odpovedať
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Bertram
Člen
Avatar
Odpovedá 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]
Avatar
Odpovedá 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. ;-)

Avatar
Odpovedá 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 :-(

Avatar
Odpovedá 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?

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

Avatar
Bertram
Člen
Avatar
Odpovedá 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.

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.

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 196.