# Benötige Hilfe bei Potenzrechner mit Rekursion



## Sacrety (16. Nov 2014)

/* Schreiben Sie eine Klasse Power und speichern Sie diese als Power.java. Ihr Programm
bekommt die zwei Integer x und n in genau dieser Reihenfolge über die Standardeingabe und
soll auf der Standardausgabe das Ergebnis von nx (genau eine Zahl) anzeigen. Nutzen Sie
Rekursion! */


```
import java.util.Scanner;
public class Power {
static Scanner scanner = new Scanner(System.in);

public static int sum(int x, int n, java.util.Scanner scan) {
  int x = scanner.nextInt();
  int n = scanner.nextInt();
  if (Eingabe == 0)
    return 0;
  else
    return sum(0, scan) + n + x;
}
public static void main(String[] args) {
  java.util.Scanner scan = new java.util.Scanner(System.in);
  System.out.println("Zuerst Exponent dann Basis eingeben.");
  System.out.println(sum(0, scan));
  
}
}
```

Ich weiß in der Theorie wie ich dinge/Problemstellungen umsetzen kann, aber wenn es dann zur implementierung in Java kommt habe ich wirklich immer Fehlermeldungen und weiß dann garnicht was genau das Problem ist, ich hänge schon insgesamt 1-2 Stunden an der Aufgabe und versuche sie zu Lösen.


----------



## Androbin (16. Nov 2014)

Also ehrlich gesagt habe ich keinen Schimmer, wie deine Methode "sum" funktionieren soll.
Ich würde es ja eher so machen:

```
public static int sum( int basis, int exponent ) {
    
    int potenz = 1;
    
    for ( int i = 0; i < exponent; i++ )
        potenz *= basis;
    
    return potenz;
    
}
```


----------



## Gucky (16. Nov 2014)

Die Methode heißt sum. Warum? Es geht um Potenzen.

Warum ließt du bei jedem Durchlauf die Zahlen neu ein?

Wenn du Fehlermeldungen bekommst, dann poste sie. Entgegen der weit verbreiteten Meinung haben wir keine Kristallkugel.

Du beziehst dich auf eine Variable namens Eingabe. Dazu zwei Dinge:
1. Variablen immer klein und nach lowerCamelCase.
2. Es gibt keine Variable namens Eingabe.


@Androbin
Vorgabe war aber, dass die Methode rekursiv ist


----------



## Sacrety (16. Nov 2014)

Das mit der Eingabe hab ich vergessen mit zu ändern, wie gesagt ich sitze schon etwas an der Aufgabe.
Habe nocheinmal nen bisschen verändert.


```
import java.util.Scanner;
public class Power {
static Scanner scanner = new Scanner(System.in);



public static int potenz(int x, int n, java.util.Scanner scan) {
  
  
  if (x == 0)
    return 0;
  else
    return potenz(0, 0, scan) + n + x;
}
public static void main(String[] args) {
  
  
  java.util.Scanner scan = new java.util.Scanner(System.in);
  System.out.println("Zuerst Exponent dann Basis eingeben.");
  System.out.println(potenz(0, 0, scan));
  int x = scanner.nextInt();
  int n = scanner.nextInt();
  
}
}
```

Bekomme dieses mal keine Fehlermeldungen beim Compilieren, das Programm wird ausgeführt, ich gebe 2 Zahlen ein dann wird es Beendet. Es wird aber nichts ausgegeben und auch nichts gerechnet. Könnt ihr mir helfen ?


----------



## Saheeda (16. Nov 2014)

Deine Funktion bekommt als Parameter immer (0,0), egal, welche Zahlen du eingibst.

Doch, Beiträge können editiert werden, aber ich glaube nur eine gewisse Zeit lang nach Erstellung.


----------



## Sacrety (16. Nov 2014)

Wenn ich (x,n) eingebe kommt immer die Fehlermeldung cannot find Symbol für (x,n) wenn ich (0,0) eingebe fragt er wenigstens die Variablen am per (System.in). Ich check das nicht -.-


----------



## njans (16. Nov 2014)

```
java.util.Scanner scan = new java.util.Scanner(System.in);
System.out.println("Zuerst Exponent dann Basis eingeben.");

int x = scanner.nextInt();
int n = scanner.nextInt();
System.out.println(potenz(x, n, scan));
```

Wenn du x und n erst nach dem Aufruf von potenz(x,n,scan) aufrufst, dann kann das ja auch nichts werden. Basics über Sichtbarkeit von Variablen.


----------



## Sacrety (16. Nov 2014)

```
int x = scanner.nextInt();
int n = scanner.nextInt();[/Java]

Wenn die beiden sachen vor das IF packe habe ich dasselbe Problem.
```


----------



## njans (16. Nov 2014)

In der main- Methode ist kein if.


----------



## Sacrety (16. Nov 2014)

Naja ganz ehrlich bei jeder Antwort, die ich bisher erhalten habe kommt es mir so vor, als ob mir keiner helfen will... muss ich wohl mal woanders nachschauen. Nevermind. Wahrscheinlich häng ich auch zu sehr hinterher mit dem Verständnis weil die in der Uni mal eben die Themengebiete in 1 Vorlesungen durchrushen.


