我在尝试解决递归任务时遇到了麻烦,并且没有成功。
作业的目标是调用函数
reverseNumbers(new Scanner("11 23 31 49 56 611"))
并获取输出
"611 56 49 31 23 11"
虽然不允许使用数组,列表,字符串和方法应该只声明一个变量。
我写的代码不起作用。我收到StackOverflow
错误,我明白为什么会这样。这是因为参数scan
没有改变,并且它必须使递归起作用。但是,我不知道如何使用Scanner
实用程序中提供的工具更改输入参数。
public static String reverseNumbers(Scanner scan){
if (!scan.hasNext()) {
return "";
}
else {
return reverseNumbers(scan) + " " + scan.nextInt();
}
}
答案 0 :(得分:5)
问题是您在从扫描仪读取数字之前正在递归。
请记住Java evaluates operands left-to-right。因此,它会在reverseNumbers(scan)
之前评估scan.nextInt()
。
这意味着它会继续:
scan.hasNext()
reverseNumbers
scan.hasNext()
reverseNumbers
scan.hasNext()
reverseNumbers
在进行递归调用之前评估scan.hasNext()
:
int next = scan.nextInt();
return reverseNumbers(scan) + " " + next;
现在,您正在消耗您使用hasNext()
检测到的价值(顺便说一下应该是hasNextInt()
;或者使用String next = scan.next()
),所以您检测到扫描仪的值"有"再也找不到了。