TlačiťTlačiť Slovenčina English Hľadať RSS

© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 25. 4. 2024.

Stránka sa načítava, prosím čakajte…

Dátum: 1. 3. 2013, pred viacerými rokmi, aktualizované: 30. 7. 2020, pred štyrmi rokmi

Zadanie

  • Definujte celočíselný zoznam.
  • Vložte do zoznamu najmenej desať náhodných prvkov.
  • Naprogramujte vlastnú metódu, ktorá vymení ľubovoľné dva prvky v zozname. Metóda bude prijímať dva argumenty určujúce pozície (indexy) prvkov určených na výmenu: vymeň(i, j) – to znamená, že nesmiete použiť a musíte ignorovať jestvujúcu metódu Zoznam.vymeň. otvárané v novom okne
(obvykle ide o externý odkaz)

Riešenie

Definícia celočíselného zoznamu:

~

private Zoznam<Integer> zoznam = new Zoznam<Integer>();

Vloženie desiatich náhodných prvkov do zoznamu:

~

for (int i = 0; i < 10; ++i)
	zoznam.pridaj((int)Svet.náhodnéCeléČíslo(-50, 50));

Metóda vymeň(i, j):

~

public void vymeň(int i, int j)
{
	int c = zoznam.daj(i);
	zoznam.prepíš(i, zoznam.daj(j));
	zoznam.prepíš(j, c);
}

Test metódy (vypísanie zoznamu pred výmenou, realizácia výmeny a vypísanie zoznamu po výmene):

~

Svet.vypíšRiadok(zoznam);
vymeň(2, 7);
Svet.vypíšRiadok(zoznam);

Zlúčenie všetkých častí riešenia do jedného zdrojového kódu:

~

import knižnica.*;

public class Vymeň extends GRobot
{
	private Zoznam<Integer> zoznam = new Zoznam<Integer>();
	{
		for (int i = 0; i < 10; ++i)
			zoznam.pridaj((int)Svet.náhodnéCeléČíslo(-50, 50));
	}

	private Vymeň()
	{
		Svet.vypíšRiadok(zoznam);
		vymeň(2, 7);
		Svet.vypíšRiadok(zoznam);
	}

	public void vymeň(int i, int j)
	{
		int c = zoznam.daj(i);
		zoznam.prepíš(i, zoznam.daj(j));
		zoznam.prepíš(j, c);
	}

	public static void main(String[] args)
	{
		new Vymeň();
	}
}

Poznámky:

  1. Naplnenie zoznamu je v tomto príklade umiestnené v takzvanom anonymnom bloku. Ten je síce vizuálne spojený s definíciou zoznamu, ale v skutočnosti tvoria tieto dve časti zdrojového kódu dva samostatné bloky. Definícia je ukončená bodkočiarkou a anonymný blok by mohol byť umiestnený kdekoľvek v tele triedy – medzi jej metódami. Anonymné bloky sú vykonané počas inicializácie triedy. Ak nie sú statické (presne tento prípad), tak je to pred vykonaním tela konštruktora. Statické bloky sú vykonané pred prvým použitím ľubovoľného prvku triedy.
  2. Na kvalitné otestovanie akejkoľvek časti kódu je potrebné vykonať viac testov s rôznymi hodnotami. V tomto príklade sme sa spoľahli na to, že je príliš jednoduchý, ale keby sa v zozname náhodne vygenerovali rovnaké hodnoty na pozíciách s indexmi dva a sedem, tak by sme výsledok výmeny nevideli a museli by sme program spustiť ešte raz.