這是我使用集合和掃描儀引數創建的代碼。我一直很困惑將它組合成遞回,我使用了迭代。
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Deque deque = new LinkedList<>();
Scanner sc = new Scanner(System.in);
System.out.println("Enter your words (type R to reverse):");
while(sc.hasNext()) {
String line = sc.next();
if(line.toLowerCase().equals("r")) {
break;
}
deque.add(line);
}
System.out.println("\n===== Reversed Lines =====\n");
Iterator reverse = deque.descendingIterator();
while (reverse.hasNext()) {
System.out.println(reverse.next());
}
}
}
uj5u.com熱心網友回復:
首先,快速回顧一下遞回。
每個遞回方法都由兩部分組成:
- 基本情況- 表示一個簡單的邊緣情況(遞回終止時的條件),其結果是預先知道的。
- 遞回案例- 解決方案的一部分,其中遞回呼叫和主邏輯駐留。
您可以將負責讀取用戶輸入的代碼提取到單獨的方法中,并while用遞回呼叫替換回圈。
基本情況由兩種情況表示:sc.hasNext()產量false和用戶輸入等于"r"。否則,該行將被添加到佇列中并進行新的遞回呼叫。
并且列印佇列中的內容也可以遞回完成。此方法的基本情況是何時reverse.hasNext()回傳false。在遞回情況下,將列印下一個元素,并進行后續的遞回呼叫。
因此,為了能夠使用Scanner,Queue您可以將它們作為引數傳遞或使它們全域可訪問。
由于此任務的要求,Scanner并且Queue在方法內部本地宣告readAndPrint()并作為方法的引數readInput()。
public class Main {
public void readAndPrint() {
Scanner sc = new Scanner(System.in);
Deque<String> deque = new LinkedList<>();
System.out.println("Enter your words (type R to reverse):");
readInput(sc, deque); // recursive helper-method that read from the console
System.out.println("\n===== Reversed Lines =====\n");
print(deque.descendingIterator()); // recursive helper-method that prints to the console
}
public static void print(Iterator<String> reverse) {
if (!reverse.hasNext()) { // base case
return;
}
System.out.println(reverse.next());
print(reverse); // recursive call
}
public void readInput(Scanner sc, Deque<String> deque) {
if (!sc.hasNext()) { // base case
return;
}
String line = sc.next();
if (line.equalsIgnoreCase("r")) { // base case
return;
}
deque.add(line);
readInput(sc, deque); // recursive call
}
public static void main(String[] args) {
ri.readAndPrint();
}
}
輸出
Humpty Dumpty sat on a wall R
===== Reversed Lines =====
wall
a
on
sat
Dumpty
Humpty
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440053.html
標籤:爪哇 算法 递归 收藏品 java.util.scanner
上一篇:為什么這種(??可能更有效的)動態演算法被樸素的遞回版本優于?
下一篇:遞回查找物件屬性的路徑
