我有我的第一个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);
}
答案 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;
}
它应该给你想要的结果。感谢。