2016-12-01 11 views
-1

以下のプログラムは、nから0(負の数)または0からn(正の数)までのすべての偶数を集計する必要があります。再帰的メソッドのStackOverflowError

他の方法や*を使用しないでください。 * =

問題は、私はあなたが問題を解決する方法を教えてくださいことを願って。

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); 
    } 
} 

答えて

1

注。プログラムは、(英語で入力を 『" eingabe手段』)zaehler(counter) == eingabe後に停止しないということですあなたが持っているよりもはるかに少ないコードで簡単な方法は、countertargetまたはtarget - 1になるまで再帰を保持していること、(むしろevenSum1evenSum2を持つよりも)単一sum機能を持つことであること。次に、正の数はにcounterを初期化するために0およびtarget~eingabeである。負の数値の場合はcounterからeingabetargetから0に初期化します。あなたには理にかなったことを願っています!

現在のアプローチを維持したい場合は、コードにいくつかの問題があります。私はそれに変更を加え、修正が必要な箇所にコメントを追加しました。

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); 
    } 
} 
関連する問題