2014-02-16 29 views
0

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

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 

     } 
    } 
} 
+3

reverseDisplay的返回类型为'void'打印。为char添加一个空值意味着什么? – FDinoff

+0

再次查看此行** reverseDisplay(value.substring(1))+ value.charAt(0); ** < - 错误...您将一个空值添加到char! – Scorpion

+1

我认为你应该用两行代替最后一行:'reverseDisplay(value.substring(1));'然后'System.out.print(value.charAt(0));'并且将'println'改为'if'分支中的'print'。 –

回答

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),并没有看到an =。

0

您需要在方法的返回类型更改为字符串,返回它在你的主要方法

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); 

    } 
} 

}