2013-11-01 9 views
0
package test; 

import java.util.Scanner; 

public class Char { 
    public static void main(String[] args) { 
    char c = 0; 
    Scanner scan = new Scanner(System.in); 
    printeaza(c, scan); 
} 

public static char printeaza(char c, Scanner sc) { 
    c = sc.next().charAt(0); 
    if (sc.hasNext()) { 
     System.out.println(printeaza(c, sc)); 
     return c; 
    } else { 
     return c; 
    } 
} 
} 

То, что я пытаюсь сделать, это напечатать буквы с клавиатуры, а затем их перевернуть в обратном порядке. Я знаю, что это может быть сделано очень легко с помощью циклов for и char, но мне любопытно сделать это рекурсивно и использовать только одну переменную char. Я почти сделал это, но кажется, что он печатает все, кроме первой буквы.Java recursive System.out.println()

Так что, если я набираю: «a s d f» вместо «f d s a», я получаю только «f d s». Я думаю, что я знаю, почему это происходит потому, что заявление Println находится только внутри оператора if, но я как бы запускаю идеи о том, как заставить функцию «поймать» первую букву. Надеюсь, вы можете посмотреть, спасибо!

+3

'printeaza' не нуждается в параметре char. Первое, что вы делаете в методе, - это перезаписать его. – Cruncher

+0

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

+0

Я не просил людей отлаживать код для меня. Я просто просил идее, потому что я застрял. Я не очень опытен в «мышлении с рекурсией». В любом случае спасибо за то, что вы ничего не сказали. Вы получаете баллы за ответ? – erasmus77

ответ

2

Проблема заключается в том, что вызов printeaza не печатает свои собственные характер, это только рекурсивный вызов.

Другими словами, printeaza(c, scan); в main должно быть изменено на System.out.println(printeaza(c, scan);

Кроме того, я просто хотел бы отметить, что с помощью рекурсивных вызовов для пользовательского ввода, как это не очень хорошая идея, чтобы быть честным. :/

+0

Спасибо, это правильный ответ! – erasmus77

3

Ваш первый звонок printeaza(c, scan) (изготовлен из public static void main) должен быть обернут с помощью System.out.println(..).

Как это:

package test; 

import java.util.Scanner; 

public class Char { 
    public static void main(String[] args) { 
     char c = 0; 
     Scanner scan = new Scanner(System.in); 
     System.out.println(printeaza(c, sc)); // <-- changed line 
    } 

    public static char printeaza(char c, Scanner sc) { 
     c = sc.next().charAt(0); 
     if (sc.hasNext()) { 
      System.out.println(printeaza(c, sc)); 
      return c; 
     } else { 
      return c; 
     } 
    } 
} 

Включение советуют CruNcher, я бы написал так:

package test; 

import java.util.Scanner; 

public class Char { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println(printeaza(sc)); 
    } 

    public static char printeaza(Scanner sc) { 
     char c = sc.next().charAt(0); 
     if (sc.hasNext()) { 
      System.out.println(printeaza(sc)); 
     } 
     return c; 
    } 
} 
+0

Ты прибил его! Спасибо за подробный ответ. – erasmus77