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 C# - 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
Savi
Člen
Avatar
Savi:13.7.2020 11:07

Zdravím. V rámci zkoušení OOP jsem si zkoušel "kalkulačku" využívající dvě třídy. Problém je, že mi metoda zkontrolujAvypis() ve třídě Vstupy nevidí public proměnné cislo1 a cislo 2 ve třídě Vypocty. Poradíte mi prosím jak to napsat ? Děkuji !! Jinak už jsem zkoušel vytvářet nové instance asi všude, tak se prosím nedivte, kde všude je zakládám.
PROGRAM:

using System;

namespace OOPtraining
{
    class Program
    {
        static void Main(string[] args)
        {



            Vypocty vypocty = new Vypocty();
            Vstupy vstupy = new Vstupy();

            Console.Write("Zadej 1. cislo: ");
            vypocty.cisloA = vstupy.nactiVstupDouble();
            Console.Write("Zadej 2. cislo: ");
            vypocty.cisloB = vstupy.nactiVstupDouble();
            Console.WriteLine("Vyber operaci: 1-secti, 2-odecti, 3-vynasob, 4-vydel ");

            vstupy.operace = vstupy.nactiVstupInt();

            vstupy.zkontrolujAvypis();




            Console.ReadKey();
        }
    }
}

VSTUPY:

using System;
using System.Net.Http.Headers;

namespace OOPtraining
{
    class Vstupy
    {
        Vypocty vypocty = new Vypocty();
        public int operace;

        public double nactiVstupDouble()
        {
            double vystup;

            while (double.TryParse(Console.ReadLine().Trim(), out vystup) != true)
            {
                Console.WriteLine("Nezadal si cislo !! Zkus to jeste jednou");
            }
            Console.WriteLine("Nacteni vstupu probehlo bez problemu");
            return vystup;

        }

        public int nactiVstupInt()
        {
            int vystup;

            while (int.TryParse(Console.ReadLine().Trim(), out vystup) != true)
            {
                Console.WriteLine("Nezadal si cislo !! Zkus to jeste jednou");
            }
            Console.WriteLine("Nacteni vstupu probehlo bez problemu");
            return vystup;

        }

        public void zkontrolujAvypis()
        {
            Vypocty vypocty = new Vypocty();
            Vstupy vstupy = new Vstupy();

            while ((operace != 1) && (operace != 2) && (operace != 3) && (operace != 4))
            {
                Console.WriteLine("Zadal si cislo, ale mimo rozsah! Zkus to jeste jednou: ");
                operace = vstupy.nactiVstupInt();
            }
            if (operace == 1)
            {
                Console.Write("Vysledek: {0} + {1} = ", vypocty.cisloA, vypocty.cisloB);
                Console.WriteLine(vypocty.Secti());
            }
            if (operace == 2)
            {
                Console.Write("Vysledek: {0} - {1} = ", vypocty.cisloA, vypocty.cisloB);
                Console.WriteLine(vypocty.Odecti());
            }
            if (operace == 3)
            {
                Console.Write("Vysledek: {0} * {1} = ", vypocty.cisloA, vypocty.cisloB);
                Console.WriteLine(vypocty.Vynasob());
            }
            if (operace == 4)
            {
                Console.Write("Vysledek: {0} / {1} = ", vypocty.cisloA, vypocty.cisloB);
                Console.WriteLine(vypocty.Vydel());
            }
        }



    }
}

VYPOCTY:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OOPtraining
{
    class Vypocty
    {

        public double cisloA;
        public double cisloB;

        public double Secti()
        {
            return cisloA + cisloB;
        }

        public double Odecti()
        {
            return cisloA - cisloB;
        }

        public double Vynasob()
        {
            return cisloA * cisloB;
        }

        public double Vydel()
        {
            return cisloA / cisloB;
        }


    }
}
Avatar
Odpovedá na Savi
Michal Štěpánek:13.7.2020 15:14

Zkus dát těm třídám "public"

Odpovedať
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Savi
Člen
Avatar
Odpovedá na Michal Štěpánek
Savi:14.7.2020 6:06

Dal jsem před class Vstupy a class Vypocty slovo "public", ale porad mi to vypise 0 + 0 = 0.

Avatar
Odpovedá na Savi
Michal Štěpánek:14.7.2020 6:21

Nemůže to být třeba tím, že mícháš dohromady double a int?

Odpovedať
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Savi
Člen
Avatar
Odpovedá na Michal Štěpánek
Savi:14.7.2020 9:15

No... mám metodu na kontrolu INT a kontrolu DOUBLE. Podle INT jenom vybírám operaci. I ta se vybere dobře, protože ve výpise je správná operace (*, /, +, -). Nějak nevidím problém, jestli tam je INT nebo Double. Máš na mysli něco konkrétního ?

Avatar
Odpovedá na Savi
Michal Štěpánek:14.7.2020 9:20

Jestliže máš jako vstupy DOUBLE, pak to nemůžeš zpracovávat jako INT

Odpovedať
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Savi
Člen
Avatar
Odpovedá na Michal Štěpánek
Savi:14.7.2020 10:25

Ale tam se jedná o úplně jinou proměnnou. Zkoušel jsi to ? Bude to nějaká kravina kterou jako úplný začátečník nevidím, ale potřeboval bych případně konkrétně označit řádek, který se ti nezdá :-/

A jelikož neumím využít krokování nebo nějaký debug.. tak se mi blbě hledá příčina.

Avatar
Odpovedá na Savi
Michal Štěpánek:14.7.2020 11:45

Když si to spustíš tlačítkem F11 tak dalším F11 budeš postupně krokovat v programu a zjistíš, kde je chyba

Odpovedať
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Michal Štěpánek:14.7.2020 12:24

Měl by sis před "provedením operace" nechat vypsat ty vstupní proměnné. Při té operaci o nich program neví, resp. ví, ale nezná jejich hodnotu (protože jí sice ověříš, ale následně už ji nikam nepošleš) a protože jsou to čísla, tak dosadí nuly.

Editované
Odpovedať
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovedá na Savi
Michal Štěpánek:14.7.2020 12:31

Ty vstupní proměnné bys měl deklarovat jako public na začátku třídy a tou procedurou nebo funkcí jim přiřadit hodnotu. Takto sice program ví o existenci nějaké proměnné, ale její hodnotu neví...

Odpovedať
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
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 218.