Программа обратной строки - PullRequest
0 голосов
/ 11 ноября 2011

Я написал короткую строковую обратную программу на C ++.Я решил написать это на Java, и я так и сделал.Однако, как только я закончил писать программу, я обнаружил несколько ошибок, которые я пытался исправить, но не могу исправить.Одной из ошибок было исключение ArrayOutOfBounds.Пожалуйста, помогите мне исправить ошибки.Программа на C ++ работала нормально.Ниже приведен код Java.Обратите внимание, что я не хочу использовать встроенные функции.

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
      Scanner scan = new Scanner(System.in);
      String word;
      int i = 0;
      boolean inp = true;
      System.out.println("Enter one or more words to be reversed:");
      word = scan.nextLine();
      char wordArray[] = word.toCharArray();
      while(wordArray[i]!='\0')
          i++;
      while(inp == true){
          i--;
          System.out.println(wordArray[i]);
          if(i==0){
              System.out.println();
              break;
          }
        }
     }
  }

Ответы [ 4 ]

8 голосов
/ 11 ноября 2011

В строках Java нет завершающего ноль символа;у них есть метод length(), который вы должны использовать для определения длины.

Кроме того, цикл while будет более идиоматичным, как:

while (true) {
    ...
}

Или как простой цикл for.

2 голосов
/ 11 ноября 2011

Это еще одна возможность, возможно, проще:

public String reverse(String str) {
    char[] chars = str.toCharArray();
    int n = chars.length;
    for (int i = 0; i < n/2; i++) {
        char tmp = chars[i];
        chars[i] = chars[n-i-1];
        chars[n-i-1] = tmp;
    }
    return new String(chars);
}

И хотя вы упомянули, что не хотите использовать встроенные функции, наиболее идиотский способ будет таким:

public String reverse(String str) {
    return new StringBuilder(str).reverse().toString();
}
0 голосов
/ 11 ноября 2011

Строки Java не заканчиваются нулем, поэтому байтовый массив, созданный из строки, также не является.Вы использовали цикл для определения длины вашего массива, но этот цикл не находит байт со значением 0, поэтому он выходит за пределы диапазона.Вместо этого используйте word.length().

Второе: вы использовали System.out.println для печати символа - который вставляет разрыв строки после каждого символа.Это предназначено?

0 голосов
/ 11 ноября 2011

строки в java не обязательно заканчиваются нулем, вы должны использовать метод String.length (), чтобы узнать, как долго это будет.

...