Zahlen mit 2 for loops suchen Google?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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


CuriousCyber 
Fragesteller
 18.05.2022, 08:01

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 ?

0
xxxcyberxxx  18.05.2022, 10:51
@CuriousCyber
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

0