Gyakorlati alapok
2 tömb metszete
Az unió során 2 vagy több halmaz úgy képez egy új halmazt, hogy az így létrejövő halmaz az eredeti halmazok összes elemét tartalmazza (de csak egyszer) és más elemet ne tartalmazzon. A metszet pontosan ennek ellentéte: a közös elemeket keressük (szintén egyszeresen).
Az alábbi példakódban az átláthatóság kedvéért 2 db fix int értékekkel feltöltött tömbből indulunk ki:
int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11, 13};
int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10, 13};
A tomb1 és tomb2 közös részei a 9 és 13. A közös rész a tombMetszet-be kerül, amelynek méretét nem látjuk előre, de határértékei a 0 és a kisebbik tömb mérete között lehet. Mivel a 2 alaptömb mérete most azonos, legyen a méret tomb2-nyi:
int[] tombMetszet = new int[tomb2.length];
A közös elemeket csakis úgy tudjuk megtalálni, ha az alaptömbök minden egyes elemét összehasonlítjuk egymással. Ha azonosak, az elem közös rész lesz. Ehhez egymásba ágyazott (nested) for ciklusokat kell felhasználnunk:
for(int i = 0; i < tomb1.length; i++){
for(int j = 0; j < tomb2.length; j++){
if(tomb1[i] == tomb2[j]){
tombMetszet[i]
= tomb1[i];
}
}
}
Nézzük meg futtatható Java-kódos változatot:
public class Main {
public static void main(String[] args) {
int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11, 13};
int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10, 13};
int[] tombMetszet = new int[tomb2.length];
for(int i = 0; i < tomb1.length; i++){
for(int j = 0; j < tomb2.length;
j++){
if(tomb1[i]
== tomb2[j]){
tombMetszet[i] = tomb1[i];
}
}
}
for(int i = 0; i < tombMetszet.length; i++){
System.out.print(tombMetszet[i] + "
");
}
}
}
Végeredmény:
0 0 0 0 9 0 13
Ha zavar minket a sok 0, könnyen eltüntethetjük őket:
public class Main {
public static void main(String[] args) {
int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11, 13};
int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10, 13};
int[] tombMetszet = new int[tomb2.length];
for(int i = 0; i < tomb1.length; i++){
for(int j = 0; j < tomb2.length;
j++){
if(tomb1[i]
== tomb2[j]){
tombMetszet[i] = tomb1[i];
}
}
}
for(int i = 0; i < tombMetszet.length; i++){
if(tombMetszet[i] != 0){
System.out.print(tombMetszet[i] + " ");
}
}
}
}
Végeredmény:
9 13
Vagy:
public class Main {
public static void main(String[] args) {
int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11, 13};
int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10, 13};
int[] tombMetszet = new int[tomb2.length];
for(int i = 0; i < tomb1.length; i++){
for(int j = 0; j < tomb2.length;
j++){
if(tomb1[i]
== tomb2[j]){
tombMetszet[i] = tomb1[i];
System.out.print(tombMetszet[i] + " ");
}
}
}
}
}
Végeredmény:
9 13