Naučit se PHP Naučit se PHP
Pouze tento týden až 80 % sleva na vývoj webů v PHP.
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Diskuze: Návratová hodnota

C# .NET .NET (C# a Visual Basic) Návratová hodnota American English version English version

Aktivity (3)
Avatar
Jakub Všetečka:30.10.2018 20:11

Udělal jsem jednoduchý program, kde mám třídu Login, ze které potřebuji navrátit hodnotu boolu. Nechápu proč to nefunguje.

Omlouvám se za necelistvost kódu.

 private void Vstup()
        {
            Console.WriteLine("------------------Login------------------\n");
            Console.Write("Zadejte jméno: ");
            jmenoLogin = Console.ReadLine();
            Console.Write("Zadejte heslo: ");
            hesloLogin = Console.ReadLine();
        }
public void Overeni(){
         if ((jmenoLogin == jmenoUser) && (hesloLogin == hesloUser))
                        {
                            Console.ForegroundColor = ConsoleColor.Green;
                            Console.WriteLine("User log\n");
                            userLog = true;
                            adminLog = false;
                            platnePrihlaseni = true;
                        }
        }
   public bool UserLog()
        {
            return userLog;
        }
public void Upravy()
        {
            userLog = login.UserLog();
            (userLog = true; takthle to funguje)
            if (userLog)
            {
                nějaký kód
            }
      }
static void Main(string[] args)
        {
            Login login = new Login();
            User user = new User();

            login.Overeni();

            user.Upravy();

            Console.ReadKey();
        }
 
Odpovědět 30.10.2018 20:11
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30.10.2018 20:37

No jelikož to není celý kód tak můžu jen hádat. Jak předáváš Login instanci třídě User ?

Editováno 30.10.2018 20:37
 
Nahoru Odpovědět 30.10.2018 20:37
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30.10.2018 20:38

Login login = new Login();

 
Nahoru Odpovědět 30.10.2018 20:38
Avatar
Jirka
Člen
Avatar
Odpovídá na Jakub Všetečka
Jirka:30.10.2018 20:42

Ahoj.

Třída nevrací hodnotu, jedině její metoda.

Možná instance třídy Login, konkrétně metoda Overeni by mohla vracet bool, což by šlo v main otestovat.

Nahoru Odpovědět 30.10.2018 20:42
Kdo nic nedělá, nic nezkazí.
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jirka
Marek Uhlik:30.10.2018 20:46

Z toho co psal jsem pochopil ,tak mu bool vrací tahle funkce

public bool UserLog()
     {
         return userLog;
     }

A to mu nefunguje.

Editováno 30.10.2018 20:46
 
Nahoru Odpovědět 30.10.2018 20:46
Avatar
Odpovídá na Jirka
Jakub Všetečka:30.10.2018 20:48

Zkoušel jsem to otestovat a vypíše se true.

Editováno 30.10.2018 20:49
 
Nahoru Odpovědět 30.10.2018 20:48
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30.10.2018 20:55

Takže když uděláš tohle tak ti to vypíše True ? Když to tvoje upravíš takhle.

public bool Upravy()
        {
            userLog = login.UserLog();
            return userLog;
      }
static void Main(string[] args)
        {
            Login login = new Login();
            User user = new User();

            login.Overeni();

            Console.WriteLine(user.Upravy());

            Console.ReadKey();
        }
Editováno 30.10.2018 20:57
 
Nahoru Odpovědět 30.10.2018 20:55
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30.10.2018 20:59

Ne v tomto případě ne ale pokud udělám to samé u metody Overeni tak ano.

 
Nahoru Odpovědět 30.10.2018 20:59
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30.10.2018 21:07

No tak u metody "Overeni" to nemá smysl když tam přiřazuješ tu hodnotu.
A používáš VS ?

userLog = login.UserLog();

Nevyhazuje ti tohle ve VS chybu ?

 
Nahoru Odpovědět 30.10.2018 21:07
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30.10.2018 21:09

Já vím, ale chtěl jsem vyloučit úplně všechny možnosti. A ano používám, ale nic to nevypisuje.

 
Nahoru Odpovědět 30.10.2018 21:09
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30.10.2018 21:16

Nebylo by lepší poslat celý kód ? Hodila by se aspoň třída User.
Teď jsem si všiml jak jsem se tě předtím ptal. Ty ve třídě User máš vytvořenou instanci Login takhle

Login login = new Login();

?

 
Nahoru Odpovědět 30.10.2018 21:16
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30.10.2018 21:25

Ano

    class Program
    {
        static void Main(string[] args)
        {
            Login login = new Login();
            User user = new User();

            Console.Title = "Login ZOO";

            login.Overeni();

            user.Upravy();

            Console.ReadKey();
        }
    }
}



