OOP for Schleife macht mir Probleme mit Arrays

makrochain

Mitglied
Hallo Community!
Ich habe hier ein dickes Problem und hänge schon den ganzen Tag dran. Ich brauche hilfe bei folgendem Quelltext:

Java:
public class ProgrammStart {
   
    public static void main(String[] args){ //[] ist ein Array

   int faecher = 10;
   int[] intArray = new int[faecher];
   

int i;
   for (i = 0 ; i<faecher ; i=i+1 ){
       if (i==0){
           intArray[i]=i+1;
        }
   else{
       intArray[i] =intArray[i-1]*2;
      
    }
        }
   for(i=0;i<faecher;i++){
    System.out.println (intArray[i]);
   }


    
    }
}

es wäre so super, wenn mir das mal einer Schritt für Schritt aufdröseln könnte. Ich check es einfach nicht und habe mittlerweile echt nicht mehr den Durchblick. Ich weiß, dass ich kurz vor der Lösung des Quelltextes stehe, ihn zu verstehen, aber im Moment klappt es einfach nicht mehr. Ich habe schon etliche Seiten besucht und nachgelesen aber in meinem Denken kommt die Potenz von "i"(Mehr macht das Prog nicht) schon vor dem letzten
Java:
  for(i=0;i<faecher;i++)
raus... wo ist mein Denkfehler?;(
 
Die letzte Schleife gibt dir einfach nur die vorher berechneten Ergebnisse auf der Konsole aus.
Die Potenz wurde, wie du schon gesagt hast, vorher berechnet.
 
Ja das erste feld (0) wird auf 1 gesetzt und die restlichen auf das doppelte vom vorigen

intArray =intArray[i-1]*2;
i ist akutuell, i-1 dann das vorige und * bedeutet doppelt...

also 1,2,4,8,16...



Du hast keinen Denkfehler, stimmt schon die zweir Potenzen werden berechnet
 
Danke für die Antworten. Es war spät, ich hab mich schlecht ausgedrückt. Mein Problem ist das i++ bei der letzten Schleife.
Bei mir würde mit der letzten Schleife 2,3,5,9,17 usw rauskommen. Wo denke ich falsch?
Die Erklärung von dir, ARadauer wäre ja noch fataler für mich weil ja dann das erste if nie zur geltung kommt.
 
Zuletzt bearbeitet:
Also machen all die i++ nicht Array[0] zu Array[1] sondern erstellen nur einen neuen Array?
Wenn das so ist, dann wird ja das Ergebnis von oben nicht übernommen oder? Ich steh sooo derbe auf dem Schlau bei der Sache das glaubt mir kein Mensch!;(
 
Bei mir würde mit der letzten Schleife 2,3,5,9,17 usw rauskommen. Wo denke ich falsch?

Bei intArray[i-1]*2; dienen die eckigen Klammern dem Zugriff auf das "vorherige" Array-Feld, das (i-1) spielt für die arithmethische Berechnung keine Rolle, da kommt nur das *2 zum Tragen. Vielleicht siehst du es besser, wenn man die Zeile in zwei Schritte zerlegt:

Java:
intArray[i] =intArray[i-1]*2;

//ist dasselbe wie:
int letzerArrayWert = intArray[i-1];
intArray[i] = letzerArrayWert * 2;

Also machen all die i++ nicht Array[0] zu Array[1] sondern erstellen nur einen neuen Array?

Irgendwie wirfst du Indizes und Inhalte des Arrays wild durcheinander. Ein Array ist eine Reihe Schubladen mit Nummer (von 0 bis irgendwas) drauf und irgendetwas drin:
Code:
array[0] --> 42
array[1] --> 4711
array[2] --> 23

Eine Operation wie array[1]++ macht nun mit dem Index 1 überhaupt nichts. Stattdessen schaut man nach, was in diesem Schubfach liegt (hier 4711) und führt die Operation darauf aus. Danach liegt unter array[1] eben 4712 drin. Analog die Operation array[1] = array[0] + array[2]. Dann wird die Summe der Inhalte von Schublade null und zwei zum neuen Inhalt der Schublade 1, also ist danach array[1] == 65. So einfach ist das.
 
Zuletzt bearbeitet:
Ich Danke euch! Die letze Erklärung war das KLICK was ich benötigt habe. natürlich habe ich den Index mit dem Wert des Arrays durcheinander gewürfelt!:lol:
 

Zurück
Oben