为什么我在使用递归时会收到此错误消息?

时间:2014-02-16 22:00:58

标签: java string recursion

我收到了这条消息:当我完成解析有关在递归循环中反向打印字符串的练习时,作业的左侧必须是变量。 我只是想知道是否有人可以提供解释? 错误信息出现在最后一行......我不明白,为什么? 有我的代码:

import java.util.Scanner;

public class Excersise {

    public static void main(String[] args) {

        // Create a Scanner
        Scanner input = new Scanner(System.in);
        //Prompt the user to enter a string
        System.out.print("Enter a string: ");
        String s = input.nextLine();
        reverseDisplay(s);

    }

    public static void reverseDisplay(String value) {

        //Base case
        if (value.length() < 2) { 
            System.out.println(value);
        } else {
            //Recursion
            reverseDisplay(value.substring(1)) + value.charAt(0); <--error

        }
    }
}

2 个答案:

答案 0 :(得分:1)

import java.util.Scanner;
public class Exercise {
    public static void main(String[] args) {
        // Create a Scanner
        Scanner input = new Scanner(System.in);
        //Prompt the user to enter a string
        System.out.print("Enter a string: ");
        String s = input.nextLine();
        reverseDisplay(s);
        System.out.println();
    }
    public static void reverseDisplay(String value) {
        //Base case
        if (value.length() < 2) { 
            System.out.print(value);
        } else {
            //Recursion
            //calls for string without first char
            reverseDisplay(value.substring(1));
            //prints first char
            System.out.print(value.charAt(0));
        }
    }
}

这很有效。你的递归方法是在正确的轨道上,但你想在字符串的其余部分调用方法后打印第一个字符。我还在main的末尾添加了另一个println,因此反转的字符串将出现在它自己的行上 您得到的编译器错误是因为编译器认为该行应该是一个赋值(如int a = b + c)并且没有看到=。

答案 1 :(得分:0)

您需要将方法的返回类型更改为String并将其返回并在主方法中打印

public class Exercise{

public static void main(String[] args) {

    // Create a Scanner
    Scanner input = new Scanner(System.in);
    //Prompt the user to enter a string
    System.out.print("Enter a string: ");
    String s = input.nextLine();
    System.out.println(reverseDisplay(s));

}

public static String reverseDisplay(String value) {

    //Base case
    if (value.length() < 2) { 
        return value;
    } else {
        //Recursion
        return reverseDisplay(value.substring(1)) + value.charAt(0);

    }
}

}