Elemente die in Array1 sind aus Array2 löschen

  • Themenstarter Themenstarter Lacom
  • Beginndatum Beginndatum
L

Lacom

Gast
Hi,
ich habe zwei Arrays die so aussehen:

Java:
     int[] array1 = {
        10, 20, 5, 3
    };
    int[] array2 = {
        25, 20, 3, 8
    };

Nach der aussortierung soll array2 so aussehen:
Java:
    int[] array2 = {
        25, 8
    };

Um das doppelte Element zu finden, habe ich folgendes verwendet. (Sollte doch so auch laufen, oder?)
Java:
	    for(int i=0; i < array1.length; i++) {
		    for(int b=0; b < array2.length; b++) {
				if (array1[b] == array2[i]){
				    //Element löschen
					}
				}
	    	}

Nun ist eine zusätzliche Schwierigkeit, dass die Indexe nachrücken müssen, d.h. das
Code:
array2[0] == 25 && array2[1] == 8
und NICHT
Code:
array2[0] == 25 && array2[3] == 8

Dazu habe ich bisher nur das hier gefunden:
JAVA - Element aus Array löschen > Rest nachrücken - JAVA - Club Programmiersprachen

Ich habe mir folgendes zusammen gebastelt:

Java:
    for(int b=0; b < array1.length; b++) {
	    for(int i=0; i < array2.length; i++) {
			if (array1[b] == array2[i]){
   					int index = i;
    					while(index < (array2.length-1))
    					{            	
        					array2[index] = array2[index+1];
        			        array2[array2.length-1] = 0;
        					index++;
    					}
    	                int newArray[]=new int[array2.length-1];
    					int j =0;
    					for(int c=0;c<array2.length;c++){
    					                if(array2)[c]!=0) {
    					                      newArray[j++]=array2[c];
    					                 }
    					            }
    					 array2 = newArray;
					}
				}
    		}
		}

Scheint auch soweit zu funktionieren, geht das ganze aber nicht noch etwas einfacher?
 
Wenn du asntelle von Arrays Listen benutzt könnte der code so aussehen:

Java:
public int[] sortiereAus(List<Integer> a, List<Integer> b) {
    for(Integer integer : b) {
        if(a.contains(integer))
            b.remove(integer);
    }
    return a.toArray();
}

das zurückgelieferte array enthält nun alle elemente aus b, die nicht auch in a enthalten sind
 
Dann könnte man das auch kürzer schreiben: list2.removeAll(list1); 😉

Und das mit toArray / int[] wird so auch nicht klappen
 
Du musst aber so zurückliefern:

Java:
return(b.toArray(new int[0]));

Du willst natürlich das Array haben, aus dem du gelöscht hast. Und du musst ein Array mit dem generischen Typ übergeben, in das eingefügt wird. (Bei einen zu kleinen Array wird ein neues erzeugt).
Sonst bekommst du einfach nur ein Object[] zurück. Vielleicht musst du statt int auch Integer benutzen, aber das weiß ich nicht.
 
Wenn die Arrays keine doppelten Elemente enthalten (also Mengen darstellen) und sortiert sind (sofern sie sortierbar sind), kann man sich eventuell eine Schleife sparen, aber ganz durchdacht habe ich es gerade nicht.

Ark

EDIT: Beide Arrays müssten dann natürlich auf dieselbe Weise sortiert sein.
 
Zuletzt bearbeitet:
Wenn die Arrays keine doppelten Elemente enthalten (also Mengen darstellen) und sortiert sind (sofern sie sortierbar sind), kann man sich eventuell eine Schleife sparen, aber ganz durchdacht habe ich es gerade nicht.

Ark

EDIT: Beide Arrays müssten dann natürlich auf dieselbe Weise sortiert sein.

Sortiert werden dürfen sie nicht.

Mit Arrays gibt es keine bessere Möglichkeit? Denn die Lust mich jetzt auf ArrayLists umzustellen ist eher gering, da behalte ich lieber das längere script bei 😉
 

Zurück
Oben