Chci geek triko! Chci geek triko!
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. října 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. října 20:11
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30. října 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. října 20:37
 
Nahoru Odpovědět 30. října 20:37
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30. října 20:38

Login login = new Login();

 
Nahoru Odpovědět 30. října 20:38
Avatar
Jirka
Člen
Avatar
Odpovídá na Jakub Všetečka
Jirka:30. října 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. října 20:42
Kdo nic nedělá, nic nezkazí.
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jirka
Marek Uhlik:30. října 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. října 20:46
 
Nahoru Odpovědět 30. října 20:46
Avatar
Odpovídá na Jirka
Jakub Všetečka:30. října 20:48

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

Editováno 30. října 20:49
 
Nahoru Odpovědět 30. října 20:48
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30. října 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. října 20:57
 
Nahoru Odpovědět 30. října 20:55
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30. října 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. října 20:59
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30. října 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. října 21:07
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30. října 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. října 21:09
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30. října 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. října 21:16
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30. října 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. října 21:28
 
Nahoru Odpovědět 30. října 21:25
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Všetečka
Marek Uhlik:30. října 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. října 21:40
 
Nahoru Odpovědět 30. října 21:39
Avatar
Odpovídá na Marek Uhlik
Jakub Všetečka:30. října 21:42

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

 
Nahoru Odpovědět 30. října 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.