递归方法中的StackOverflowError

时间:2016-12-01 16:04:07

标签: java stack-overflow

下面的程序应该总结从n到0(负)或从0到n(正)的所有偶数。

我不应该使用其他方法或*; * =

问题是程序在zaehler(counter) == eingabe之后没有停止(“eingabe表示英文输入”。我希望你能告诉我如何解决问题。

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 个答案:

答案 0 :(得分:1)

请注意,使用比您更少的代码的更简单的方法是使用单个sum函数(而不是evenSum1evenSum2),它会一直递归到{{1等于countertarget。然后,对于正数,将target - 1初始化为counter,将0初始化为target。对于负数,请将eingabe初始化为counter,将eingabe初始化为target。希望对你有意义!

如果您希望保留当前的方法,那么您的代码就会出现一些问题。我对它进行了更改,并在必须修复的地方添加了注释。

0