2013-11-03 6 views
1

Я хочу напечатать предложение символами каждого слова назад.Обратное каждое слово в предложении

Пример: Лиса перепрыгнула через забор.

Становится: ehT xof depmuj revo eht ecnef.

Я могу только отменить первое слово, а затем он дал мне ArrayIndexOutOfBoundsException.

+0

Там должно быть каждое слово * * в предложении, название тоже вводит в заблуждение – Evgeny

ответ

3

Некоторые изменения должны быть сделаны для вас код:

1.Change sentence.length() с words.length

2.Use read.nextLine();, чтобы получить предложение в качестве входных данных

попробовать

import java.util.Scanner; 
import java.util.Stack; 

public class test { 
    public static void main(String[] args) { 
     Scanner read = new Scanner(System.in); // Error in line 11 
     System.out.print("Enter a sentence: "); 
     String sentence = read.nextLine(); 
     boolean containsPeriod= false; 
     if (".".equals(sentence.substring(sentence.length()-1,sentence.length()))){ 
       sentence = sentence.substring(0,sentence.length()-1); 
       containsPeriod=true; 
      } 


     String[] words = sentence.split(" "); 
     for (int i = 0; i < words.length; i++) { 
      String word = words[i]; // Error in line 23 
      System.out.print(reverseWord(word)); 
      if(i!=words.length-1) 
       System.out.print(" "); 
     } 
     if(containsPeriod) 
      System.out.print("."); 
     read.close(); 
    } 

    private static String reverseWord(String sentence) { 
     Stack<Character> rev = new Stack(); 
     for (int ii = 0; ii < sentence.length(); ii++) { 
      rev.push(sentence.charAt(ii)); 
     } 
     String out = ""; 
     while (rev.size() != 0) { 
      out += rev.pop(); 
     } 
     return out; 
    } 
} 
+0

Есть ли способ, которым я могу получить период, чтобы оставаться в конце предложения? Так или иначе, когда у меня есть период в конце, этот период был засчитан как часть последнего слова, и поэтому он был отменен вместе с последним словом. – Drews

+0

сделали проверку обновления сейчас – upog

+0

Извините, но где именно я помещаю containsPeriod? – Drews

4

Попробуйте выполнить простой код. Это гораздо проще:

String[] words = sentence.split(" "); 
for (String word : words) { 
    System.out.print(new StringBuilder(word).reverse() + " "); 
} 
+0

Это хороший ответ. +1. Могут ли downvoters объяснить их проблемы? –

+0

Обычно, когда задаются такие вопросы, ожидается, что собеседник предоставит алгоритмический подход. Приятно упомянуть оба подхода! – xploreraj

2

Заменить sentence.length() с words.length в первом for цикле.

Вы хотите повторить этот цикл один раз за слово в предложении; но код, который вы написали, повторяет его один раз за письмо в предложении. Это ваша ошибка.

0

Попробуйте это

public static void main(String args[]) { 
     String input = "The fox jumped over the fence"; 
     StringBuilder sbReverseSentance = new StringBuilder(); 
     String words[] = input.split(" "); 
     for (String word : words) { 
      for (int i = word.length() - 1; i >= 0; i--) { 
       sbReverseSentance.append(word.charAt(i)); 
      } 
       sbReverseSentance.append(" "); 
     } 
     System.out.println (sbReverseSentance.toString()); 
    } 
0

Попробуйте это, он не обрабатывает знаки препинания.

import java.util.Scanner; 

public class Test { 

public static void main(String[] args) { 
    Scanner read = new Scanner(System.in); 

    System.out.print("Enter a sentence: "); 
    String sentence = read.nextLine(); 

    String[] words = sentence.split(" "); 

    String[] reversed_words = new String[words.length]; 

    for (int i = 0; i < words.length; i++) { 
     reversed_words[i] = reverseWord(words[i]); 
    } 

    for (int i = 0; i < reversed_words.length; i++) 
     System.out.println(reversed_words[i]); 

} 

private static String reverseWord(String word) { 
    String result = ""; 
    char[] array = word.toCharArray(); 
    for (int i = array.length - 1; i >= 0; i--) { 
     result += array[i]; 
    } 
    return result; 
} 
} 
1

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

import java.util.ArrayDeque; 
import java.util.Deque; 
import java.util.Scanner; 

public class Query1 { 
    public static void main(String[] args) { 
     Scanner read = new Scanner(System.in); // Error in line 11 

     System.out.print("Enter a sentence: "); 
     // String sentence = read.next(); 
      // read full line here instead of just one word 
     String sentence = read.nextLine(); 
     String[] words = sentence.split(" "); 
      // this looks goes to array length 
     // for (int i = 0; i < sentence.length(); i++) { 
     for (int i = 0; i < words.length; i++) { 
      String word = words[i]; // Error in line 23 
      // System.out.println(reverseWord(word)); 
        // use print not println 
      System.out.print(reverseWord(word)); 
        // this loop is not at all required 
      // for (i = 0; i < words.length - 1; i++) { 
      // System.out.println(" "); 
      // } 
      System.out.print(" "); 
     } 

    } 

    private static String reverseWord(String sentence) { 
     Deque<Character> rev = new ArrayDeque<Character>(); 
     // ArrayStack<Character> rev = new ArrayStack<Character>(); 

     for (int ii = 0; ii < sentence.length(); ii++) { 
      rev.push(sentence.charAt(ii)); 
     } 
     String out = ""; 
     while (rev.size() != 0) { 
      out += rev.pop(); 

     } 

     return out; 
    } 
} 
+0

Добро пожаловать в SO! Аналогичный вопрос. Позже вы можете проголосовать, чтобы закрыть. Удачи! –

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