java循环运行超过预期

时间:2015-11-22 16:00:38

标签: java recursion methods while-loop

我无法弄清楚为什么我的方法会这样做:(

通常用于创建IBAN。它应该将123456780000123456131400拆分为长度为9的部分,以便它可以适合整数。它工作得非常好并为我提供了正确的解决方案58,但我添加了一些System.out.println();来查看此方法中发生的情况。

它运行if-case 8次,有时它重新进入while循环,然后给我解决方案:/

我认为这是我的递归问题,但我无法弄清楚原因。

public static int rest(String r) {
    int e = 0;
    while(r.length() >= 9) {
        e = (Integer.parseInt(r.substring(0,9)) % 97);
        r = Integer.toString(e) + r.substring(9);
        rest(r);
    }
    if(r.length() < 9)
        e = (Integer.parseInt(r.substring(0)) % 97);
    return e;

主要方法:

public static void main(String[] args) {
    String bban = "123456780000123456131400";
    System.out.println(rest(bban));
}

1 个答案:

答案 0 :(得分:0)

如前所述,您可以使用while循环或递归。 以及rest(r)的结果还没有被退回。所以它在没有使用结果的情况下进行无用的递归,第一级的while循环返回最后9个块的e

我不知道背后的IBAN逻辑,但是你的函数只返回最后9个块的%97

使用递归:

public static int rest(String r) {

     if (r.length() >= 9) {
        int e = (Integer.parseInt(r.substring(0,9)) % 97);
        r = Integer.toString(e) + r.substring(9);
        return rest(r);
     }
     if(r.length() < 9)
        return (Integer.parseInt(r.substring(0)) % 97);
}