Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java - nejlepší algoritmus pro porovnání tří prvků.

Dobrý den,

Má 3 comboboxy, v každém z nich mám na výběr 4 barvy.

Jenže chci, aby každý měl svoji vlastní barvu - každá za 4 barev by byla vybrána pouze jednou.

Takže při každé změně potřebuji srovnat všechny 3 comboboxy.

Pomocí metody getSelectedIndex() porovnám, jestli se shoduje 1. s 2., 1. s 3. a 2. s 3.

Tento způsob je logický a srozumitelný, ale připadne mi zbytečně složitý.

Napadl mě tenhle algoritmus.

int color_value[] = new int[3];
color_value[0] = combo1.getSelectedIndex();
color_value[1] = combo2.getSelectedIndex();
color_value[2] = combo3.getSelectedIndex();
java.util.Arrays.sort(color_value);
if (color_value[0] != color_value[1] && color_value[1] != color_value[2]) {
...
}

Vytvořím pole, do něj naházím všechny 3 hodnoty, pole seřadím a teď mi stačí pouze srovnat 1. s 2. a 2. s 3.

Ale potřebuji vědět, jestli neexistuje nějaký lepší a hlavně jednodušší algoritmus.

Předem díky.

Předmět Autor Datum
Určitě ten původní způsob.
Wikan 02.02.2017 20:55
Wikan
Hod to do Setu a kontroluj jestli size je 3...
MaSo 02.02.2017 20:57
MaSo
Cože? Nechápu jak to myslíš?
MichalDM 02.02.2017 22:07
MichalDM
Set<Interger> indexes = new HashSet<>(); indexes.add(combo1.getSelectedIndex()) indexes.add(combo2.g…
MaSo 03.02.2017 09:17
MaSo
V prvním způsobu jenom třikrát porovnáváš, v druhém musíš seřadit pole a ušetří to jen jedno porovná…
Potkan007 02.02.2017 20:57
Potkan007
Pomocí metody getSelectedIndex() porovnám, jestli se shoduje 1. s 2., 1. s 3. a 2. s 3. Stačí porov…
hynajs 03.02.2017 09:21
hynajs
1 = A 2 = B 3 = A 1. a 2.: A != B => OK 2. a 3.: B != A => OK ale: 1. a 3.: A == A => !OK
Wikan 03.02.2017 09:49
Wikan
To jsem psal ale o rovnosti. Nerovnost ovšem není tranzitivní, jak jsi správně předvedl. Na tazatelů…
hynajs 03.02.2017 09:53
hynajs
Jenže chci, aby každý měl svoji vlastní barvu - každá za 4 barev by byla vybrána pouze jednou.
Wikan 03.02.2017 09:57
Wikan
Aha, tuto větu jsem jaksi zasklil, to je pravda.
hynajs 03.02.2017 10:00
hynajs
Díky za snahu, ale neřešte to, lepší algoritmus než ty tři podmínky asi neexistuje. poslední
MichalDM 24.02.2017 10:52
MichalDM
Set<Interger> indexes = new HashSet<>();
indexes.add(combo1.getSelectedIndex())
indexes.add(combo2.getSelectedIndex())
indexes.add(combo3.getSelectedIndex())

if (indexes.size() == 3) {
  // kazda barva jina
}

ale s ifama je to lepsi, tohle je uz kapku overthinking (pro 3 comba), pro deset uz bych to tak asi udelal...

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