Lut*_*aes 4 java recursion java.util.scanner
我在尝试解决递归任务时遇到了麻烦,但没有成功.
分配的目标是调用函数
reverseNumbers(new Scanner("11 23 31 49 56 611"))
Run Code Online (Sandbox Code Playgroud)
并获得输出
"611 56 49 31 23 11"
Run Code Online (Sandbox Code Playgroud)
虽然不允许使用数组,列表,字符串和方法应该只声明一个变量.
我写的代码不起作用.我收到了一个StackOverflow错误,我明白为什么会这样.这是因为参数scan不会改变,并且必须使递归起作用.但是,我不知道如何使用Scanner实用程序中提供的工具更改输入参数.
public static String reverseNumbers(Scanner scan){
if (!scan.hasNext()) {
return "";
}
else {
return reverseNumbers(scan) + " " + scan.nextInt();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是您在从扫描仪读取数字之前正在递归.
请记住,Java 从左到右评估操作数.所以,它reverseNumbers(scan)之前评估过scan.nextInt().
这意味着它将继续:
scan.hasNext()reverseNumbersscan.hasNext()reverseNumbersscan.hasNext()reverseNumbersscan.hasNext()在进行递归调用之前进行评估:
int next = scan.nextInt();
return reverseNumbers(scan) + " " + next;
Run Code Online (Sandbox Code Playgroud)
现在,您正在消耗您正在检测的值hasNext()(hasNextInt()顺便说一下;或者使用String next = scan.next()),因此检测到扫描仪"has"的值将不会再次被检测到.
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |