Předávání parametrů mezi metodami v různých třídách – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Předávání parametrů mezi metodami v různých třídách – .NET – Fórum – Programujte.comPředávání parametrů mezi metodami v různých třídách – .NET – Fórum – Programujte.com

 

JiriVavru0
Návštěvník
19. 11. 2008   #1
-
0
-

Zdravím
Zajímal aby mne jedna věc, v zájmu zkrácení výsledného kodu aplikace bych potřeboval zjistit, jak předávat parametry mezi dvěma metodami v různých třídách.
Současný kód mi vypíše error:
No overload for method 'NajdiPrvek' takes '0' arguments ve tride Program
Věděl by někdo, jak předávat správně tyto parametry?

V třídě Program a mainu mám omáčku:
public void Main(string[] args)

        {

Engine akce = new Engine();//Vytvarime odkaz na tridu Engine

Console.WriteLine("Zadej hodnoty, ktere maji byt serazeny a stiskni enter");
Console.WriteLine("Pozn. Hodnoty oddeluj mezernikem");
string[]cisla_string = Console.ReadLine().Split(' ');//Nacteni hodnot do pole,rozdelit do jedn. indexu napr mezerou
int[] cisla_int = new int[cisla_string.Length];
for (int i = 0; i < cisla_string.Length; i++)
{ cisla_int[i] = Int32.Parse(cisla_string[i]); }
Console.WriteLine("Ktere cislo chces vyhledat?");
akce.NajdiPrvek();

}

A v třídě Engine mám
        public void NajdiPrvek(Array cisla_int, Object hledane_int)

{
//prvni parametr je pole ve kterem se ma hledat
//a druhy hledany objekt
int lIndex = Array.BinarySearch(cisla_int, hledane_int);
if (lIndex == 0)
Console.WriteLine("Prvek nebyl v poli nalezen");
else
Console.WriteLine("Prvek {0} se v poli nachazi na indexu {1}", hledane_int, lIndex);
}

Nahlásit jako SPAM
IP: 89.24.5.–
Japo0
Návštěvník
19. 11. 2008   #2
-
0
-

Místo akce.NajdiPrvek(); napiš akce.NajdiPrvek(cisla_int, hledané číslo);, takto se totiž předávají parametry.

Ještě ti tam chybí načtení hledaného čísla.

Nahlásit jako SPAM
IP: 90.176.243.–
Santas0
Věrný člen
19. 11. 2008   #3
-
0
-

Prese ako pise Japo, nezadavas parametre pre metodu NajdiPrvek

Nahlásit jako SPAM
IP: 84.245.64.–
http://psandtner.sk/blog
Japo0
Návštěvník
19. 11. 2008   #4
-
0
-

Jinak bych doporučil přečíst nějaký tutoriál nebo knížku o C#, tohle je poměrně zásadní věc (metody a jejich parametry).

Nahlásit jako SPAM
IP: 90.176.243.–
JiriVavru0
Návštěvník
19. 11. 2008   #5
-
0
-

To znamená, že je budu zadávat na dvou místech? V místě kde metodu volám a v místě kde je volaná?
čili takto:

MAIN

 Console.WriteLine("Ktere cislo chces vyhledat?");

string hledane_string = Console.ReadLine();
int hledane_int = Int32.Parse(hledane_string);
akce.NajdiPrvek(cisla_int,hledane_int);

ENGINE
 public void NajdiPrvek(cisla_int,hledane_int)

{
//prvni parametr je pole ve kterem se ma hledat
//a druhy hledany objekt
int lIndex = Array.BinarySearch(cisla_int, hledane_int);
if (lIndex == 0)
Console.WriteLine("Prvek nebyl v poli nalezen");
else
Console.WriteLine("Prvek {0} se v poli nachazi na indexu {1}", hledane_int, lIndex);
}

Nahlásit jako SPAM
IP: 89.24.5.–
JiriVavru0
Návštěvník
19. 11. 2008   #6
-
0
-

Knihu čtu, pouze jsem si navykl psát většinu kódu do MAINU a teď si to musím odvyknout.

Předchozí příspěvek neberte v potaz, již jsem to vyřešil..

Děkuji za radu(y).

Nahlásit jako SPAM
IP: 89.24.5.–
19. 11. 2008   #7
-
0
-

Nezadávaš je na dvou místech, jen na jednom.

akce.NajdiPrvek(cisla_int,hledane_int);

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
JiriVavru0
Návštěvník
19. 11. 2008   #8
-
0
-

Prave ze musi byt definovany i tride Engine:

 public void NajdiPrvek(Array cisla_int,int hledane_int)

jiinak to nejede..

Nahlásit jako SPAM
IP: 89.24.5.–
19. 11. 2008   #9
-
0
-

To JiriVavru : Ano, tam deklaruješ metodu a tedy i to, jaké má mít parametry, ale k jejich zadávání tam nedochází.

Nahlásit jako SPAM
IP: 84.21.124.–
Dušan Janošík | web: djanosik.cz, @djanosik
JiriVavru0
Návštěvník
19. 11. 2008   #10
-
0
-

Pak ale ještě dost dobře nerozumím tomu, když volám metodu

 int[] cisla_int = new int[cisla_string.Length];


akce.Vypis_sest(cisla_int);

a volaná metoda vypadá takto:

        public void Vypis_sest(Array cisla_int)//Metoda pro sestupny vypis hodnot pole.

{
Array.Reverse(cisla_int);
for (int i = 0; i < cisla_int.Length; i++)
Console.WriteLine(cisla_int[i]);
}


Tak obdržím hlášku:
Cannot apply indexing with [] to an expression of type 'System.Array'

A já netuším jak to správně aplikovat, zkoušel protože proměnná i je vlastně definována v poli cisla_int.

Nahlásit jako SPAM
IP: 89.24.5.–
Japo0
Návštěvník
19. 11. 2008   #11
-
0
-

Koukám, že předáváš obecné pole pomocí datového typu Array. Pokud ale nepotřebuješ metodě předat někdy číselné a jindy zase řetězcové pole, je lepší zadat přímo konkrétní typ pole. Nadeklaruješ parametr stejně jako deklaruješ pole v metodě Main.

public void Vypis_sest(int[] cisla_int)


Mimochodem, proměnná i není a ani nemůže být deklarovaná v jakémkoliv poli.

Nahlásit jako SPAM
IP: 90.176.243.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý