Diskuze: Návratová hodnota
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
No jelikož to není celý kód tak můžu jen hádat. Jak předáváš Login instanci třídě User ?
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.
Z toho co psal jsem pochopil ,tak mu bool vrací tahle funkce
public bool UserLog()
{
return userLog;
}
A to mu nefunguje.
Zkoušel jsem to otestovat a vypíše se true.
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();
}
Ne v tomto případě ne ale pokud udělám to samé u metody Overeni tak ano.
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 ?
Já vím, ale chtěl jsem vyloučit úplně všechny možnosti. A ano používám, ale nic to nevypisuje.
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();
?
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;
}
}
}
}
}
}
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);
Zobrazeno 14 zpráv z 14.