2014-02-16 30 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); 

    } 
} 

}