2015-07-12 2 views
2

Я написал код рекурсии, но я не знаю, почему это не будет работать. (Я изменил некоторые из предыдущих ошибок, но он все равно не будет работать :()Простой код рекурсии, что не будет работать

проблема заключается в том:

Написать рекурсивный метод, который

печатает каждый символ строки обращенно дважды б doubleReverse («привет») печатает oolllleehh

код у меня есть до сих пор.. как указано ниже:

public class Recursion{ 
    public static void main(String[] args) { 
     String s = "hello"; 
     doubleReverse(s); 
    } 

    public static void doubleReverse(String s) { 
     if (s == null || s.equals("")){ 
     return; 
    } 

    System.out.print(s.charAt(s.length()-1) + s.charAt(s.length()-1) + doubleReverse(s.substring(1))); 
    } 
} 

Ожидаемый результат doubleReverse("hello") печатает oolllleehh

Выход я получаю: не будет компилировать

сообщение

Ошибка: найдено

2 ошибки:

File: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java [line: 12] 
Error: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java:12: reference to print is ambiguous, both method print(char[]) in java.io.PrintStream and method print(java.lang.String) in java.io.PrintStream match 

File: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java [line: 12] 
Error: /Users/jaeahn/Desktop/CSCI /Practice/Recursion.java:12: 'void' type not allowed here 
+1

Ну вы не можете вернуть 'void' на' метод String' –

+0

's == ""', что теперь, как мы должны сравните строки: http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java – Pshemo

+0

Этот код ничего не печатает, вы забыли вставить больше кода? –

ответ

4

Вам не нужно ничего возвращать, но вам нужно передавать меньшую версию строки каждый раз, пока вы не напечатали все ваши персонажи. Вот одна реализация ...

public static void recurse(String str){ 
    if(str.length() > 0) { 
     System.out.print(str.charAt(str.length()-1)); 
     System.out.print(str.charAt(str.length()-1)); 
     recurse(str.substring(0, str.length() - 1)); 
    } 
} 
+0

Рекурсивный метод должен иметь базовый регистр, иначе ваш метод никогда не закончится ... в нашем примере базовый случай представляет собой пустую строку – Constantin

+0

. Вы неявно подразумеваете базовый случай в своем коде, установив str.length() больше, чем 0? – CMSC

+0

длина нашей строки становится все меньше и меньше, потому что в рекурсивном вызове мы отрубаем последний символ, и поэтому длина короче на каждый каждый раз. В конце концов, строка пуста, и в этом случае наш базовый регистр достигнут, и мы прекращаем рекурсию. – Constantin

0

Ваша программа содержит ошибки, потому что пустота метод возвращает объект «нуль»:

public static void doubleReverse(String s) { // <-- void method. 
    if (s == null || s.equals("")) { 
     return;         // <-- return object "null". 
    } 
} 

В этом случае вам не нужно рекурсии.

public class Solution { 

    public static String reverseWords(String sentence) { 
     String[] parts = sentence.split(""); 
     StringBuilder builder = new StringBuilder(); 
     builder.append(parts[parts.length - 1]).append(parts[parts.length - 1]); 
     for (int i = parts.length - 2; i >= 0; --i) { 
      builder.append("").append(parts[i]).append(parts[i]); 
     } 
     return builder.toString(); 
    } 

    public static void main(String[] args) { 
     System.out.println(reverseWords("hello")); 
    } 

} 

// Result: 
// oolllleehh 


если вы хотите использовать recurison

public class Solution { 

    public static String reverse(String str) { 
     String reverse = ""; 
     if (str.length() == 1) { 
      return (str + str); 
     } else { 
      reverse += str.charAt(str.length() - 1); 
      reverse += str.charAt(str.length() - 1) + reverse(str.substring(0, str.length() - 1));    
      return reverse; 
     } 
    } 

    public static void main(String[] args) { 
     System.out.println(reverse("hello")); 
    } 

} 

// Result: 
// oolllleehh 
Смежные вопросы