Array sortieren, prüfen, zusammenfügen

@rhô
Ist neh interessante Lösung... Muss ich mir mal genauer angucken aber für die Schule zu ungeeignet... Meine Lehrerin meint halt immer ich soll Sachen benutzen die meine Mitschüler auch "verstehen"... Naja und ich denk für die ist das einfach zu hoch...

Nebenbei, kann mir wer sagen wieso der nur 1.0 aus gibt... und falls wer ne Lösung weiß wie man das erfolgreich umändern kann sodas es funktioniert und nicht zu hoch ist? ^^
Java:
public class Mischen {

	public static void main(String[] args) {
	       
        double[] menge1 = {1.0,3.0,5.0,6.0,9.0};
        double[] menge2 = {2.0,3.0,5.0,7.0,8.0,9.0,9.0};
        int zaehler1 = 0;
        int zaehler2 = 0;
       
        while(zaehler1 < menge2.length){
            zaehler1++;
        }
 
        for(int i = 0; i < menge1.length; i++){
            for(int j = 0; j < menge2.length; j++){
                if(menge1[i] == menge2[j]){
                    zaehler2++;
                }
            }
        }
 
        double[] mengeGe = new double[menge1.length + (zaehler1 - zaehler2)];
        
        for(int i = 0; i < mengeGe.length; i++){
        	mengeGe[i] = 0;
        }
        
        for(int i = 0; i < mengeGe.length; i++){
        	for(int j = 0; j < menge1.length; j++){
        		if(mengeGe[i] == 0){
        			for(int k = 0; k < menge2.length; k++){
        				if(mengeGe[i] == 0){
        					if(menge1[j] < menge2[k]){
        						mengeGe[i] = menge1[j];
        					}
        					else if(menge1[j] > menge2[k]){
        						mengeGe[i] = menge2[k];
        					}
        				}
        			}
        		}
        	}
        }
        
        for(int i = 0; i < mengeGe.length; i++){
        	System.out.println(mengeGe[i]);
        }
       
	}  
}
 
Hey,
ich hab noch mal in der API nachgeschlagen. Ruf einfach Arrays.sort(menge1); Arrays.sort(menge2); auf und du hast zwei sortierte Arrays ohne GnomeSort.
Danach musst du nur noch einmal durch die Arrays um sie in dein Ergebnisarray zu schreiben wie in meinem Beispiel.

Hier nochmal der Link zur API: http://java.sun.com/javase/6/docs/api/
Einfach nach "Arrays" suchen.
 
Ahhh, neh funkt soweit nur sobald ich zahlen die höher sind als 22 eingeb funkts net... vllt irr ich mich auch grad... Eclipse hat da ein bissel rumgesponnen....
 
Stimmt nicht. Das Problem liegt bei meinem Code nicht an Zahlen wie 2.20 oder 76.0.
Das Problem hat mein Programm mit doppelten Zahlen in einem Array.

Grüße
 
Nein das kann ich natürlich nicht :)

Es gibt in der Lösung 2 Probleme:

1. Die Bestimmung der Länge des Ergebnisarrays.
Wenn in deinem 2. Array eine Zahl doppelt vorkommt und sie kommt in deinem ersten Array gar nicht vor, wird sie auch doppelt gezählt

Java:
double[] menge1 = {2.0,3.4,5.0,7.0,8.0, 10.0};
double[] menge2 = {1.1,3.0,5.0,6.0,9.0,9.0,22.6,76.0,113.0,222.0,222.0,330.0};

ergibt in der Zeile 17

Java:
double[] mengeGe = new double[menge1.length + (zaehler1 - zaehler2)];
System.out.println(menge1.length + (zaehler1 - zaehler2));
Es sind aber nur 15 unterschiedliche Werte. Die Werte 9.0 und 220.0 werden doppelt gezählt bzw. nicht als doppelte erkannt (zaehler2++)

In meinem Code gibt es an dieser Stelle Probleme:

Java:
if (menge1[zaehler1] < menge2[zaehler2]) {
	mengeGe[k] = menge1[zaehler1];
	zaehler1++;
	k++;
} else if (menge1[zaehler1] > menge2[zaehler2]) {
	mengeGe[k] = menge2[zaehler2];
	k++;
	zaehler2++;

durch die Doppelten in einem Array muss vor dem Eintragen in mengeGe[k] auch überprüft werden, ob der Vorgänger von mengeGe[k] nicht gleich ist.

Java:
while (zaehler1 < menge1.length) {
			if (menge1[zaehler1] != mengeGe[k-1]) {
				mengeGe[k] = menge1[zaehler1];
				zaehler1++;
				k++;
			} else {
				zaehler1++;
			}
}
			
while (zaehler2 < menge2.length) {
         if (menge2[zaehler2] != mengeGe[k-1]) {
                 mengeGe[k] = menge2[zaehler2];
                 zaehler2++;
                 k++;
          } else {
                zaehler2++;
          }
}
Dazu kommt, das alle übrigen Werte aus dem Größeren Array eingetragen werden müssen. Daher while und nicht if :)
Viel Spaß beim Lösen :)

Grüße
 
Zuletzt bearbeitet von einem Moderator:
Zurück