2013-10-03 3 views
10

Этого Java-код дает мне неприятность:Как проверить, является ли символ гласным?

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! =' e '... 'всегда будет терпеть неудачу. 'z' не может быть равно« a »и« e »(и так далее) одновременно. Вместо этого попробуйте '&&'. –

+0

Я хотел, если бы проверить, что это не было 'a' 'e' 'i' 'o' 'u', как я могу структурировать этот оператор if? – KyleMHB

+0

Это тот. Но вы видели И. –

ответ

23

Ваше состояние имеет недостатки. Подумайте о более простом варианте

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

Если z является 'a' то вторая половина будет верно, так как z не 'e' (то есть все условие истинно), и если z является 'e' то первая половина будет верно, так как z не 'a' (опять же, полностью состояние true). Конечно, если z не является ни 'a', ни 'e', тогда обе части будут верны. Другими словами, ваше состояние никогда не будет ложным!

Вы, вероятно, хотите && МЕЕТСЯ вместо:

z != 'a' && z != '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

Для начала, вы проверяете, если буква «не» ИЛИ «не е» ИЛИ " не i "и т. д.

Допустим, что буква i. Тогда буква не является, поэтому возвращает «Истина». Тогда весь оператор True, потому что i! = A. Я думаю, что то, что вы ищете, это AND, а вместе с ними, а не OR.

Как только вы это сделаете, вам нужно посмотреть, как увеличить y и проверить это снова. Если в первый раз, когда вы получаете гласную, вы хотите увидеть, является ли следующий символ гласной тоже, или нет. Это проверяет символ только в точке y = 3.

35

Clean метода проверки гласными:

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

На самом деле есть гораздо более эффективные способы, чтобы проверить это, но так как вы спросили, что это проблема с вашим, я могу сказать, что проблема у вас есть изменить эти операторы OR операторами AND. С вашим утверждением if это всегда будет правдой.

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

Я объявил константу char [] для VOWELS, а затем реализовал метод, который проверяет, является ли символ гласным или нет (возвращает логическое значение). В моем основном методе, я заявляю строку и преобразование его в массив символов, так что я могу передать индекс массива символов в качестве параметра моего метода 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; 
     } 
    } 
Смежные вопросы