Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek
Moderátor: Mods_senior
ponik
Level 3.5
Příspěvky: 677 Registrován: 27 kvě 2009 23:47
Příspěvek
od ponik » 31 říj 2014 11:34
čau,
začínám s C# a narazil jsem na tenhle problém.
Metodou RndList by mi měla vzniknout proměnná "list" kterou by následně metoda WriteList měla vypsat. Jenže pokud proměnnou "list" použiju jako parametr pro metodu WriteList tak mi vyskočí chyba že "list" neexistuje.
Jak dosáhnu toho abych mohl zmíněnou proměnnou používat i mimo metodu?
Kód: Vybrat vše
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
RndList(10);
WriteList(list);
Console.ReadLine();
}
static private void RndList (int x)
{
List<int> list = new List<int>();
Random rnd = new Random ();
for (int i = 0 ; i < x;)
{
list.Add(rnd.Next(99));
i++;
}
}
static private void WriteList(List<int> L)
{
for (int i = 0; i < L.Count; )
{
Console.Write("#" + L[i] + " ");
i++;
}
}
}
}
Dík
faraon
Master Level 8.5
Příspěvky: 7415 Registrován: 23 pro 2010 09:23
Příspěvek
od faraon » 31 říj 2014 12:37
Nešla by udělat jako public? V nejhorším případě jako globální.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
ponik
Level 3.5
Příspěvky: 677 Registrován: 27 kvě 2009 23:47
Příspěvek
od ponik » 31 říj 2014 12:57
změna na pubic ani na global nepomohla.
před tebou tu nekdo psal
(pak to smazal, netušim proč) že bych měl proměnnou deklarovat mimo metodu. Podle toho jsem se dostal k tomuhle.
Kód: Vybrat vše
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine ("set list count");
int count = int.Parse(Console.ReadLine());
List<int> list1 = new List<int>();
RndList(list1,count);
WriteList(list1);
Console.ReadLine();
}
static private void RndList (List<int> L , int x)
{
Random rnd = new Random ((int) DateTime.Now.Ticks);
for (int i = 0 ; i < x;)
{
L.Add(rnd.Next(99));
i++;
}
}
static private void WriteList(List<int> L)
{
for (int i = 0; i < L.Count; )
{
Console.Write("#" + L[i] + " ");
i++;
}
Console.WriteLine(" ");
}
}
}
ale to pořád nění to co bych chtěl. Múj cíl byl metoda která vytvoří proměnnou se kterou bych pak mohl dál pracovat (jestli to teda je možný)
dík
Tomasb98
Level 4
Příspěvky: 1012 Registrován: 02 čer 2013 14:54
Bydliště: Hradec Králové
Příspěvek
od Tomasb98 » 31 říj 2014 13:49
Smazal jsme to protože když jsem to zkoušel tak mi to nefungovalo. Jak nedělám konsolové aplikace tak jsme ten list deklaroval úplně mimo...
faraon
Master Level 8.5
Příspěvky: 7415 Registrován: 23 pro 2010 09:23
Příspěvek
od faraon » 31 říj 2014 14:07
ponik píše: Múj cíl byl metoda která vytvoří proměnnou se kterou bych pak mohl dál pracovat
Vytvořit tu proměnnou mimo metodu je to co jsem ti psal také, platnou buď v celé třídě nebo v celém programu.
A co kdyby ta metoda tu proměnnou vracela? Nevím jestli to zrovna v C# jde, ale něco takového:
Kód: Vybrat vše
List<int> vytvorit(...)
{
...
return list;
}
seznam=vytvorit();
Ale musel by sis asi nejdřív deklarovat vlastní typ List, aspoň v Céčku bych postupoval takhle.
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
domitea
Tvůrce článků
Příspěvky: 1971 Registrován: 24 čer 2009 19:46
Bydliště: Královehradecký kraj
Kontaktovat uživatele:
Příspěvek
od domitea » 31 říj 2014 15:33
Doplním Faraona:
Kód: Vybrat vše
static private List<int> RndList (int x)
{
List<int> list = new List<int>();
Random rnd = new Random ();
for (int i = 0 ; i < x;)
{
list.Add(rnd.Next(99));
i++;
}
return list;
}
Pak je ještě řešení nedeklarovat ten List v metodě, ale ve třídě. Proč? List deklarovaný v metodě existuje pouze a jen v rámci dané metody!
ponik
Level 3.5
Příspěvky: 677 Registrován: 27 kvě 2009 23:47
Příspěvek
od ponik » 31 říj 2014 22:05
Takže když to tak shrnu tak deklarovat proměnnou v metodě není dobrej nápad. Zůstanu u varianty deklarace proměnné mimo metodu, pro moje účely to stejnak asi bude ideální řešení. Škoda že mě to nenapadlo dřív.
Aspoň zase vím něco novýho, děkuji všem za příspěvky.
CZechBoY
Master Level 9.5
Příspěvky: 8813 Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:
Příspěvek
od CZechBoY » 01 lis 2014 01:13
Jakej je sakra rozdíl mezi konzolovým C# a oknovým C#?!
btw. když pracuješ s jednim objektem furt dokola tak udělej z těch funkcí metody toho objektu...
Kód: Vybrat vše
MyList list = new MyList(...);
list.Rnd(...);
list.Write(...);
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Tomasb98
Level 4
Příspěvky: 1012 Registrován: 02 čer 2013 14:54
Bydliště: Hradec Králové
Příspěvek
od Tomasb98 » 01 lis 2014 15:50
Vím no prostě jsme tam napsal blbost.