我无法弄清楚为什么我的方法会这样做:(
通常用于创建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));
}
答案 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);
}