Java 从扫描仪递归输入的反向编号u顺序uu
我在尝试解决递归赋值时遇到困难,但没有成功 赋值的目标是调用函数Java 从扫描仪递归输入的反向编号u顺序uu,java,recursion,java.util.scanner,Java,Recursion,Java.util.scanner,我在尝试解决递归赋值时遇到困难,但没有成功 赋值的目标是调用函数 reverseNumbers(new Scanner("11 23 31 49 56 611")) 并获得输出 "611 56 49 31 23 11" 虽然不允许使用数组、列表、字符串和方法,但该方法只能声明一个变量 我写的代码不起作用。我得到了一个StackOverflow错误,我理解为什么会得到这个错误。这是因为参数scan没有更改,必须更改它才能使递归工作。但是,我不知道如何使用Scanner实用程序中提供的工具更改输
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();
}
}
问题是,在从扫描仪读取数字之前,您正在递归 记住Java。因此,它在
scan.nextInt()之前计算reverseEnumbers(scan)
这意味着它将继续:
- 看到
scan.hasNext()
- 调用反向枚举器
- 看到
scan.hasNext()
- 调用反向枚举器
- 看到
scan.hasNext()
- 调用反向枚举器
在进行递归调用之前,请先计算scan.hasNext()
:
int next = scan.nextInt();
return reverseNumbers(scan) + " " + next;
现在,您正在使用正在使用
hasNext()
检测的值(顺便说一句,它应该是hasNextInt()
;或者使用String next=scan.next()
),因此您检测到的扫描仪“已”的值将不会再次被检测到。试图解决它的家庭作业问题以及问题OP的描述。那是罕见的景象+1.