利用下载百分比实现Java递归

问题描述 投票:0回答:1
Public class JavaRecursion {
  static void downloadStatus(int percentage) {
    System.out.println("download is at " + percentage + "%\n"):

          downloadIncrease();
  }

  Static void downloadIncrease() {
    Int speed = 0;

    While(speed < 100) {
      speed++;

      downloadStatus(speed);
    }

    Public static void main(String[] args) {
      downloadIncrease();
    }

  } // closing the class bracket

所以我想实现两个函数重复调用对方的递归

下载增加会增加速度,该速度作为参数传递给 downloadStatus 方法中的百分比参数

因此,每次下载速度增加时,都会调用 downloadstatus 方法来打印更新,然后调用 downloadincrease 来再次增加下载百分比等

这基本上会持续到下载百分比达到100%

我已经检查了循环语句的逻辑,它起作用了,因为我立即停止从另一个方法调用一个方法,整个过程打印到 100%,没有错误,但我特别想要一种方法来增加下载,另一种方法来打印更新声明,并让他们不断互相调用,直到下载达到 100%

但是我不断收到 stackoverflow 错误,并且代码在抛出此错误之前多次打印“下载为 1%”,我做错了什么???

有人可以建议吗?

java swing recursion while-loop java-11
1个回答
0
投票

当downloadStatus()方法调用downloadIncrease()方法时,速度变为0并且永远不会结束。我建议你不要使用递归,只调用 downloadStatus() 打印出来。

如果你真的想保留递归,你可以将速度设置为全局变量,如下所示

class Main {
static int speed = 0;

static void downloadStatus(int percentage) {
    System.out.println("Download is at " + percentage + "%\n");
    downloadIncrease();
}

static void downloadIncrease() {
    while(speed < 100) {
        speed++;
        downloadStatus(speed);
    }
}

public static void main(String[] args) {
    downloadIncrease();
}}

但请注意,这仍然有可能造成溢出。 我认为最好的方法如下

class Main {
  static void downloadStatus(int percentage) {
    System.out.println("download is at " + percentage + "%\n");
  }

  static void downloadIncrease() {
    int speed = 0;

    while(speed < 100) {
      speed++;
      downloadStatus(speed);
    }
  }

  public static void main(String[] args) {
    downloadIncrease();
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.