NOVINKA - Vstup do světa AI s ONLINE víkendovým kurzem Práce s umělou inteligencí od A do Z. Přihlas se ještě dnes!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Diskuze – Lekce 2 - První objektová aplikace v C# - 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
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;
        }


    }
}
 
Odpovědět
13.7.2020 11:07
Avatar
Odpovídá na Savi
Michal Štěpánek:13.7.2020 15:14

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

Odpovědět
13.7.2020 15:14
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Savi
Člen
Avatar
Odpovídá 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.

 
Odpovědět
14.7.2020 6:06
Avatar
Odpovídá 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?

Odpovědět
14.7.2020 6:21
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Savi
Člen
Avatar
Odpovídá 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 ?

 
Odpovědět
14.7.2020 9:15
Avatar
Odpovídá 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

Odpovědět
14.7.2020 9:20
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Savi
Člen
Avatar
Odpovídá 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.

 
Odpovědět
14.7.2020 10:25
Avatar
Odpovídá 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

Odpovědět
14.7.2020 11:45
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.

Editováno 14.7.2020 12:26
Odpovědět
14.7.2020 12:24
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá 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í...

Odpovědět
14.7.2020 12:31
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
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 216.