# 2er Potenz berechnen



## 22111988 (5. Dez 2010)

Ich muss folgende Aufgabe lösen:
Ergänzen Sie die Klasse Schleifentest um eine Methode zweierPotenz() der eine positive
ganze Zahl n < 30 übergeben werden kann. Die Methode soll die 2er-Potenz 2n berechnen
und zurückgeben. Falls eine negative Zahl übergeben wird, soll sie 0 zurückliefern.
Hinweis: Die 2er-Potenz soll mit n-fachen Produkt 2*2*2*2 … *2 berechnet werden.

Die Bedingung in der while Schleife muss zahl < 30 sein aber beim rest komm ich einfach nicht weiter.
Ich bin dankbar für jede Hilfe!


----------



## 221111988 (5. Dez 2010)

Keiner ne Idee?


----------



## eRaaaa (5. Dez 2010)

Wie sieht`s mit deinen Ideen aus?
Was genau hast du dir bei "Die Bedingung in der while Schleife muss zahl < 30" gedacht? ;/


----------



## alex90 (5. Dez 2010)

selber keine idee? is ja deine hausaufgabe...
so als wink mit dem zaunpfahl: wenns schon um ne schleife geht und ihrs mit dem n-Fachen Produkt berechenen sollt... solltest du mal so grob in die richtung n Schleifendurchläufe tenidieren... und dann vielleicht noch irgendwas mit *2 machen...


----------



## Haave (5. Dez 2010)

http://www.java-forum.org/java-basics-anfaenger-themen/109989-zahlen-komma-ausgeben.html
Selber User?

Poste doch mal n bisschen von deinem Code.


----------



## 221111988 (5. Dez 2010)

Macht mich ma nich so feritg Leute^^

Ich hab bis jetzt noch keinen code macht auf wenig Sinn damit anzufangen wenn nicht weiss wie man die Aufgabe lösen soll.
Ich bin auch ehrlich gesagt etwas überfordert mit der Aufgabe vor allem bei diesem Teil : "Die 2er-Potenz soll mit n-fachen Produkt 2*2*2*2 … *2 berechnet werden." hab ich keine Ahnung wie ich das im java code umsetzen könnte.


----------



## Haave (5. Dez 2010)

221111988 hat gesagt.:


> Ich bin auch ehrlich gesagt etwas überfordert mit der Aufgabe vor allem bei diesem Teil : "Die 2er-Potenz soll mit n-fachen Produkt 2*2*2*2 … *2 berechnet werden." hab ich keine Ahnung wie ich das im java code umsetzen könnte.


Mich würde hier vor allem erst mal interessieren, ob du - auch ohne das in Code umzusetzen - verstehst, was die Aufgabe von dir will. Ich versteh die Aufgabenstellung nämlich nicht so richtig, ehrlich gesagt. Kannst du das mal in eigenen Worten wiedergeben?


----------



## 221111988 (5. Dez 2010)

Klar, kein Problem

"Ergänzen Sie die Klasse Schleifentest um eine Methode zweierPotenz() der eine positive
ganze Zahl n < 30 übergeben werden kann"
= Bedingung soll n < 30 sein

"Die Methode soll die 2er-Potenz 2n berechnen
und zurückgeben. Falls eine negative Zahl übergeben wird, soll sie 0 zurückliefern.
Hinweis: Die 2er-Potenz soll mit n-fachen Produkt 2*2*2*2 … *2 berechnet werden."
= Wir haben die zahl i = 2. Dieser zahl soll vom benutzer ein Exponent übergeben werden.
Wenn der benutzer die zahl 4 z.b. übergibt. soll die methode 2*2*2*2 berechnen.
Wenn eine negative zahl übergeben wird soll 0 zurückgegeben werden.


----------



## Haave (5. Dez 2010)

Okay, hab verstanden und mir grad mal den Code aufgeschrieben.

Folgende Idee:
Hau mal ein int exponent in deinen Code, das ist die Variable, die vom Anwender beschrieben wird (darauf gehe ich jetzt mal nicht ein, weil das ja grad nicht das Problem ist, denke ich). Setz die einfach mal auf 4 oder 5 oder wie oft du die Zahl 2 eben potenziert haben möchtest. Jetzt überleg dir mal ein paar Fälle:
- Was muss das Ergebnis sein, wenn der Exponent 1 ist?
- Was, wenn der Exponent 2 ist, was, wenn er 3 ist?
- Und wie muss dann schließlich die Abbruchbedingung für die Schleife aussehen? (Hier meine ich NICHT deine "n < 30"-Bedingung, das ist ja eine andere Baustelle und gehört zur Benutzereingabe.)


----------



## alex90 (5. Dez 2010)

also wenn tatsächlich die schleife dein problem ist:

```
int potenz = 2;
	for(int i = 1; i < n; i++){
	potenz = potenz * 2;		
	}
```

die Schliefe funktioniert für die Exponenten 1 bis so hoch das ein Integeroverflow rauskommt, für 0 und kleiner und für deine Bedingung das es nur für Exponenten bi 30 funtionieren soll, musst du dir halt noch was überlegen (-> if-Anweisung zum Beispiel...)


----------



## 221111988 (5. Dez 2010)

alex90 hat gesagt.:


> also wenn tatsächlich die schleife dein problem ist:
> 
> ```
> int potenz = 2;
> ...




kann man nicht auch eine weiter Bedingung in der Schleife angeben? Wenn ja wie?


----------



## Haave (5. Dez 2010)

221111988 hat gesagt.:


> kann man nicht auch eine weiter Bedingung in der Schleife angeben? Wenn ja wie?



Ja:

```
for(int i = 1; i < n && weitereBedingung; i++){
```


----------



## 221111988 (5. Dez 2010)

Danke für eure hilfe so funktionierts jetzt:


```
public int zweierPotenz(int n)
 {
  int potenz = 2;
    for (int i = 1; i < n && n < 30; i++)
    {
    potenz = potenz * 2;        
    }
    {  
    return (potenz);
    } 
}
```

Da fehlt noch die Anweisung, dass die methode 0 ausgeben soll, wenn man ne negative zahl eingibt aber das bekomm ich auch noch selbst hin. das meiste von dem code kommt von euch und ich muss mir die geschichte mit den Schleifen einfach nochmal anschauen, damit ich solche Aufgaben in Zukunft auch alleine hinbekomme. Danke nochmal!


----------



## Gast2 (5. Dez 2010)

```
if (n < 0) return 0;
```
???:L :rtfm:


----------



## 221111988 (5. Dez 2010)

Ich merk grad, dass die methode mir immer ne 2 ausgibt wenn ich für n eine zahl die grösser als 30 ist eingebe.
Wieso ist das so? wo ist da de Fehler in der Bedingung?


----------



## XHelp (5. Dez 2010)

Wenn die zahl größer als 30 ist, solltest du eher IllegalArgumentException schmeißen, d.h. die Bedingung in der Schleife wird dir nicht viel bringen.


----------



## Haave (5. Dez 2010)

Ganz einfach: Vor Beginn der Schleife legst du fest, dass potenz 2 sein soll. Die Größe von n wird beim Betreten der Schleife abgefragt, wenn n > 30 ist, wird die Schleife nicht betreten und dann landest du direkt bei return potenz. Und das ist dann eben 2.


----------



## z-mon (5. Dez 2010)

Hallo 221111988,

am 01.12.2010 gab es bereits eine ähnliche Diskussion. Gut möglich das es sich hierbei um eine Klassenkameradin handelt 

Standard Summe berechnen

Grüße,
Simon


----------

