1

我对Java非常陌生,正在尝试创建一个程序将句子翻译成Pig Latin,将单词的第一个字母移到末尾,如果第一个字母是元音,则在末尾附加“y”和“ay”最后否则。我需要为此使用队列。目前我的程序刚刚结束,我想知道是否有人能够发现我哪里出错或下一步要去哪里。谢谢!

导入 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());

}

}

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

}
4

1 回答 1

2

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

编辑:回复:您的最新更新。

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

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

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

于 2013-08-07T02:56:16.263 回答