# Alle Zweierpotenzen bis 2^10 ausgeben lassen



## ceko1907 (20. Jan 2016)

Hallo Leute,

ich habe eine Aufgabe von der Uni, die ich irgendwie nicht lösen kann. Ich habe eigene Ideen gehabt aber komme einfach nicht zum Schluss. Man soll alle Zweierpotenzen bis 2^10 ausgeben lassen.

Hier ist das was ich bisher habe:

//Lassen Sie auf der Konsole alle Zweierpotenzen bis 2^10 ausgeben.
Also 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024


```
public class B_Zweierpotenzen {
   public static void main (String [] args) {
     
     int basis = 2;
     int exponent=1;
     
     for (exponent = 1; exponent<=10; exponent++){
       basis = basis * 2;
     }
     System.out.println (basis);
   }
}
```

So gibt mir die Konsole leider nur 2048 aus.

Danke für eure Hilfe.


----------



## Tarrew (20. Jan 2016)

Schreib die Ausgabe mal in die for-Schleife.


----------



## ceko1907 (20. Jan 2016)

JA! Danke. Aber es ist noch nicht ganz das was gesucht war. Jetzt kommt folgendes raus:

32                          (er hat also bei 2^5 angefangen)
64
128
256
512
1024
2048

Das sollte aber rauskommen:

2 (soll aber bei 2^1 anfangen)
4
8
16
32
64
128
256
512
1024


----------



## Joose (20. Jan 2016)

Wenn ich deinen Code ausführen (und die Ausgabe innerhalb der Schleife mache) dann kommt das gewünschte Ergebnis raus 
Kann es vielleicht sein das dein Ausgabefenster zuklein ist und du nur raufscrollen musst?


----------



## Tarrew (20. Jan 2016)

Vermutlich hat er die Ausgabe nach dem 'basis=basis*2' gemacht. Dann sollte es von 4 bis 2048 gehen. 

Also entweder einen anderen Startwert für 'basis' wählen, oder die Ausgabe an eine andere Stelle in der Schleife verschieben (so viele Möglichkeiten gibts da ja nicht  )


----------



## ceko1907 (20. Jan 2016)

Joose hat gesagt.:


> Wenn ich deinen Code ausführen (und die Ausgabe innerhalb der Schleife mache) dann kommt das gewünschte Ergebnis raus
> Kann es vielleicht sein das dein Ausgabefenster zuklein ist und du nur raufscrollen musst?




Tatsächlich, da steht noch was oben drüber  Aber:
Jetzt steht bei mir:

4
8
16
32
64
128
256
512
1024
2048

Das heißt die 2 fehlt am Anfang und die 2048 soll da nicht stehen.


----------



## JStein52 (20. Jan 2016)

Vielleicht rekursiv. So:


```
public static int zweiHochN(int n) {
        int enn = 0;
        if (n==0) {
            System.out.println(" "+1);
            return 1;
        } else {
            enn = 2*zweiHochN(n-1);
            System.out.println(" "+enn);
            return enn;
        }
    }
```


----------



## Joose (20. Jan 2016)

Nette Idee JStein52, aber vielleicht für einen Anfänger doch etwas zu hoch.

@ceko1907 passt die Ausgabe nun? (mit dem Hinweis von Tarrew)
Auch klar warum die Ausgabe bei 4 begonnen hat bzw. bis 2048 läuft?


----------



## ceko1907 (20. Jan 2016)

Tarrew hat gesagt.:


> Vermutlich hat er die Ausgabe nach dem 'basis=basis*2' gemacht. Dann sollte es von 4 bis 2048 gehen.
> 
> Also entweder einen anderen Startwert für 'basis' wählen, oder die Ausgabe an eine andere Stelle in der Schleife verschieben (so viele Möglichkeiten gibts da ja nicht  )




Danke an alle. Ich habe jetzt einfach am Anfang die "int basis = 1" gesetzt. Jetzt passt alles 

Das einzige Problem was ich jetzt habe ist, ich verstehe nicht ganz, wieso die "basis" gleich 1 gesetzt werden muss. Die Basis ist doch bei einer Zweierpotenz immer 2 und der Exponent beginnt mit der 1 und geht schließlich bis 10. Ich bin verwirrt.


----------



## Joose (20. Jan 2016)

Die Schleife berechnet dir für den aktuellen Exponenten das Ergebnis. Wie du schon sagt startet "exponent" mit dem Wert 1. 
Sprich der 1.Schleifendurchlauf sollte dir als Ergebnis 2 liefern.
Wenn du aber nun schon mit "basis = 2" startest, bräuchtest du ja keine Berechnung mehr für exponent = 1 sondern müsstest nur den Wert ausgeben.


----------



## ceko1907 (20. Jan 2016)

Joose hat gesagt.:


> Die Schleife berechnet dir für den aktuellen Exponenten das Ergebnis. Wie du schon sagt startet "exponent" mit dem Wert 1.
> Sprich der 1.Schleifendurchlauf sollte dir als Ergebnis 2 liefern.
> Wenn du aber nun schon mit "basis = 2" startest, bräuchtest du ja keine Berechnung mehr für exponent = 1 sondern müsstest nur den Wert ausgeben.



Bis zu deinem letzten Satz kann ich dir folgen. Aber der Punkt ist doch, dass ich eine Zweierpotenz berechnen soll. Beudeutet das nicht, dass die "basis = 2" sein muss?


----------



## ceko1907 (20. Jan 2016)

Ich denke halt so, dass die Basis immer konstant ist und der Exponent sich ändert von 1-10. Was offensichtlich nicht der Fall ist.


----------



## JStein52 (20. Jan 2016)

Joose hat gesagt.:


> aber vielleicht für einen Anfänger doch etwas zu hoch


Der Klassiker um die Anwendung von Rekursion zu lernen ! Und die iterative Lösung irritiert auch 
@ceko1907  : es irritiert dich ja nur weil bei dir basis gar nicht basis ist. das steht ja festkodiert als 2 dort.


----------



## Joew0815 (20. Jan 2016)

```
public class NP2 {
   public static void main(String[] args) {
     int out = 2;
     for(int n = 0; n < 10; n++) {
       System.out.println(out);
       out <<= 1;
     }
   }
}
```
Ganze 9 Zeilen. 
Ist das für Anfänger auch zu hoch oder habe ich etwas missverstanden?


----------



## ceko1907 (20. Jan 2016)

Danke Leute, es war alles sehr hilfreich. Ich denke ich hab es jetzt verstanden.


----------



## Joose (20. Jan 2016)

Joew0815 hat gesagt.:


> Ist das für Anfänger auch zu hoch oder habe ich etwas missverstanden?



Kommt darauf an ob dieser schon "shiften" kann


----------

