Stránka 1 z 1

Programování v Javě

Napsal: 17 lis 2014 13:20
od leni9
Ahoj,
mám za úkol udělat program, který seřadí zadané hodnoty pomocí BubbleSortu a poté projde to seřazené pole a vypíše hodnoty, které se tam opakují a kolikrát se opakují.
Řekla bych, že to mám napsané správně, ale školnímu validátoru se to pořád nelíbí.

Jde o to, že pokud mám třeba posloupnost [1, 3, 4, 5, 6, 7, 7, 8, 8, 9], mělo by mi to vypsat: "Max. pocet je 2 x 7". Mně to ovšem vypíše 2 x 8.

Tady je kus kódu, který by to měl ošéfovat. Nevíte někdo, kde by mohla být chyba?

Kód: Vybrat vše

int v = 0;           // pocet opakovani
int h = 0;          // cislo, ktere se opakuje
int pom = 0;

for (int i = 0; i < pole.length; i++) {
   for (int j = pole.length - 1; j >= 0; j--) {
      if (pole[i] == pole[j]) {
      pom++;
      }      
   }
      if (pom > v){
      v = pom;
      h = pole[i];
      pom = 0;
      }
   pom = 0;
}

Re: Programování v Javě

Napsal: 17 lis 2014 17:59
od Uziv00
Na tuhle posloupnost je 2x8 správně a mělo by být ještě 2x7. Pokud tenhle kód používáš jako rutinu pro vyhledávání, pak to máš špatně ošéfováno - výpis by měl následovat hned jak se zjistí počet opakování > 1.
nebo můžeš mít další proměnné x,y,z. Pokud bude počet opakování > 1, pak do x dáš v (počet opakování), do y h (číslo) a z inkrementuješ o 1. Celkový výsledek pak bude v poli x(), x(), z(),

Re: Programování v Javě

Napsal: 17 lis 2014 21:10
od leni9
Já vím, že je oboje správně, ale jako úkol mám zadáno, že se musí vypsat to číslo, které je nejmenší, pokud jich tam bude více. To s x, y, z nechápu :? :smile:

Re: Programování v Javě

Napsal: 17 lis 2014 21:54
od Uziv00
musí vypsat to číslo, které je nejmenší

No to jsi ale do úkolu nenapsal...:D
Tak aby bylo jasno - nečekej kód, protože my zde vaše úkoly neřešíme.
A za další, pokud má najít to nejmenší, pak dle tvého kódu je to první dvojice. A to je takový problém, když najdu první dvojici vyskočit z cyklu a zobrazit wocojde?

Re: Programování v Javě

Napsal: 18 lis 2014 17:57
od leni9
Tak nebuď hned tak nepříjemnej. ;)
Kód nečekám, jen jsem chtěla vědět, jak to mám udělat.
Jo, to asi není problém...

Re: Programování v Javě

Napsal: 18 lis 2014 18:46
od faraon
Hele Léňo, vždyť je to úplně jednoduché, prostě si tam přidej ještě dvě proměnné, například cislo a pocet, do nich si hned na začátku odlož to nejnižší číslo jaké tam máš ať se od něčeho můžeš odpíchnout. Potom projeď celé seřazené pole zdola nahoru, a spočítej každé další číslo do toho tvého h, a pokud tam bude víckrát než v těch mých dvou proměnných, tak ho tam zkopíruješ. Když bude větší číslo se stejným počtem, neobjeví se ti tam.

Mimochodem, jednopísmenné názvy proměnných jsou pěkná prasárna, to se hodí tak na indexy do smyček a nějakou velmi dočasnou lokální proměnnou, například pomocnou pro prohození dvou čísel mezi sebou, ale jinak vždy používej slovní názvy!

P.S. A tuhle znáš? :P


Re: Programování v Javě

Napsal: 19 lis 2014 11:18
od Dix
Ten kod je zbytecne slozity - dva for cykly v sobe, kdyz uz mas to pole serazene (treba tim bubble sortem). Staci ti jeden pruchod (forem), kde si budes inkrementovat pocet vyskytu dokud budes v ramci stejneho cisla. Jakmile narazis na jine cislo (nebo konec pole), tak ten aktualni pocet porovnas s maximem a pokud je vetsi, tak si ulozis nove maximum (spolu s hodnotou toho cisla) a ten citac zase vynulujes.