2013-10-03 17 views
10
kod

Ta Java daje mi problemy:Jak sprawdzić, czy znak jest samogłoską?

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); 

Chcę sprawdzić, czy trzecia litera wyrazu jest non-samogłoska, a jeśli jest to chcę wrócić niepodlegania samogłoskę i wszelkie znaki poprzedzające to. Jeśli jest to samogłoska, sprawdza następną literę w łańcuchu, jeśli jest to również samogłoska, to sprawdza następną, dopóki nie znajdzie nie-samogłoski.

przykład:

słowa = Jaemeas następnie wordt musi = Jaem

Przykład 2:

słowa = Jaeoimus następnie wordt musi = Jaeoim

Problem jest z moim statusem if Nt, nie mogę wymyślić, jak sprawić, żeby sprawdził wszystkie samogłoski w tej jednej linii.

+4

'z = 'a! '|| z! =' e '... 'zawsze zawiedzie. 'z' nie może być równe' a' i 'e' (i tak dalej) w tym samym czasie. Zamiast tego wypróbuj '&&'. –

+0

Chciałem sprawdzić, czy nie było "a" "i", "u", w jaki sposób mogę sformułować to, jeśli oświadczenie? – KyleMHB

+0

To jest ten. Ale widziałeś ORAZ. –

Odpowiedz

23

Twój stan jest wadliwy. Pomyśl o prostszej wersji

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

Jeśli z jest 'a' następnie druga połowa będzie prawdą, ponieważ z nie jest 'e' (czyli cały warunek jest spełniony), a jeśli z jest 'e' następnie pierwsza połowa będzie prawdą, ponieważ z nie jest 'a' (ponownie, cały warunek jest prawdziwy). Oczywiście, jeśli z nie jest ani 'a', ani 'e', wówczas obie części będą prawdziwe. Innymi słowy, twój stan nigdy nie będzie fałszywy!

Prawdopodobnie chcą && s tam Zamiast:

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

Albo:

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

Ach tak! Dziękuję bardzo. Nie mogę uwierzyć, że nie mogłem tego rozgryźć! – KyleMHB

+0

@KyleMHB Nie ma problemu, nie zapomnij [zaakceptuj odpowiedzi] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – arshajii

+0

Gotowe! Użyła funkcji indexOf() i jej znacznie czystszego. – KyleMHB

1

Na początek, podczas sprawdzania, czy list nie jest "A" lub "nie E" lub " nie ja "itd.

Powiedzmy, że list jest i. Wtedy litera nie jest a, więc zwraca "True". Następnie cała instrukcja jest True, ponieważ i! = A. Myślę, że to, czego szukasz, to ORAZ oświadczenia razem, a nie OR.

Po wykonaniu tej czynności należy sprawdzić, jak zwiększyć y i sprawdzić ponownie. Jeśli po raz pierwszy pojawi się samogłoska, chcesz sprawdzić, czy następny znak jest również samogłoską, czy nie. To tylko sprawdza postać w miejscu y = 3.

35

czystego sposobu, aby sprawdzić samogłosek:

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

rzeczywistości są dużo bardziej skuteczne sposoby, aby to sprawdzić, ale odkąd pytanie, co jest problem z Ciebie, mogę powiedzieć, że problem masz aby zmienić operatorów OR operatorami AND. Z twoim stwierdzeniem, jeśli to zawsze będzie prawdą.

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); 

Oto moja odpowiedź.

+0

Proszę wyjaśnić swoją odpowiedź, nie podając tylko kodu kodu (co zmieniliście, dlaczego, jak to działa). –

3

Co powiesz na podejście, używając wyrażeń regularnych? Jeśli użyjesz odpowiedniego wzorca, możesz uzyskać wyniki z obiektu Matchera za pomocą grup. W poniższym przykładzie kodu wywołanie m.group (1) powinno zwrócić ci szukany łańcuch, o ile istnieje dopasowanie wzorca.

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

Po prostu trochę inne podejście, które osiąga ten sam cel.

0

Zadeklarowałem stałą char [] dla VOWELS, a następnie zaimplementowałem metodę, która sprawdza, czy znak jest samogłoską, czy nie (zwracając wartość boolowską). W moim głównym sposobem, jestem oświadczając ciąg i przekształcenie go do tablicy znaków, tak, że mogę przekazać indeks tablicy char jako parametr mojego sposobu isVowel:

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; 
     } 
    } 
Powiązane problemy