Java Pig拉丁语句子翻译使用队列

我是Java的新手,我正在尝试创建一个程序,将一个句子翻译成Pig Latin,将单词的第一个字母移到最后,如果第一个字母是元音,则在末尾添加“y”并且“ay”最后,否则。 我需要为此使用队列。 目前我的计划正在终止,我想知道是否有人能够找到我出错的地方或下一步去哪里。 谢谢!

import MyQueue.QueueList; import 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()); } 

}

这是MyQueue包中的QueueList类:

 // 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(); } } 

在进入第二个while循环之前,您没有将索引重置为0。 由于在第一个循环结束后index == message.length() ,第二个循环立即终止。

编辑:Re:您的最新更新。

在第二个循环中,您只将单词队列中的第一个message.length()字符出列。 如果你已添加-ay到最后你将看不到它。 相反,循环队列的长度,而不是输入消息的长度:

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

我可以用你的逻辑发现许多其他问题(你没有删除第一个字母而你没有处理句子中的单个单词),但上述更改应该足以让你打印队列中的内容并发送给你的方式调试。