2016-02-12 6 views
-2

Строки должны считываться от пользователя до тех пор, пока не будет введена дозорная колонка «DONE», после чего они будут отображаться в обратном порядке. Не печатайте слово «DONE»с использованием java.util.Stack print line текстов в обратном порядке

вот мой код до сих пор я не знаю, как получить все это работать вместе, я знаю, я был overthinking это, но любая помощь будет оценена

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

public class Turner_A05Q3{ 
    public static void main(String[] args) { 
     Stack<String> stack = new Stack<String>(); 
     ArrayList<String> list = new ArrayList<String>(); 
     System.out.println("Enter text, or done to stop"); 
     Scanner scanner = new Scanner(System.in);  
     List<String> al = new ArrayList<String>(); 
     String word;         
     while (scanner.hasNextLine()) {    
      word = scanner.nextLine();     
      if (word != null) {       
       word = word.trim();      
       if (word.equalsIgnoreCase("done")) {  
        break;         
       } 
       al.add(word);        
      } else { 
       break;         
      } 
     } 
     for (int i=0;i<word.length();i++){ 
      stack.push(word.substring(i,i+1)); 
     } 
     String wordrev = ""; 
     while(!stack.isEmpty()){ 
      wordrev += stack.pop(); 
     } 
     System.out.println("Reverse of the text \"" + wordrev);      
    } 
} 
+0

Являются ли предложения предположительными b e отображается в обратном порядке ввода или каждая строка должна быть перевернута - например, «Некоторый ввод» становится «tupni emoS»? –

+0

Форматирование этого кода затруднено. Помимо этого, что вы просите? Что работает/не работает? – Whymarrh

+0

https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html#reverse() может быть полезно –

ответ

0

Попробуйте написать свой цикл, как это:

for (int i = word.length(); i > 0; i--) { 
     stack.push(word.substring(i-1, i)); 
    } 

Вход:

DONE 

Выход:

DONE 
0

Вы всегда работаете с последним словом (сделано), потому что вы не используете al вы используете только последнее содержимое переменной word.

Вы должны перебрать al

Try:

import java.util.Scanner; 
import java.util.Stack; 
import java.util.ArrayList; 
import java.util.List; 

public class Turner_A05Q3{ 
    public static void main(String[] args) { 
     Stack<String> stack = new Stack<String>(); 
     System.out.println("Enter text, or done to stop"); 

     Scanner scanner = new Scanner(System.in);  
     List<String> al = new ArrayList<String>(); 
     String word=null;   

     while (scanner.hasNextLine()) {    
      word = scanner.nextLine();     
      if (word != null) {       
       word = word.trim();      
        if (word.equalsIgnoreCase("done")) {  
         break;         
        } 
       al.add(word);        
      }else { 
       break;         
      } 
     } 

     for(int j=0;j<al.size();j++){ 
      word = al.get(j);  
      for (int i=0;i<word.length();i++){ 
       stack.push(word.substring(i,i+1)); 
      } 

      String wordrev = ""; 
      while(!stack.isEmpty()){ 
       wordrev += stack.pop(); 
      } 
      System.out.println("Reverse of the text \"" + wordrev);      
     } 
    } 
} 

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

public static void main(String[] args) { 
    Stack<String> stack = new Stack<String>(); 
    System.out.println("Enter text, or done to stop"); 

    Scanner scanner = new Scanner(System.in);  
    String word=null;   

    while (scanner.hasNextLine()) {    
     word = scanner.nextLine();     
     if (word != null) {       
      word = word.trim();      
       if (word.equalsIgnoreCase("done")) {  
        break;         
       } 
      stack.push(word);        
     }else { 
      break;         
     } 
    } 

    while(!stack.isEmpty()){ 
     System.out.println("Reverse of the text \"" + stack.pop()); 
    } 
} 

Помните, что Stack - LIFO (последний в первом выводе)

+0

Большое вам спасибо, просто любопытно, как бы вы изменили его, чтобы показать слова в обратном порядке не символы, я не понимаю, как сказать программе сделать это – zompire

+0

@zompire посмотреть мое редактирование –