[java] prohledavani pole

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod teutates 7. 10. 2011 12:11

ahoj. Mam dvourozmerne pole a potreboval bych poradit jak udelat podminku pokud se napr vsechny prvky z a[2][s] rovnaji cislu dve. dekuji za odpoved
teutates
Junior

Odeslat příspěvekod Wikan 7. 10. 2011 12:14

Musíš všechny dotčené prvky projít cyklem.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod teutates 7. 10. 2011 12:21

mam to zhruba nejak takhle. ale akce se spusti pokud je kterakoliv bunka rovna 2. jak toto upravit?

Kód: Vybrat vše
for(int s=0;s<10;s++)
        {
            for(int r=0;r<12;r++)
            {
                if(get(s, r) == 2)
                {   
                   akce
                }
             }
         }
teutates
Junior

Odeslat příspěvekod pucmeloudek 7. 10. 2011 12:43

ze si udelas pomocnou logickou promennou, zinicializujes ji na true, projdes prvky, ktere maji byt vsechny 2, pokud je nektery z nich != 2, tak ji prehodis na false, a na zaver, po projiti vsech, ktere maji 2, otestujes, jestli zustala na true. A jestli jo, tak provedes akci.
pucmeloudek
Junior

Odeslat příspěvekod Wikan 7. 10. 2011 12:48

Pokud ji přehodíš na false tak je vhodné cyklus ukončit. Bude to rychlejší.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod pucmeloudek 7. 10. 2011 12:51

Spravne. Ale programatorsti puriste brojici proti prikazu "break" se budou zlobit :). A pridavani podminky na onu promennou do podminky cyklu je zas ponekud vykonove kontraprodutivni a zneprehlednujici.
Nu proste jsem nechtel chudinku tazatele pretezovat :)

-- 7. 10. 2011 14:04 --

hmh, a kdyz o tom tak premyslim, tak mozna s labelovanym breakem by clovek ani tu promennou nepotreboval... Ale asi prave tazatel nebude tim pravym, ktery by mel o tomto zpusobu premyslet ;)
pucmeloudek
Junior

Odeslat příspěvekod koenzim 7. 10. 2011 14:01

Da sa to aj jednoducho: spolu s nastavenim pomocnej logickej premennej na false nastavim aj r=12.
Nejak takto:
Kód: Vybrat vše
for(int s=0;s<10;s++)
        {
            boolean temp = true;
            for(int r=0;r<12;r++)
            {
                if(get(s, r) != 2){
                   temp = false;
                   r=12;
                }
             }
             if (temp){
                  akce;
             }
         }
koenzim
Junior
Uživatelský avatar

Odeslat příspěvekod Nargon 7. 10. 2011 14:09

Ja ti to doporucuju napsat do nejake funkce, ktera ma vracet typ boolean
Kód: Vybrat vše
boolean test(int[][] pole)
{
    for (int i = 0; i<pole[2].length; i++)
    {
        if (pole[2][i] != 2) return false;
    }
    return true;
}
// ... a potom jak s tim pracovat v kodu:
if (test(pole)) akce();

Pak tam zadnej break neni a je to i rychle vykonane. A akce se spusti jen kdyz jsou v tom poli na tom jednom radku (nebo sloupci, zalezi jak cislujes) same 2ky.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod pucmeloudek 7. 10. 2011 14:17

koenzim píše:Da sa to aj jednoducho: spolu s nastavenim pomocnej logickej premennej na false nastavim aj r=12.

fuuuuuuuj!!!!!! zapis do ridici promenny cyklu for. Proti tomu je break nejciststi programatorska technika. (aneb kdyby jako driv lidi zacinali misto techhle blbejch jazyku s pascalem, tak je to ani ve snu nenapadne)
pucmeloudek
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků