Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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. nový
Petr.Pa 14.08.2016 22:47
Petr.Pa
Vždyť tam žádné pole nepředáváš. nový
Wikan 14.08.2016 23:01
Wikan
Právě nevím, co mám do těch závorek napsat, aby to fungovalo. nový
Petr.Pa 14.08.2016 23:05
Petr.Pa
Máš tam napsat to své pole. nový
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.… nový
Petr.Pa 14.08.2016 23:10
Petr.Pa
A v každé další, do které to takhle předáš. nový
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… nový
Petr.Pa 14.08.2016 23:24
Petr.Pa
Mícháš tam statické a nestatické metody. nový
Wikan 15.08.2016 07:21
Wikan
Takhle vypdají ty metody: static void VypsatDataZPole(string[][] pole ) { for (int i = 0; i < pole.… nový
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… nový
MM.. 15.08.2016 12:56
MM..
Na začátku programu do class jsem si definoval: private string[][] pole = new string[3][]; Pak v… nový
Petr.Pa 15.08.2016 13:03
Petr.Pa
Do jakeho class? Tak to pole daj do funkcie ako parameter. nový
MM.. 15.08.2016 13:11
MM..
static void NovyVypis(string[][] pole) // aj sem to predas ako parameter { Console.Clear(); VypsatDa… nový
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… nový
Petr.Pa 15.08.2016 13:40
Petr.Pa
Že ty tu metodu NovyVypis zase voláš bez parametru? nový
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);… nový
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… nový
Wikan 15.08.2016 14:35
Wikan
To bude asi tym pole.Lenght, proste zo statickej metody nemozes zas volat nejake metody objektu. Ina… nový
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… nový
MM.. 15.08.2016 14:34
MM..
Tak tady je cast programu (resp. cely) kde mam problem using System; using System.Collections.Gener… nový
Petr.Pa 15.08.2016 15:12
Petr.Pa
Mícháš tam statický a nestatický přístup. nový
Wikan 15.08.2016 15:14
Wikan
OK, můžeš být konkrétnější pls? nový
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… nový
MM.. 15.08.2016 15:35
MM..
Alebo: static void ZapsatHodnotu(string[][] pole) ... //zmazat string[][] pole = new string[3][]; ..… nový
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… nový
Petr.Pa 15.08.2016 23:15
Petr.Pa
Tak ji vytvoř a vykašli se v ní na statické metody. nový
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… nový
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. nový
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..

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