2013-08-07 4 views
1

저는 Java에 매우 익숙하며 문장의 첫 글자를 끝으로 이동시키고 마지막에 "y"를 추가하여 Pig Latin으로 문장을 번역하는 프로그램을 만들려고합니다. 첫 번째 문자는 모음이었고 그렇지 않으면 "ay"였습니다. 이를 위해 대기열을 사용해야합니다. 현재 내 프로그램은 종료 중입니다. 누군가 내가 잘못 가고있는 곳이나 다음에 어디로 갈지를 알아낼 수 있는지 궁금합니다. 감사!대기열을 사용하는 Java Pig 라틴어 문장 번역기

import MyQueue.QueueList; 가져 오기 java.util.Scanner;

// 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으로 인덱스를 재설정되지 않습니다

공용 클래스 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 클래스입니다 while 루프. 첫 번째 루프가 끝난 후 index == message.length() 이후 두 번째 루프는 즉시 종료됩니다.

편집 : Re : 최신 업데이트.

두 번째 루프에서는 단어 대기열의 첫 번째 message.length() 문자 만 축약합니다. 끝까지 추가 한 경우에는 보이지 않습니다. 대신, 큐의 길이 아닌 입력 메시지의 길이 루프 : 나는 당신의 논리와 수많은 다른 문제를 발견 할 수

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

(첫 번째 문자를 제거되지 않으며 당신이 개별 단어를 처리하지 않습니다 위의 변경 사항은 대기열에있는 내용을 인쇄하고 디버깅하는 방법을 알려주는 데 충분해야합니다.

+0

나는 그것을 고치고 (편집 해 주셔서 대단히 감사합니다.) 편집 된 버전을 업로드했지만 프로그램은 끝에 문장의 첫 글자로 입력 한 문장 만 인쇄합니다. 어떤 제안? – user2659030

+0

고맙습니다, 제이슨. 개별적인 단어를 어떻게 처리할지 잘 모르겠지만 그것을 조사 할 것입니다. – user2659030

+0

for 루프에 대한 질문이 있습니다. 개별 단어를 처리하기 위해 색인 = 1을 설정해서는 안되기 때문에 그 내용이 올바르지 않습니까? – user2659030