【问题标题】:Reverse number _order_ from a scanner input recursively从扫描仪输入递归地反转数字_order_
【发布时间】:2017-08-30 10:32:52
【问题描述】:

我在尝试解决递归分配时遇到了麻烦并且没有成功。

赋值的目的是调用函数

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();
   }
}

【问题讨论】:

  • 家庭作业问题,试图解决它并描述 OP 面临的问题。那是罕见的景象。 +1

标签: java recursion java.util.scanner


【解决方案1】:

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

请记住 Java evaluates operands left-to-right。因此,它在scan.nextInt() 之前评估reverseNumbers(scan)

这意味着它将继续:

  • 看到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()),因此您检测到扫描仪“有”的值赢了'不会再次被检测到。

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 2011-08-23
    • 1970-01-01
    • 2016-06-20
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多