Předmět Autor Datum
C# nemá globální proměnné. Pokud chceš mít něco přístupné všude, tak to můžeš mít uložené v nějaké t…
Wikan 14.08.2016 09:55
Wikan
Mohl bych poprosit o zapsání příkadu?
Petr.Pa 14.08.2016 09:59
Petr.Pa
Čeho konkrétně?
Wikan 14.08.2016 10:00
Wikan
Toho, jak by měla vypadat ta třída, kde budu mít uloženou tu proměnnou, ke které budu moct všude při…
Petr.Pa 14.08.2016 10:05
Petr.Pa
Úplně stejně jako jakákoliv jiná třída. public class GlobalSettings { public string StringSetting {…
Wikan 14.08.2016 10:08
Wikan
Ok, děkuji.
Petr.Pa 14.08.2016 10:10
Petr.Pa
Ještě bych potřeboval: V jedné metodě si vytvořtím pole (pole polí). Potřebuji ho ale použít v dalš…
Petr.Pa 14.08.2016 12:40
Petr.Pa
Treba si muzes to pole predavat jako parametr tech metod.
MaSo 14.08.2016 13:56
MaSo
OK, ale jak to tam mam pls zapsat, když je to pole polí?
Petr.Pa 14.08.2016 16:39
Petr.Pa
int[][] polePoli;
Wikan 14.08.2016 16:40
Wikan
Takto to mám deklarované: string[][] pole = new string[3][]; pole[0] = new string[] { x }; pole[1]…
Petr.Pa 14.08.2016 21:23
Petr.Pa
No a v čem je problém? void Metoda(string[][] pole) { ... }
Wikan 14.08.2016 21:31
Wikan
Mám to přesně takhle, ale když zavolám tu metodu, napíše to: There is no argument given that corre…
Petr.Pa 14.08.2016 22:29
Petr.Pa
Ukaž, co přesně máš.
Wikan 14.08.2016 22:32
Wikan
Nelze zavolat tuto metodu. static void VypsatDataZPole(string[][] pole) { for (int i = 0; i < pocet…
Petr.Pa 14.08.2016 22:36
Petr.Pa
No a jak ji voláš?
Wikan 14.08.2016 22:38
Wikan
VypsatDataZPole(); Asi je to špatně ale fakt sorry.
Petr.Pa 14.08.2016 22:47
Petr.Pa
Vždyť tam žádné pole nepředáváš.
Wikan 14.08.2016 23:01
Wikan
Právě nevím, co mám do těch závorek napsat, aby to fungovalo.
Petr.Pa 14.08.2016 23:05
Petr.Pa
Máš tam napsat to své pole.
Wikan 14.08.2016 23:07
Wikan
Když to napíšu takhle, tak to funguje, ale pouze v rámci metody, ve které bylo to pole deklarováno.…
Petr.Pa 14.08.2016 23:10
Petr.Pa
A v každé další, do které to takhle předáš.
Wikan 14.08.2016 23:14
Wikan
No když to napíšu do jiné, tak to podtrhne a ta hláška zní: an object reference is required for the…
Petr.Pa 14.08.2016 23:24
Petr.Pa
Mícháš tam statické a nestatické metody.
Wikan 15.08.2016 07:21
Wikan
Takhle vypdají ty metody: static void VypsatDataZPole(string[][] pole ) { for (int i = 0; i < pole.…
Petr.Pa 15.08.2016 12:50
Petr.Pa
A kde mas to pole??? Ziadne tam nevidim. Vies co, zacni radsej uplne inac. Normalne mas mat data uz…
MM.. 15.08.2016 12:56
MM..
Na začátku programu do class jsem si definoval: private string[][] pole = new string[3][]; Pak v…
Petr.Pa 15.08.2016 13:03
Petr.Pa
Do jakeho class? Tak to pole daj do funkcie ako parameter.
MM.. 15.08.2016 13:11
MM..
static void NovyVypis(string[][] pole) // aj sem to predas ako parameter { Console.Clear(); VypsatDa…
MM.. 15.08.2016 13:13
MM..
Mám to všechno ve stejne class. Mam to presne jako jsi mi to napsal, ale nemuzu tu metodu zavolat op…
Petr.Pa 15.08.2016 13:40
Petr.Pa
Že ty tu metodu NovyVypis zase voláš bez parametru?
Wikan 15.08.2016 13:52
Wikan
Ne, volam ji: NovyVypis(pole); Problém je, že nejde zavolat metoda ve které volám NovyVypis(pole);…
Petr.Pa 15.08.2016 14:22
Petr.Pa
Nejlepší by bylo se na statické metody vykašlat - samozřejmě pokud je vyloženě nepotřebuješ. Pak nem…
Wikan 15.08.2016 14:35
Wikan
To bude asi tym pole.Lenght, proste zo statickej metody nemozes zas volat nejake metody objektu. Ina…
MM.. 15.08.2016 14:40
MM..
Tak si to napsal blbo, ja ti na to nevidim. Ked to je vsetko v stejnom class, tak nerob ziadne stati…
MM.. 15.08.2016 14:34
MM..
Tak tady je cast programu (resp. cely) kde mam problem using System; using System.Collections.Gener…
Petr.Pa 15.08.2016 15:12
Petr.Pa
Mícháš tam statický a nestatický přístup.
Wikan 15.08.2016 15:14
Wikan
OK, můžeš být konkrétnější pls?
Petr.Pa 15.08.2016 15:15
Petr.Pa
Jezisimaria. Jasne ze z main to nemozes zavolat, ked si to pole nevytvoril v main ale v nejakej stat…
MM.. 15.08.2016 15:35
MM..
Alebo: static void ZapsatHodnotu(string[][] pole) ... //zmazat string[][] pole = new string[3][]; ..…
MM.. 15.08.2016 15:43
MM..
Tak takto presne jsem to udelal, ale stejne pri zavolani v Mainu je to pole v zavorce podtrzene a pi…
Petr.Pa 15.08.2016 23:15
Petr.Pa
Tak ji vytvoř a vykašli se v ní na statické metody.
Wikan 16.08.2016 00:17
Wikan
Když jsem teda ostranil ze všech metod to static, tak to sice pomohlo, ale v Mainu jsem nemohl zavol…
Petr.Pa 18.08.2016 18:43
Petr.Pa
Přesunout všechny metody kromě Main do jiné třídy. V Main vytvořit instanci té třídy.
Wikan 18.08.2016 18:47
Wikan
Uz som ti to pisal http://pc.poradna.net/q/view/1629258-c-promenna-po le-platne-v-celem-programu?pag… poslední
MM.. 18.08.2016 19:17
MM..
Pokud jsou ty metody v rámci jedné třídy, tak si to v některých případech můžeš uložit do nějakého f…
Wikan 14.08.2016 15:03
Wikan
Celé by to malo byť o OOP... Ale načo si niečo naštudovať (základy), precvičiť sa a až potom tvoriť…
pme 14.08.2016 15:06
pme

Takhle vypdají ty metody:

static void VypsatDataZPole(string[][] pole )
        {
            for (int i = 0; i < pole.Lenght; i++)
            {
                Console.WriteLine(pole[i][0]);

            }

        }
        

        static void NovyVypis()
        {
            Console.Clear();

            VypsatDataZPole();
            Console.WriteLine("");

            Console.ReadLine();
        }

Problém je u zavolání metody VypsatDataZPole v metodě NovyVypis.

A kde mas to pole??? Ziadne tam nevidim.

Vies co, zacni radsej uplne inac. Normalne mas mat data uzavrete v nejakom objekte, preto sa to vola OOP. Ked to su nejake data o figurkach na sachovnici, tak si urobim objekt (treidu) sachova_hra, v nej bude to pole poli, a ta trieda mi bude poskytovat metody ktore s tym pracuju. Volas to potom tak ze najprv si vytvoris objekt triedy sachovahra, nazvem ho hra1, a potom zavolam metody tej triedy, napr. hra1.InicializujPole() alebo hra1.PosunFigurku(starapozicia, novapozicia), alebo hra1.DajPolozkuPola(pozicia), atd.
Vyhoda takehoto pristupu je 1) neni to totalne dementne domotane nefunkcne jak to mas teraz, 2) mozes si tych hier vytvorit aj 50, a stejne funkcie budu obsluhovat 50 hier, bez toho aby sa akokolvek ovplyvnovali.
Prestan sa snazit pouzivat globalne premenne a staticke metody. Ked uz tak v hlavnom objekte programu si mozes drzat nejake dalsie objekty, ale ani to neni dobry pristup.

static void NovyVypis(string[][] pole) // aj sem to predas ako parameter
        {
            Console.Clear();

            VypsatDataZPole(pole); // predas ten parameter dalej
            Console.WriteLine("");

            Console.ReadLine();
        }

logicky. Ak nie si v tej treide v ktorej si to vytvaral.

Ak to je vsetko v tej stejnej triede, tak nepotrbujes ziadne parametre, ani static metody.

To bude asi tym pole.Lenght, proste zo statickej metody nemozes zas volat nejake metody objektu. Inac tam musis dat referenciu na objekt ako parameter. Ale zhlavy neviem nevidim ti na ten maglajz co sa tam snazis robit a ani na ktorom riadku ti to pise. A ani nerobim aktivne s C#, len ti vysvetlujem zaklady.

Tak tady je cast programu (resp. cely) kde mam problem

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.IO;

namespace Databaze
{
    class Databaze

    {
        private static int pocet;
        private string[][] pole = new string[3][];


        static void ZapsatHodnotu()
        {
            Console.Clear();

            Console.Write("Zadej hodnotu1: ");
            string hodnota1 = Console.ReadLine();
            Console.Write("Zadej hodnotu2: ");
            string hodnota2 = Console.ReadLine();
            Console.Write("Zadej hodnotu3: ");
            string hodnota3 = Console.ReadLine();


            string[][] pole = new string[3][];

            pole[0] = new string[] { hodnota1 };
            pole[1] = new string[] { hodnota2 };
            pole[2] = new string[] { hodnota3 };

            pocet = pole.Length;


            Console.WriteLine(pole[0][0]);
            Console.WriteLine(pole[1][0]);
            Console.WriteLine(pole[2][0]);


            VypsatDataZPole(pole);

            Thread.Sleep(5000);

        }

        static void VypsatDataZPole(string[][] pole)
        {
            for (int i = 0; i < pocet; i++)
            {
                Console.WriteLine(pole[i][0]);
            }
        }


        static void NovyVypis(string[][] pole)
        {
            Console.Clear();

            VypsatDataZPole(pole);
            Console.WriteLine("");
            Console.ReadLine();
        }



        static void Main(string[] args)
        {
            ZapsatHodnotu();
            VypsatDataZPole(pole);

            Console.ReadKey();

        }
    }
}


Napriklad v Main nemuzu zavolat metodu VypsatDataZPole.
Takto to bude prehlednejsi, dekuji za rady.

Jezisimaria. Jasne ze z main to nemozes zavolat, ked si to pole nevytvoril v main ale v nejakej statickej metode. Mas tam uplny maglajz.
Vseobecne, zo vsade vyhod slovo static, a aj tie parametre funkcii (nepotrebujes ich potom), a potom to pojde, (netestoval som to ale), bude to normalny member triedy, to pole, a nestaticke metody danej triedy ho mozu normalne pouzivat.
A vyhod aj to new string[3][] u deklaracie toho pole, robis to predsa znova v metode.

P.S. alebo si urob novu triedu
class NeviemOOP
{
tu si daj to pole aj vsetky "globalne" premenne aj vsetky metody, bez slova static!
}

a potom v main urobis
NeviemOOP jedinyobjektvprograme = new NeviemOOP;
jedinyobjektvprograme.NaplnPole();
jedinyobjektvprograme.VypisPole();
jedinyobjektvprograme.DoplnPole();
apod. :-)

Zpět do poradny Odpovědět na původní otázku Nahoru