DoWhile循环上的StackOverflowError。循环没有终止?

时间:2017-05-13 23:20:00

标签: java loops

我有我的第一个IT课程并且想要练习循环并且在DoWhile循环上有过多的错误。它说问题是最后的回归线。

任务:一个可以用复利计算你的资本的程序。用户的输入是起始资本,利率和持续时间。

我的导师在While循环和递归循环中帮助了我,但是我在DoWhile循环中失败了。

(Laufzeit = duration, zinssatz = interest rate)

我不明白为什么循环不应该终止。它应该向计数器(counter ++)添加1,直到其持续时间为(while (counter <= laufzeit),然后停在右边?

import java.util.Scanner;

public class Zinseszins {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    System.out.println("Geben Sie das Startkapital ein.");
    double startkapital = sc.nextDouble();

    System.out.println("Geben Sie den Zinssatz ein.");
    double zinssatz = sc.nextDouble();

    System.out.println("Geben Sie die Laufzeit ein.");
    int laufzeit = sc.nextInt();

    sc.close();

    double end = endkapitalDoWhile( startkapital, zinssatz, laufzeit);
    System.out.println("DoWhile-Schleife: " + end);

}
public static double endkapitalDoWhile(double startkapital, double zinssatz, int laufzeit) {
int counter = 1;
    do {
        if (counter % 3 == 0) {
            zinssatz = zinssatz + 0.1;
        } else{
            zinssatz = zinssatz;
        }
        startkapital = startkapital + (startkapital *(zinssatz/100));
        counter++;
        return (endkapitalDoWhile(startkapital, zinssatz, laufzeit));
    } while (counter <= laufzeit);
}

2 个答案:

答案 0 :(得分:1)

StackOverflowError 是由于你在循环内调用的递归函数。

您只需在 While 条件后返回值,您的问题就会得到解决。

public static double endkapitalDoWhile(double startkapital, double zinssatz, int laufzeit) {
 int counter = 1;
    do {
        if (counter % 3 == 0) {
            zinssatz = zinssatz + 0.1;
        } else{
            zinssatz = zinssatz;
        }
        startkapital = startkapital + (startkapital *(zinssatz/100));
        counter++;

    } while (counter <= laufzeit);   
 return startkapital ;   
    }

如果要返回其他内容,请更改返回值。 希望它能为你效劳。

快乐的编码!

答案 1 :(得分:0)

我认为你正在努力练习Do-while循环。这里的问题是你在do-while循环完成之前返回数据并调用相同的函数。结果,正在发生无限递归。

更改您的代码如下:

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    System.out.println("Enter Capital");
    double startcapital = sc.nextDouble();

    System.out.println("Enter Interest Rate");
    double interest_rate = sc.nextDouble();

    System.out.println("Enter Year");
    int duration = sc.nextInt();

    sc.close();

    double end = endkapitalDoWhile(startcapital, interest_rate, duration);
    System.out.println("DoWhile-Schleife: " + end);

}
public static double endkapitalDoWhile(double startcapital, double interest_rate, int duration) {
int counter = 1;
    do {
        if (counter % 3 == 0) {
            interest_rate = interest_rate + 0.1;
        } else{
            interest_rate = interest_rate;
        }
        startcapital = startcapital + (startcapital *(interest_rate/100));
        counter++;            
    } while (counter <= duration);      

    return startcapital;
}

它应该给你想要的结果。感谢。