在java中使用递归来反转句子

时间:2015-04-02 01:27:34

标签: java recursion

我正在尝试使用递归来反转句子并向后打印出来。现在在它提示我输入一个句子之后,它不允许我输入任何输入并结束。 sc.nextLine()有什么问题吗?如何将句子输入为字符串。

private static void testNum3() 
    {
        System.out.print("Type in a sentence:");
        String sentence= sc.nextLine();
        System.out.println(reverse(sentence));

    }

    public static String reverse (String sentence)
    {
        if (sentence.length()== 0) 
            return sentence;

        return reverse(sentence.substring(1)) + sentence.charAt(0);
    }

2 个答案:

答案 0 :(得分:0)

  

我在其他地方使用sc.next()。他们都必须一样吗?

不,但你必须小心处理EOL或" End-Of-Line"令牌正确。如果你打电话给sc.next()并留下一个悬空的EOL令牌,那么它将被吞下#34;下次你打电话sc.nextLine()阻止你收到输入。

一种解决方案:当您需要处理EOL令牌时调用sc.nextLine()

例如,如果您从用户那里获得了一个int并且唯一输入了该行,有时您必须这样做:

int myVar = sc.nextInt();
sc.nextLine();  // swallow dangling EOL token with this call

// now you can safely call this below
String myString = sc.nextLine();

答案 1 :(得分:-1)

试一试

import java.io.IOException;
import java.util.Scanner;

public class CoreJavaTest {

    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        Scanner sc = new Scanner(System.in);
        String sentence = "";
        while (true) {
            System.out.print("Enter sentence:");
            sentence = sc.nextLine();

            if (sentence.equals("exit")) {
                System.out.println("Exiting...");
                break;
            }

            reverse(sentence);
            System.out.println("");
        }

    }

    public static void reverse(String args) {
        if (args.length() != 0) {
            System.out.print(args.charAt(args.length() - 1));
            reverse(args.substring(0, args.length() - 1));
        }
    }

}