2014-02-16 4 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'. Что значит добавить пустоту в символ? – FDinoff

+0

снова просмотрите эту строку ** reverseDisplay (значение.substring (1)) + значение.charAt (0); ** <- ошибка ... вы добавляете пустоту в символ! – Scorpion

+1

Я думаю, что вы должны заменить эту последнюю строку двумя строками - 'reverseDisplay (value.substring (1));' и затем 'System.out.print (value.charAt (0));' и также изменить 'println' на 'print' в ветке' if'. –

ответ

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

Это работает. Ваш подход к рекурсии был на правильном пути, но вы хотите напечатать первый символ после вызова метода в остальной части строки. Я также добавил еще один println в конце main, поэтому обратная строка появлялась в отдельной строке.
Ошибка компилятора была связана с тем, что компилятор считал, что линия должна быть назначением (например, int a = b + c) и не увидела an =.

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

    } 
} 

}

Смежные вопросы