2013-10-03 7 views
10

이 자바 코드 나에게 문제를주고있다 :char가 모음인지 어떻게 확인합니까?

String word = <Uses an input> 
    int y = 3; 
    char z; 
    do { 
     z = word.charAt(y); 
     if (z!='a' || z!='e' || z!='i' || z!='o' || z!='u')) { 
      for (int i = 0; i==y; i++) { 
       wordT = wordT + word.charAt(i); 
       } break; 
     } 
    } while(true); 

내가 단어의 세 번째 글자가 아닌 모음이 있는지 확인하려면,하고 있는지 나는 그것이 비 모음 및 이전의 모든 문자를 반환하려면 그것. 모음 인 경우 문자열의 다음 문자를 검사하고, 모음이면 모음이 아닌 모음을 찾을 때까지 다음 문자를 검사합니다.

예 :

워드 = Jaemeas 다음 wordT해야 = Jaem

예 2

워드 = Jaeoimus 다음 wordT해야 = Jaeoim

문제는 내 if stateme입니다. nt, 그 한 줄에 모든 모음을 검사하는 방법을 알아낼 수는 없습니다.

+4

'Z ='A :! I 내 isVowel 메소드의 파라미터로서 문자 배열의 인덱스를 통과 할 수 있도록 내 주요 방법에서, I는 문자열을 선언하고 있고 문자의 배열로 변환 '|| z! ='e '...'는 항상 실패합니다. 'z'는'a'와'e' (등등)와 동시에 같을 수 없습니다. 대신'&&'를 사용해보십시오. –

+0

나는 if '' 'e' 'i'o ''u '가 아니라는 것을 확인하기를 원한다. if 문을 어떻게 구조화 할까? – KyleMHB

+0

이것은 하나입니다. 하지만 당신은 AND를 보았습니다. –

답변

23

상태에 결함이 있습니다. zz'e'되지 않기 때문에 'a'는 다음 두 번째 절반은 사실이 될 것이다

z != 'a' || z != 'e' 

경우 간단한 버전에 대한 생각 (전체 조건은 사실이다 즉), 그리고 z'e' 인 경우 다음 상반기 이후 사실 일 것입니다 z'a'이 아닙니다 (다시 전체 조건 true). 물론 z'a'도 아니고 'e'도 아닌 경우 두 부분이 모두 true입니다. 다시 말해, 귀하의 상태가 결코 거짓이 될 수 없습니다! 당신은 "편지"는 없습니다 "또는"E없는 "경우 확인되거나 우선 들어

"aeiou".indexOf(z) < 0 
+0

아 맞아! 정말 고맙습니다. 내가 그것을 이해할 수 없다고 생각하지 않는다! – KyleMHB

+0

@KyleMHB 문제가되지 않습니다. [답변 수락] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – arshajii

+0

완료! indexOf() 함수와 그 클리너를 많이 사용했습니다. – KyleMHB

1

:

z != 'a' && z != 'e' && ... 

아니면 :

당신은 가능성이 &&의 존재를 대신합니다 내가 아니야 "등

편지가 i라고합니다. 그런 다음 편지는 a가 아니므로 "True"를 반환합니다. 그러면 i! = a이므로 전체 문장이 참입니다. 나는 당신이 찾고있는 것이 OR이 아닌 진술을 함께 사용하는 것이라고 생각합니다.

일단 이렇게하면 y를 증가시키는 방법을 살펴보고 다시 확인해야합니다. 처음으로 모음을 얻는다면 다음 문자가 모음인지 여부를 확인해야합니다. 이것은 위치 y = 3에있는 문자 만 검사합니다. 모음을 확인하기 위해

35

청소 방법 :

public static boolean isVowel(char c) { 
    return "AEIOUaeiou".indexOf(c) != -1; 
} 
1

사실을 확인하는 훨씬 더 효율적인 방법이 있습니다하지만 당신은 당신의 문제가 뭔지 요청했습니다 때문에, 그 문제는 당신이 가지고있는 것을 알 수 있습니다 AND 연산자를 사용하여 해당 OR 연산자를 변경합니다. if 문을 사용하면 항상 true가됩니다.

0
String word="Jaemeas"; 
String wordT=""; 
     int y=3; 
     char z; 
     do{ 
      z=word.charAt(y); 
      if(z!='a'&&z!='e'&&z!='i'&&z!='o'&&z!='u'&&y<word.length()){ 
       for(int i = 0; i<=y;i++){ 
        wordT=wordT+word.charAt(i); 
        } 
      break; 
      } 
      else{ 
       y++; 
      } 

     }while(true); 

여기 내 대답입니다.

+0

답을 설명하고, 코드 블록을 제공하지 마십시오 (무엇을 변경했는지, 왜, 어떻게 작동합니까?). –

3

정규식을 사용하는 접근 방법은 어떻습니까? 적절한 패턴을 사용하면 그룹을 사용하여 Matcher 객체의 결과를 얻을 수 있습니다. 아래의 코드 샘플에서 m.group (1) 호출은 패턴 일치가있는 한 찾고있는 문자열을 반환해야합니다.

String wordT = null; 
Pattern patternOne = Pattern.compile("^([\\w]{2}[AEIOUaeiou]*[^AEIOUaeiou]{1}).*"); 
Matcher m = patternOne.matcher("Jaemeas"); 
if (m.matches()) { 
    wordT = m.group(1); 
} 

같은 목표를 달성하기위한 조금 다른 접근 방식.

0

VOWELS에 대한 char [] 상수를 선언 한 다음 char이 모음인지 아닌지 (부울 값을 반환하는지) 확인하는 메서드를 구현했습니다.

public class FindVowelsInString { 

     static final char[] VOWELS = {'a', 'e', 'i', 'o', 'u'}; 

     public static void main(String[] args) { 

      String str = "hello"; 
      char[] array = str.toCharArray(); 

      //Check with a consonant 
      boolean vowelChecker = FindVowelsInString.isVowel(array[0]); 
      System.out.println("Is this a character a vowel?" + vowelChecker); 

      //Check with a vowel 
      boolean vowelChecker2 = FindVowelsInString.isVowel(array[1]); 
      System.out.println("Is this a character a vowel?" + vowelChecker2); 

     } 

     private static boolean isVowel(char vowel) { 
      boolean isVowel = false; 
      for (int i = 0; i < FindVowelsInString.getVowel().length; i++) { 
       if (FindVowelsInString.getVowel()[i] == vowel) { 
        isVowel = true; 
       } 
      } 
      return isVowel; 
     } 

     public static char[] getVowel() { 
      return FindVowelsInString.VOWELS; 
     } 
    }