Doppelte For Schleife / Array

darkcloud

Mitglied
Guten Tag,

meine Aufgabenstellung lautet zu überprüfen ob die Werte im folgenden Array paarweise verschieden sind:

int[] arr = { 5, 6, 7, 10, 13, 24, 233 }; (sprich insgesamt 7 Werte)

Ich habe mir gedacht ich bilde eine doppelte for Schleife um das ganze Array mal zu durchlaufen und definiere einen Kontrollwert. Sollte es 2 gleiche Zahlen im Array geben erhöhe ich den Kontrollwertt um 1, sprich bleibt der Kontrollwert bei 0 ist das Array paarweise verschieden, ist es >=1 dann halt nicht. Der Code sieht folgendermaßen aus:

Java:
int kontrollwert= 0;



for (int b=0; b<arr.length;b++) {

            for (int c=b+1; c<arr.length;c++) {                 

                if (arr==arr[c]) {

                    kontrollwert +=1;

                }

            }

        }



System.out.println(kontrollwert);

Der Gedankengang dahinter war:

Zuerst prüfe ich a[0]==a[0+1=1],a[0]==a[0+1+1=2], etc., danach a[1]==a[1+1=2],a[1]==a[1+1+1=3],etc.

Deshalb habe ich auch c=b+1 definiert um die Prüfung des Arraywertes mit sich selber sowie doppelte Prüfungen (also quasi spiegelverkehrte) zu vermeiden. Wenn ich das doppelte Schleifenprinzip richtig verstanden habe würde dies bedeuten, dass für a[0] quasi 6 mal geprüft wird, für a[1) dann 5 mal, usw. Dies macht ja auch für alle Arraywerte Sinn und die Aufgabenstellung konnte ich auch lösen. Nur meine Frage bezieht sich auf folgendes:

Wenn die äußere(!) Schleife bei a[6] angelangt ist müsste doch eigentlich a[6]==a[6+1=7] geprüft werden, was dann schlussendlich einen Error ausgeben müsste da a[7] ja nicht existiert. Wird dies lediglich nicht durchgeführt weil c<arr.length() definiert ist, die Bedingung der 2. Schleife also quasi "stärker" ist als die definierte Zählvariable (c=b+1)?

Vielen Dank
 
Zuletzt bearbeitet:
Wird dies lediglich nicht durchgeführt weil c<arr.length() definiert ist, die Bedingung der 2. Schleife also quasi "stärker" ist als die definierte Zählvariable (c=b+1)?
Das ist zwar eine seltsame Sichtweise, aber ja. Letztlich ist es einfach so, dass die Bedingung der inneren for-Schleife nur erfüllt ist, wenn b+1 < b.length gilt - und nur, wenn die Bedingung erfüllt ist, wird der Schleifenrumpf ausgeführt.

Du kannst die for-Schleifen auch als while-Schleifen schreiben, dann wird es evtl. deutlicher.
 
Wird dies lediglich nicht durchgeführt weil c<arr.length() definiert ist, die Bedingung der 2. Schleife also quasi "stärker" ist als die definierte Zählvariable (c=b+1)?
Ich würde nicht von einer stärkeren Bedingung sprechen. Der Indexzugriff erfolgt in der inneren Schleife. Die Variable c erreicht hier zwar den Wert 7. Der Zugriff auf das Array erfolgt aber nicht mehr da die 2te Bedingung nicht mehr erfüllt --> kein Fehler.
Die äußere Schleife sollte aber trotzdem um eins reduziert werden.
1) Unnötiger Durchlauf
2) Bessere Optik
Außerdem finde ich deine Idee von einer Kontrollvariable nicht gut, da du ja nicht die doppelten Einträge zählen sollst, sondern nur testen sollst ob alle Einträge verschieden sind. Eine boolean wertige Funktion wäre da eine Idee.
Java:
public static boolean checkForUniqueEntries(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int ii = i + 1; ii < arr.length; ii++) {
                ..
            }
        }
        return true;
    }
 
Stimmt den boolean könnte man auch nutzen, da mir die Funktionsweise allerdings noch nicht so vertraut war, hatte ich mir einem alternativen Lösungsansatz gesucht 😄

Vielen Dank für eure Hilfe!
 

Neue Themen


Zurück
Oben