2013-08-07 3 views
1

Я очень новичок в Java и пытаюсь создать программу для перевода предложения в Pig Latin, перемещая первую букву слова до конца и добавляя «y» в конец if первое письмо было гласным и «ай» в конце в противном случае. Я должен использовать для этого очередь. В настоящее время моя программа просто заканчивается, и мне было интересно, сможет ли кто-нибудь определить, где я иду, или куда идти дальше. Благодаря!Java Pig Latin translation translation using Queues

импорт MyQueue.QueueList; импорт java.util.Scanner;

общественного класса PigLatin {

public static void main (String[] args) 
{ 


    Scanner scan = new Scanner (System.in); 

    QueueList word = new QueueList(); 

    String message; 
    int index = 0; 
    char firstch; 
    System.out.print ("Enter an English sentence: "); 
    message = scan.nextLine(); 
    System.out.println ("The equivalent Pig Latin sentence is: "); 

    firstch = Character.toLowerCase(message.charAt(0)); 


      if (firstch != 'a' && firstch != 'e' && firstch != 'i' && firstch != 'o' && firstch != 'u' 
        && firstch != ' ') 
       { 
        for (index = 1; index < message.length(); index++) 

         { 
          word.enqueue(new Character(message.charAt(index))); 
         } 

        word.enqueue(new Character (firstch)); 
        word.enqueue(new Character ('a')); 
        word.enqueue(new Character ('y')); 
        word.enqueue(new Character(' ')); 

       } 

      else if (firstch == 'a' || firstch == 'e' || firstch == 'i' || firstch == 'o' || firstch == 'u') 
      { 
       while (message.charAt(index) != ' ') 
       { 
       for (index = 1; index < message.length(); index++) 
         { 
          word.enqueue(new Character(message.charAt(index))); 
         } 
       } 
       word.enqueue((firstch)); 
       word.enqueue(('y')); 
       word.enqueue((' ')); 
      } 
      else if (message.charAt(index) == ' ') 
      { 
       index++; 
       firstch = message.charAt(index); 
      } 



    while (!word.empty()) 
     System.out.print(word.dequeue()); 

} 

}

А вот класс QueueList из пакета MyQueue:

// QueueList.java 
// 
// Class QueueList definition with composed List object.  

package MyQueue; 

public class QueueList { 

    private List a_queue; 

    public QueueList() { 
     a_queue = new List("queue"); 
    } 

    public Object peek() throws EmptyListException { 
     if (a_queue.isEmpty()) 
      return null; 
     else 
      return a_queue.getFirstObject(); 
    } 

    public void print() { 
     a_queue.print(); 
    } 

    public void enqueue(Object object) { 
     a_queue.insertAtBack(object); 
    } 

    public Object dequeue() throws EmptyListException { 
     return a_queue.removeFromFront(); 
    } 

    public boolean empty() { 
     return a_queue.isEmpty(); 
    } 

} 
+2

Не могли бы вы запустили форматтер на свой код? Трудно отследить ваши условности. – chrylis

+0

Отступы фиксированные. Отступ ctrl-k не очень хорошо работает с вкладками, извинения за удаление первого редактирования. –

+0

Благодарим вас за помощь в отступлении. Я отредактировал его до последней версии моей программы, которая в настоящее время не переводится и вместо этого выводит именно то, что было введено. – user2659030

ответ

2

Вы не сбросить индекс 0 до ввода второй в то время как цикл. Начиная с index == message.length() после завершения первого цикла, второй цикл немедленно завершается.

Редактировать: Re: Ваше последнее обновление.

В вашем втором цикле вы только выгружаете первые символы message.length() из очереди слов. Если вы добавили - до конца, вы не увидите этого. Вместо петля по длине очереди, а не длине входного сообщения:

while (!word.empty()) 
    System.out.print(word.dequeue()); 

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

+0

Я исправил это (спасибо вам большое за то, что поймал его) и загрузил отредактированную версию, но моя программа только печатает предложение, которое я вводил с первой буквой предложения в конце. Какие-либо предложения? – user2659030

+0

Спасибо, Джейсон. Я не совсем уверен, как обрабатывать отдельные слова, но будет изучать его. – user2659030

+0

У меня вопрос о моих циклах. Являются ли они неправильными, потому что я не должен устанавливать index = 1 для обработки отдельных слов? – user2659030