Zahlen mit 2 for loops suchen Google?
bei 2:37
Also es geht darum dass man ein Array hat mit zahlen, jetzt sucht man ein oder mehrere Zahlenpaare die eine Summe ergeben. Im Video sagt er, dass die einfachste Möglichkeit wäre, indem man jedes Paar vergleicht mit der Summe. Er sagt dabei dass man 2 for loops dafür verwendet. Wie kann ich mir das vorstellen? Mit dem j+1
1 Antwort
Ohne da jetzt das Video genauers verfolgt zu haben:
Mit dem j+1
sagt er das oder ist das auf der Tafel zu sehen? oder worauf beziehst du dich - denn aufgeschrieben wurde davon nichts bis ca 11:30 (zumindest beim schnellen durchskippen)
Er sagt dabei dass man 2 for loops dafür verwendet. Wie kann ich mir das vorstellen
Ziel ist es, alle möglichen Paare des Arrays zu bilden, ohne Paare doppelt zu zählen (1 + 4 soll nicht nochmal als 4 + 1 gezählt werden).
Wir iterieren also in der äußeren Schleife einmal über das Array - bis auf das letzte Element, da dies kein nachfolgendes Element hat und kein Paar bilden kann. Das ist immer das erste Element eines Paares.
Für das zweite Element: Wir möchten alle anderen nachfolgenden Elemente vergleichen. Die Elemente vor dem aktuellen Wert der äußeren Schleife können wir ignorieren, da diese ja schon durch frühere Iterationen abgearbeitet wurden und es sonst zu Doppelzählungen kommt.
Um das an dem Beispiel anzuwenden:
Array: [1, 2, 4, 4]
1. Iteration der äußeren Schleife: 1
innere Schleife nacheinander: 2, 4, 4
2. Iteration der äußeren Schleife: 2
innere Schleife nacheinander: 4, 4
3. Iteration der äußeren Schleife: 4
innere Schleife nacheinander: 4
Nach der dritten Iteration ist der Algorithmus fertig, da die letzte 4 mit niemandem sonst verglichen werden kann. Damit haben wir alle möglichen Paare des Arrays gebildet und können damit arbeiten
In Java könntest du das eben so implementieren, wenn das Array "arr" heißt:
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
// dein Code
}
}
Wenn das Array jetzt die Länge n hat, geht also die äußere Schleifenvariable i von 0 bis n-1 und die innere Schleife geht immer vom "i+1"sten Element bis n
Ah es wird also immer die vorherige Zifferabgeschnitten
Sozusagen. Das wurde ja schon bearbeitet, weshalb man es ignorieren kwnn
aber es kann ja trotzdem vorkommen, dass Paare doppelt gebildet werden oder?
Klar, sofern Ziffern mehrfach vorkommen.
{ 2, 5, 5, 5, 7} hier zum Beispiel, es gibt dann ja erst die Paare [2 und 5, 2 und 5, 2 und 5, und 2 und 7]
Genau, mit 2 als erstem Teil der Ziffer haben wir, wie du schon festgestellt hast, die Paare (2,5), (2,5), (2,5) und (2,7).
Je nachdem, was genau du in deinem Programm willst, kannst du die doppelten Einträge ignorieren oder musst sie eben beachten
es gibt dann halt bei den 5en keine „2 und 5“ mehr. Habe ich es so richtig verstanden ?
In dem Fall nicht, genau. Du kannst es natürlich auch so implementieren, dass die Paare auch doppelt gezahlt werden und sowohl (2,5) als auch (5,2) als Paar zählt
Ah es wird also immer die vorherige Zifferabgeschnitten, aber es kann ja trotzdem vorkommen, dass Paare doppelt gebildet werden oder? { 2, 5, 5, 5, 7} hier zum Beispiel, es gibt dann ja erst die Paare [2 und 5, 2 und 5, 2 und 5, und 2 und 7] es gibt dann halt bei den 5en keine „2 und 5“ mehr. Habe ich es so richtig verstanden ?