2017-08-30 62 views
4

我在嘗試解決遞歸分配時遇到了問題,並且沒有成功。遞歸地從掃描儀輸入反向編號

分配的目的是在不被允許使用數組,列表,字符串和方法應該只定義一個變量調用函數

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

嘗試解決問題的作業問題以及問題OP的描述正在面臨。這是罕見的景象。 +1 – Pshemo

回答

5

問題是您在從掃描儀讀取數字之前遞歸。

請記住,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()),因此您檢測到掃描儀「有」的值將不會再次被檢測到。