2016-12-01 14 views
-1

Das folgende Programm sollte alle geraden Zahlen von n bis 0 (negativ) oder von 0 bis n (positiv) zusammenfassen.StackOverflowError in einer rekursiven Methode

Ich sollte keine anderen Methoden verwenden oder *; * =

Das Problem ist, dass das Programm nicht zu stoppen, nachdem zaehler(counter) == eingabe (Eingang "in Englisch" eingabe bedeutet"). Ich hoffe, dass Sie mir, wie das Problem zu lösen sagen.

import javax.swing.JOptionPane; 

public class Toolbox { 
    public static int eingabe(int eingabe){ 
     if (eingabe < 0) { 
      evenSum1(eingabe, 0, 0); 
     } else { 
      evenSum2(eingabe, 0, 0); 
     } 

     return 0; 
    } 

    public static int evenSum2(int eingabe, int summe, int zaehler) { 
     if (PevenSum(eingabe, summe, zaehler) == 0) { 
      System.out.print("Die Summe aller geraden Zahlen ist: " + summe); 
      return 0; 
     } 

     zaehler = zaehler - 2; 
     summe = summe - zaehler; 
     evenSum2(eingabe, summe, zaehler); 
     return 1; 

    } 

    public static int evenSum1(int eingabe, int summe, int zaehler) { 
     if (NevenSum(eingabe, summe, zaehler) == 0){ 
      System.out.print("Die Summe aller geraden Zahlen ist: " + summe); 
      return 0; 
     } 

     zaehler = zaehler + 2; 
     summe = summe + zaehler; 
     evenSum1(eingabe, summe, zaehler); 
     return 1; 
    } 

    public static int NevenSum(int eingabe, int summe, int zaehler) { 
     if (zaehler == eingabe || zaehler == eingabe + 1) { 
      return 0; 
     } 

     return 1; 
    } 

    public static int PevenSum(int eingabe, int summe, int zaheler) { 
     if (summe == eingabe || summe == eingabe - 1) { 
      return 0; 
     } 

     return 1; 
    } 

    public static void main(String[] args) { 
     String eingabe; 
     eingabe = JOptionPane.showInputDialog("Hier eine Zahl eingaben"); 
     int zahl = Integer.parseInt(eingabe); 
     eingabe(zahl); 
    } 
} 

Antwort

1

Hinweis dass ein einfacherer Ansatz mit viel weniger Code als Sie haben eine einzelne sum Funktion zu haben ist (statt evenSum1 und evenSum2 haben), die bis counter hält Rekursion gleich target oder target - 1. Dann wird für positive Zahlen initialisieren counter zu 0 und target bis eingabe. Bei negativen Zahlen initialisieren Sie counter bis eingabe und target bis 0. Hoffnung, die für Sie Sinn macht!

Wenn Sie Ihren aktuellen Ansatz beibehalten möchten, gab es einige Probleme mit Ihrem Code. Ich habe Änderungen daran vorgenommen und Kommentare hinzugefügt, in denen Dinge behoben werden mussten.

import javax.swing.JOptionPane; 
public class TreeNode { 
    public static int eingabe(int eingabe) { 
     if (eingabe > 0) { // Needed to reverse this 
      evenSum1(eingabe, 0, 0); 
     } else { 
      evenSum2(eingabe, 0, 0); 
     } 

     return 0; 
    } 

    public static int evenSum2(int eingabe, int summe, int zaehler) { 
     if (PevenSum(eingabe, summe, zaehler) == 0) { 
      System.out.print("Die Summe aller geraden Zahlen ist: " + summe); 
      return 0; 
     } 
     zaehler = zaehler - 2; 
     summe = summe + zaehler; // Needed to change this to add rather than 
            // subtract (subtracting a negative number 
            // makes it positive) 
     evenSum2(eingabe, summe, zaehler); 
     return 1; 

    } 

    public static int evenSum1(int eingabe, int summe, int zaehler) { 
     if (NevenSum(eingabe, summe, zaehler) == 0) { 
      System.out.print("Die Summe aller geraden Zahlen ist: " + summe); 
      return 0; 
     } 
     zaehler = zaehler + 2; 
     summe = summe + zaehler; 
     evenSum1(eingabe, summe, zaehler); 
     return 1; 
    } 

    public static int NevenSum(int eingabe, int summe, int zaehler) { 
     if (zaehler == eingabe || zaehler == (eingabe - 1)) { // Changed from 
                   // zaehler == 
                   // (eingabe + 1) 
      return 0; 
     } 
     return 1; 
    } 

    public static int PevenSum(int eingabe, int summe, int zaheler) { 
     if (zaheler == eingabe || zaheler == eingabe + 1) { // Can't compare the 
                  // sum, have to 
                  // compare counter 
                  // and eingabe 
      return 0; 
     } 
     return 1; 
    } 

    public static void main(String[] args) { 
     String eingabe; 
     eingabe = JOptionPane.showInputDialog("Hier eine Zahl eingaben"); 
     int zahl = Integer.parseInt(eingabe); 
     eingabe(zahl); 
    } 
} 
Verwandte Themen