如何使用递归来反转文本?

时间:2013-03-14 00:01:12

标签: java recursion

import java.util.*;
public class RecursionProject {
  public static void main(String[]args) {
    getLine(); 
    useRecursion();
  }
  public static void getLine() {

    System.out.println("This program uses recursion.") ;
    System.out.println("Would you like to see how it works?") ;
    System.out.print("If yes, type yes, else type no -----> ");
    String userResponse = null;
    Scanner in = new Scanner(System.in);
    userResponse = in.next();
    System.out.println(userResponse);
    if (userResponse.equalsIgnoreCase("yes")) {
      System.out.println() ;
    }
    else {
      System.out.println("Thank you for using this program.");
      System.exit(0);
    }

  }
  private static void useRecursion(){
    System.out.println("Type in what you would like to see") ; 
    System.out.println("done recursively. (This program ") ;
    System.out.println("excludes white spaces):") ;
    String s = null ; 
    Scanner console = new Scanner(System.in) ;
    s = console.next() ; 
    if (s.isEmpty()) {
      System.out.print(" - ") ;

    }
    else {
      System.out.println("0") ;
    }
  } 
}

到目前为止这是我的代码。我的任务是从控制台读取输入,然后使用递归反转相位。即,如果用户输入“动物”,它将打印出“slamina”到屏幕。 我理解我的基本情况是如果该行是空的,我的递归情况是该行中有文本。 这是一个Programming 2类,在Eclipse 4.2.2上使用Java

3 个答案:

答案 0 :(得分:0)

StringBuffer有一个内置的reverse()方法,所以只需使用它。

以下是如何撤销诸如“Hello World”之类的String

String source = "Hello World";

    for (String word : source.split(" ")) {
        System.out.print(new StringBuffer(word).reverse().toString());
        System.out.print(" ");
    }

输出:

olleH dlroW 

这是家庭作业,所以我不打算为你做。基本上,要使其递归,您需要创建一个接受String(或带有可变arity参数的多个Strings)的方法,然后使用我的代码逻辑来反转String或{ {1}},并返回它们。然后,每次需要转换Strings时,您都可以调用该方法。

答案 1 :(得分:0)

很难提供既有用又无法为你做功课的东西。我会尝试,但我不会给你工作代码。

从这样的事情开始:

public static final String reverse ( String s ) {
  if ( s != null && s.length() > 1 ) {
    return (lastChar(s) + allButLastChar(s));
  }
  return s;
}

编写lastCharallButLastChar,运行代码并查看其功能。下一步取决于你,但它应该是显而易见的。

答案 2 :(得分:0)

通常使用递归,您将拥有一个自我调用的函数。你不需要递归来反转字符串,但我想你可以有一个带字符串的函数,并将字符串的第一个字符追加到其余部分的反面。

我会尝试解释这是如何工作的,而不会给出太多代码。

所以说你有一个函数reverse可以反转一个字符串。在其中你可以说:

return reverse(myString.substring(1)) + myString[0];

当你在字符串Hello上调用它时,它的工作原理如下:

reverse("Hello")
-> reverse("ello") + "H"
-> reverse("llo") + "e" + "H" 
-> reverse("lo") + "l" + "e" + "H" 
-> reverse("o") + "l" + "l" + "e" + "H" 
-> "o" + "l" + "l" + "e" + "H"

当字符串为空时,它需要切断递归。