这是我的代码:
class Backwards {
String str;
Backwards(String s) {
str = s;
}
void backward(int idx) {
if(idx != str.length()-1) {
System.out.println(idx);
backward(++idx);
}
System.out.print(str.charAt(idx));
}
}
class StrBackDemo {
public static void main(String args[]) {
Backwards s = new Backwards("This is a test");
s.backward(0);
}
}
当我用表达式idx +1
调用函数本身时效果很好,但是对于++idx
,它会打印第一个字符两次,并且根本不会打印最后一个字符。
With <+idx> output: ttset a si sih
With <idx +1> output: tset a si sihT
答案 0 :(得分:2)
++我将增加i的值,然后返回递增的值。
botchat.js:34449 Refused to connect to 'https://directline.botframework.com/v3/directline/conversations' because it violates the following Content Security Policy directive: "default-src 'self' 'unsafe-eval' 'unsafe-inline' *.accenture.com". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.
i ++将递增i的值,但返回在递增之前我保持的原始值。
i = 1;
j = ++i;
(i is 2, j is 2)
所以在idx = 0的代码协处理器中;
i = 1;
j = i++;
(i is 2, j is 1)
因此你得错了结果
但是在idx + 1的情况下;
System.out.println(idx); //idx = 0;
backward(++idx); //its changed idx = 1 and passed 1 to this function
System.out.print(str.charAt(idx));//After all recursion call here idx =1 not idx =0;
答案 1 :(得分:0)
它会在递归调用backward(++idx)
上导致您传递递增值并且还会增加值本身。
运营商++
将idx
的值设置为idx + 1
在最后一次调用中,当方法获得索引13并为其打印char并且前一个调用也具有索引13时,您将完成情境。同时,方法的第一次调用具有索引1.
要修复您的代码使用:
void backward(int idx) {
if(idx != str.length()-1) {
System.out.println(idx);
backward(idx + 1);
}
System.out.print(str.charAt(idx));
}
使用idx + 1
idx
值将保持相同的位置。