递归地反转扫描仪输入的数字_order_

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)

And*_*ner 5

问题是您在从扫描仪读取数字之前正在递归.

请记住,Java 从左到右评估操作数.所以,它reverseNumbers(scan)之前评估过scan.nextInt().

这意味着它将继续:

  • 看见那个 scan.hasNext()
  • 调用 reverseNumbers
  • 看见那个 scan.hasNext()
  • 调用 reverseNumbers
  • 看见那个 scan.hasNext()
  • 调用 reverseNumbers
  • ...

scan.hasNext()在进行递归调用之前进行评估:

int next = scan.nextInt();
return reverseNumbers(scan) + " " + next;
Run Code Online (Sandbox Code Playgroud)

现在,您正在消耗您正在检测的值hasNext()(hasNextInt()顺便说一下;或者使用String next = scan.next()),因此检测到扫描仪"has"的值将不会再次被检测到.