class Login
    {
        private string jmenoLogin;
        private string hesloLogin;
        private string jmenoAdmin = "admin";
        private string hesloAdmin = "admin";
        private string jmenoUser = "user";
        private string hesloUser = "user";
        private bool adminLog = false;
        private bool userLog = false;
        private bool platnePrihlaseni = false;

        //vstup uzivatelskych udaju
        private void Vstup()
        {
            Console.WriteLine("------------------Login------------------\n");
            Console.Write("Zadejte jméno: ");
            jmenoLogin = Console.ReadLine();
            Console.Write("Zadejte heslo: ");
            hesloLogin = Console.ReadLine();
        }

        //overeni zda je prihlasen admin, user nebo jsou udaje spatne
        public void Overeni()
        {
            while (!platnePrihlaseni)
            {
                Vstup();

                if ((jmenoLogin == jmenoAdmin) && (hesloLogin == hesloAdmin))
                {
                    Console.ForegroundColor = ConsoleColor.Magenta;
                    Console.WriteLine("Admin log\n");
                    adminLog = true;
                    userLog = false;
                    platnePrihlaseni = true;
                }
                else if ((jmenoLogin == jmenoUser) && (hesloLogin == hesloUser))
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("User log\n");
                    userLog = true;
                    adminLog = false;
                    platnePrihlaseni = true;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Neplatné jméno nebo heslo\nZadejte znovu");
                    platnePrihlaseni = false;
                }
            }
        }

        public bool AdminLog()
        {
            return adminLog;
        }

        public bool UserLog()
        {
            return userLog;
        }
    }
}


class User
    {
        Login login = new Login();

        protected string[] zvirata = {"Slon", "Tygr", "Lev", "Opice", "Medvěd"};
        protected string[] vybeh = {"A1", "B1", "B2", "C1", "D1"};
        protected char[] krmeni = {'n', 'n', 'n', 'n', 'n'};
        protected string zprava;
        public bool userLog;
        private bool platnaVolba = false;
        protected int index = 0;
        protected int cislo_zvirete = 0;

        public void Upravy()
        {
            userLog = login.UserLog();
            /* userLog = true; takthle to funguje */
            if (userLog)
            {
                System.Console.Clear();
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine("--------------Menu---------------");
                Console.WriteLine("Zvirata - zobrazit zvířata");
                Console.WriteLine("Vybeh - zobrazit výběhy zvířat");
                Console.WriteLine("Krmeni - nakrmit zvířata");

                while (!platnaVolba) //osetreni uziv. vstupu
                {
                    switch (Console.ReadLine().ToLower())
                    {
                        case "zvirata": //vypis zvirat
                            foreach (string zvire in zvirata)
                            {
                                Console.WriteLine(zvire);
                            }
                            platnaVolba = true;
                            break;

                        case "vybeh": //vypis vybehu zvirat
                            foreach (string zvire_vybeh in vybeh)
                            {
                                index = Array.IndexOf(vybeh, zvire_vybeh); //ziskani indexu jednotky pole
                                if (index >= 0)
                                    zprava = zvirata[index] + " " + vybeh[index] + "\n"; //zformovani zpravy
                                Console.WriteLine(zprava);
                            }
                            platnaVolba = true;
                            break;

                        case "krmeni": //nakrmeni zvirat
                            foreach(string s in zvirata)
                            {
                                cislo_zvirete++;
                                Console.WriteLine("{0} - {1}", cislo_zvirete, s);
                            }

                            Console.Write("Zadejte číslo zvířata které chcete nakrmit: ");
                            int indexKrmeni = int.Parse(Console.ReadLine());

                            indexKrmeni -= 1; //snizeni indexu (jinak by uzivatel musel pro prvni zvire zadat hodnotu 0)
                            krmeni[indexKrmeni] = 'y'; //prepsani

                            Console.WriteLine("{0} - nakrmeno", zvirata[indexKrmeni]);
                            platnaVolba = true;
                            break;

                        default:
                            Console.WriteLine("Neplatná volba, zadejte znovu");
                            break;
                    }
                }
            }
        }
    }
}
Editováno 30.10.2018 21:28
 
Nahoru Odpovědět 30.10.2018 21:25
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30.10.2018 21:39

Tak teď už to je jasný kde je chyba.
Přesně v tomhle :

Login login = new Login();

Ty musíš předat do třídy User tvojí instanci Login aby to fungovalo.Ty tam používáš prázdnou třídu proto to nešlo.
Můžeš jí předat například přes konstruktor např:

class User
{
Login login;
public User(Login login)
{
        this.login = login;
}

}
A potom v Main jenom uděláš User user = new User(login);
Editováno 30.10.2018 21:40
 
Nahoru Odpovědět 30.10.2018 21:39
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30.10.2018 21:42

Díky, teď už my to je jasný.

 
Nahoru Odpovědět 30.10.2018 21:42
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 14 zpráv z 14.