----------



## njans (16. Nov 2014)

Wenn du erwartest, dass man dir den fertigen code gibt, dann wirst du enttäuscht werden. 
Da musst du schon eigeninitiatives zeigen.

Wenn du irgendwo irgendwelche komischen Änderungen machst, dann solltest du uns auch mal deinen aktuellen Code bereitstellen, damit man sehen kann, was du da gemacht hast. 
Wenn du irgendwo in deiner rekursiven Methode x und n verwendest, gibt es keinen Fehler. Wenn du das in der main an der falschen Stelle machst, schon!


----------



## Gucky (16. Nov 2014)

Natürlich wollen wir dir helfen aber deine Ansätze sind teilweise so unverständlich für uns, dass wir uns fragen, ob du überhaupt etwas lernen willst oder ob du uns ausnutzen willst.

Dein Code hat nichts mit einer Potenzberechnung zu tun. In einer Potenz kommt kein Plus vor. Nur Mal. Du hast aber sogar zwei mal Plus drin und addierst die Potenz mit der Basis, übergibst der Methode zwei Mal null und wunderst dich, warum es nicht funktioniert.
Tut mir leid aber was sollen wir dabei denn denken?


----------



## Sacrety (16. Nov 2014)

Gucky hat gesagt.:


> Natürlich wollen wir dir helfen aber deine Ansätze sind teilweise so unverständlich für uns, dass wir uns fragen, ob du überhaupt etwas lernen willst oder ob du uns ausnutzen willst.
> 
> Dein Code hat nichts mit einer Potenzberechnung zu tun. In einer Potenz kommt kein Plus vor. Nur Mal. Du hast aber sogar zwei mal Plus drin und addierst die Potenz mit der Basis, übergibst der Methode zwei Mal null und wunderst dich, warum es nicht funktioniert.
> Tut mir leid aber was sollen wir dabei denn denken?



Ich wollte die Probleme Schritt für Schritt angehen und nicht gleich den ganzen Code von mir durcharbeiten, besonders wegen dem Verständnis und meiner Verständnisprobleme bezüglich Rekursion.

Hier ist die Lösung...


```
import java.util.Scanner;
    public class Power {
    static Scanner scanner = new Scanner(System.in);
     
     
     
    public static int potenz(int x, int n, java.util.Scanner scan) {
     
     
    if (x == 1)
    return n;
    else
    return potenz(x-1, n, scan)*n;
    }
    public static void main(String[] args) {
     
     
    java.util.Scanner scan = new java.util.Scanner(System.in);
    System.out.println("Zuerst Exponent dann Basis eingeben.");
    int x = scanner.nextInt();
    int n = scanner.nextInt();
    System.out.println(potenz(x,n, scan));
    scan.close();
     
    }
    }
```


----------



## njans (16. Nov 2014)

Joar das funktioniert ja schonmal. 
Fehlt noch der Fall, dass man n^0 hat.

Ebenso kannst du auch das statische Scanner objekt enfernen, Du legst ja schon ein lokales in der main an. Auch kannst du die variable scan aus deiner potenz() entfernen, die wird ja nie verwendet.


----------



## Flown (16. Nov 2014)

Wenn du noch den Scanner aus dem Methodenheader wirfst, dann ist das sogar eine schöne Lösung.


----------



## JCODA (16. Nov 2014)

Siehe auch http://www.java-forum.org/java-basics-anfaenger-themen/163911-potenz-selber-berechnen-rekursiv.html, die selbe Aufgabe wurde gestern bereits gemacht.


----------



## Sacrety (16. Nov 2014)

njans hat gesagt.:


> Ebenso kannst du auch das statische Scanner objekt enfernen, Du legst ja schon ein lokales in der main an. Auch kannst du die variable scan aus deiner potenz() entfernen, die wird ja nie verwendet.



Du meinst Zeile 3 mit dem Scanner Objekt? Aber wenn die Zeile entferne, sagt java cannot find symbol: int x = scanner.nextInt(); und int n = scanner.nextInt();

Wenn ich Zeile 18 entferne meckert er nicht.
Die variable scan aus potenz() und den Scanner aus dem Methodenheader konnte ich rausnehmen.


----------



## njans (16. Nov 2014)

```
java.util.Scanner scan = new java.util.Scanner(System.in);
System.out.println("Zuerst Exponent dann Basis eingeben.");
System.out.println(potenz(0, 0, scan));
int x = scanner.nextInt();
int n = scanner.nextInt();
```

Achte mal auf den Variablennamen für die Verwendung von Scanner.
Scan ist die lokale Variable die du vermutlich anlegst, damit du x und n einlesen kannst.
scanner ist deine statische Variable.
Natürlich meckert der Compiler, wenn du einfach irgendeine Variablendeklaration entfernst. 
Schmeiß deine statisches scanner weg und verwende nur scan.


----------

