2011-12-13 3 views
0

나는 주어진 단어를 돼지 라틴어로 번역하는 돼지 라틴 번역기를 연구 중이다. 돼지 라틴 방법과 isVowel 방법이 있습니다.piglatin translator java

public static void pigLatin(String s) { 
     char[] array = s.trim().toCharArray(); 
     if(isVowel(s.charAt(0)) && !Character.toString(s.charAt(0)).equalsIgnoreCase("y")){ 
      System.out.println(s+"way"); 
     }else { 
      int i = 0; 
      String toReturn = ""; 
      do { 
       toReturn += array[i]; 
       i++; 
      }while(!isVowel(s.charAt(i)) && !Character.toString(array[i]).equalsIgnoreCase("y")); 
      System.out.println(s.substring(i)+toReturn+"ay"); 
     } 
    } 

    public static boolean isVowel(char c) { 
     char[] vowels = new char[] {'a','e','i','o','u','y'}; 
     for(int i = 0;i<vowels.length;i++) { 
      if(Character.toString(vowels[i]).equalsIgnoreCase(Character.toString(c))) { 
       return true; 
      } 
     } 
     return false; 
    } 

"BIrD"및 "quiet"라는 단어를 입력 할 때 문제가 발생합니다. 첫 번째 것은 던졌습니다 java.lang.StringIndexOutOfBoundsException: String index out of range: 4 두 번째 것은 올바르게 변환되지 않습니다. 조용한 지문을 출력 할 때, 그 말은 이해가되지 않습니다. 왜냐하면 당신은 모음까지 모든 상수를 가져 가기로되어 있었기 때문입니다. 그렇다면 그 말은 지저분한 것입니까? 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

참고 : 이것은 숙제가 아닙니다.

+0

* 조용한 인쇄는 uietqay하지만, 당신은 왜 그것을 ietquay됩니다 uietquay 의미한다 모음, 개까지 모두 상수을하기로되어 있기 때문에 그 이해가되지 않습니다? * ** 응? ** 돼지들에게 규칙을 가르쳐달라고 * 너에게 묻고 있니? 프로그램이 프로그램에 부합하는지 확인하기 전에 요구 사항이 무엇인지 확고히 파악하십시오. 우리는 당신에게 당신의 요구 사항을 줄 필요가 없습니다. –

+0

나는 다만 너에게 무슨 일이 일어나고 있는지 설명하고있다 ... 나는 요구 사항이 무엇인지를 안다. 저는 제 의견 '모음에 모든 상수를 가져 가야한다고 생각합니다.'에 분명히 표시했습니다. –

+0

"모든 상수를 모음으로 가져 가야한다고 생각하는 경우"왜 "ietquay"라고 가정합니까? 이 두 문장은 상호 배타적입니다. 둘 다 사실 일 수는 없습니다. 그리고 그 단락에 대해 "명백한"것은 없습니다. –

답변

2

"BLRD"또는 "새"입니까? 모음이 없으면 do-while 루프는 범위를 벗어나는 경우를 제외하고는 종료되지 않기 때문입니다.

두 번째 경우 "qu"을 함께 유지하기위한 특별한 논리를 추가하고 싶지 않으면 "quiet"가 "uietqay"여야합니다.

while((!isVowel(s.charAt(i)) || isQU(s, i)) && !Character.toString(array[i]).equalsIgnoreCase("y")) 

을 그리고 적절한 isQU(String s, int index)을 구현 : 당신은 이보다를함으로써 당신의 동안 상태에서이 작업을 수행 할 수 있습니다.

하지만 코드를 좀 더 읽기 쉽도록 작성하려면 다시 작성하는 것이 좋습니다. 마찬가지로, 나는 왜 당신의 isVowel이 "y"를 검사하는지, 그리고 당신의 while 조건이 "y"를 검사하는지 잘 모르겠습니다. 어떤 때는 array[i]을 사용하고 어떤 때는 charAt(i)을 사용합니다. 이러한 불일치로 인해 거의 또는 전혀 도움이되지 않아 코드를 읽기가 더 어려워집니다. 이 ietquay 것으로 가정한다 때

+0

감사합니다! 정확히 내가 무엇을 찾고 있었는지. 내 'isVowel'은 "y"를 검사하기 때문에 다른 곳의 코드에서 사용하고 있기 때문에 "y"가 모음인지 확인해야합니다. –

+0

나는 그 이유에 대해 논쟁을하지 않았다. 하지만 여전히 코드를 읽기가 어렵게 만듭니다. 간단한 수정 : 의견을 추가하십시오. 한 달 안에이 코드로 돌아가거나 인터넷 낯선 사람에게 코드를 살펴달라고 요청하면 가독성이 향상되었습니다. – ccoakley

+0

좋아, 나는 그것을 고려할 것이다, 나는 단지 내가 왜 그것을했는지 설명하고있다. 그러나 해설하는 것은 더 이해 될 것이다. –

1
public static String pigLatin(String a){ 
    a=a.toLowerCase(); 
    String [] x=a.split(" "); 
    int vowl=0; 
    String c=""; 
    String d=""; 
    String trans=""; 
    for(int i=0; i<x.length; i++){ 
     for(int j = 0;j<x[i].length();j++){ 
      if(x[i].charAt(j)=='a'||x[i].charAt(j)=='e'||x[i].charAt(j)=='i'||x[i].charAt(j)=='o'||x[i].charAt(j)=='u'){ 
       vowl=j; 
       j=x[i].length(); 
      } 
     } 
     c=x[i].substring(0,vowl); 
     d=x[i].substring(vowl,x[i].length()); 
     trans+= d+c+"ay "; 
    } 
    return trans; 
}  
+1

첫 번째 답변이 수락 된 후 3 개월이 지나서 새로운 답변이 나왔습니다. 몇 가지 단어로 설명하는 것이 좋을 것이라고 생각하지 않습니까? 왜 솔루션이 더 좋은 대안인가? –

관련 문제