Benötige Hilfe bei Potenzrechner mit Rekursion

Sacrety

Mitglied
/* 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! */

Java:
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

Bekanntes Mitglied
Also ehrlich gesagt habe ich keinen Schimmer, wie deine Methode "sum" funktionieren soll.
Ich würde es ja eher so machen:
Java:
public static int sum( int basis, int exponent ) {
    
    int potenz = 1;
    
    for ( int i = 0; i < exponent; i++ )
        potenz *= basis;
    
    return potenz;
    
}
 
Zuletzt bearbeitet:

Gucky

Top Contributor
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 ;)
 
Zuletzt bearbeitet:

Sacrety

Mitglied
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.

Java:
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 ?
 
Zuletzt bearbeitet:

Saheeda

Top Contributor
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.
 
Zuletzt bearbeitet:

Sacrety

Mitglied
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

Top Contributor
Java:
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

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

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

Sacrety

Mitglied
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.
 
Zuletzt bearbeitet:

njans

Top Contributor
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

Top Contributor
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

Mitglied
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...

Java:
    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();
     
    }
    }
 
Zuletzt bearbeitet:

njans

Top Contributor
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.
 

Sacrety

Mitglied
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.
 
Zuletzt bearbeitet:

njans

Top Contributor
Java:
 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.
 

Neue Themen


Oben