Как я могу напечатать строку в обратном порядке без локальных переменных по одному символу за раз

Я должен создать рекурсивный метод, который будет принимать строку. он не может хранить любые строки в этом методе.

public static String printBackwards(String s)
{

    if (s.length() == 0) 
    {
        return s;
    }
    else
    {
        return printBackwards(s.substring(1)) + s.charAt(0);
    }
}

Это то, что я имею до сих пор

Пример Я ввожу строку с надписью " Hello ", она возвращается в терминал o l l e h

2 ответа

Решение

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

public static void printBackwards(String s) {
    if (s.length() != 0) {
        printBackwards(s.substring(1));
        System.out.println(s.charAt(0));
    }
}

Это должно работать. Тем не менее, я добавил некоторые...... небольшие ошибки в комментарии, чтобы вы не могли просто скопировать и вставить их. Ты лучше найди их, прежде чем включить это - и не смей включать это без комментариев;)

Примечание. Это не сохраняет начальные пробелы. Вы можете добавить это в качестве упражнения.

import static java.lang.System.out;

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;

public class Reverse {

  private static void printBackwards(String line) {

    if (line.length() == 0) {
      /* We are at the end of the line, we can continue */
      out.println();
      return;
    }
    /* We print the _last_ character of the string.
     * Remember, indices start at 0! */
    out.print(line.charAt(line.length() - 1));

    /* We reverse the part of the string we haven't printed */
    printBackwards(line.substring(0, line.length() - 1));
  }

  public static void main(String[] args) {

    /* If we don't have anything to input, no action is needed */
    if(args.length > 0) {

      /* Kind of a bonus: Any number of files can be processed */
      for(int a = 0; a<= args.length-1; a++){

        /* We need to construct a Path, since BufferedReader requires one */
        Path path = FileSystems.getDefault().getPath(args[a]);

        /* We do not initialize, as we want line to be null if the line.read() fails */
        String line;

        try {

          /* We construct a BufferedReader, which is pretty fast even for large text files */
          BufferedReader reader = Files.newBufferedReader(path, Charset.forName("UTF-8"));

          /* Next, we read each line... */
          while ((line = reader.readLine()) != null ) {
            /* ... and have it reversed */
            printBackwards(line);
          }
        } catch (IOException ex) {
          out.print("Something went wrong during line read or during creation of BufferedReader");
          ex.printStackTrace();
        }
      }
    }
  }
}
Другие вопросы по тегам