2013-10-03 30 views
10
codice

Questa Java mi sta dando problemi:Come faccio a verificare se un carattere è una vocale?

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

voglio verificare se la terza lettera di parola è un non-vocale, e se è lo voglio per tornare alla non-vocale e tutti i caratteri che precedono esso. Se è una vocale, controlla la lettera successiva nella stringa, se è anche una vocale quindi controlla la successiva finché non trova una non-vocale.

Esempio:

parola = Jaemeas poi Wordt mosto = Jaem

Esempio 2:

parola = Jaeoimus poi Wordt mosto = Jaeoim

L' il problema è con la mia statema if nt, non riesco a capire come farlo controllare tutte le vocali in quella linea.

+4

'z = 'a! '|| z! =' e '... 'fallirà sempre. 'z' non può essere uguale a' a' e 'e' (e così via) allo stesso tempo. Prova '&&' invece. –

+0

Volevo controllare se non era un '' e '' i '' o '' u ', come faccio a strutturare quella istruzione if? – KyleMHB

+0

È questo. Ma tu hai visto AND. –

risposta

23

Le condizioni sono difettose. Pensate la versione più semplice

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

Se z è 'a' poi la seconda metà sarà vero in quanto z non è 'e' (vale a dire l'intera condizione è vera), e se z è 'e' quindi la prima metà sarà vero in quanto z non è 'a' (di nuovo, condizione intera vera). Naturalmente, se z non è né 'a''e' allora entrambe le parti saranno vere. In altre parole, la tua condizione non sarà mai falsa!

È probabile che desidera && s lì invece:

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

o forse:

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

Ah si! Grazie mille. Non posso credere che non potrei capirlo! – KyleMHB

+0

@KyleMHB Nessun problema, non dimenticare di [accettare una risposta] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – arshajii

+0

Fatto! Utilizzata la funzione indexOf() e molto più pulita. – KyleMHB

1

Per cominciare, si sta verificando se la lettera non è "un" o "non e" o " non io "ecc.

Diciamo che la lettera è io. Quindi la lettera non è un, quindi restituisce "Vero". Quindi l'intera affermazione è Vero perché io! = A. Penso che quello che stai cercando sia AND le dichiarazioni insieme, non OR loro.

Una volta eseguita questa operazione, è necessario esaminare come incrementare e ricontrollare. Se la prima volta ottieni una vocale, vuoi vedere se anche il prossimo personaggio è una vocale, oppure no. Questo controlla solo il carattere nella posizione y = 3.

35

metodo pulito per verificare la presenza di vocali:

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

In realtà ci sono molto più efficienti modi per verificarle, ma dal momento che hai chiesto qual è il problema con il vostro, posso dire che il problema è che devi per cambiare gli operatori OR con gli operatori AND. Con la tua dichiarazione if, sarà sempre vero.

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

ecco la mia risposta.

+0

Spiega la tua risposta, non limitarti a fornire un blocco di codice (cosa hai cambiato, perché, come funziona). –

3

E un approccio che utilizza le espressioni regolari? Se si utilizza il modello corretto, è possibile ottenere i risultati dall'oggetto Matcher utilizzando i gruppi. Nell'esempio di codice sotto la chiamata a m.group (1) dovresti restituirti la stringa che stai cercando finché c'è una corrispondenza di modello.

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

Solo un approccio leggermente diverso che raggiunge lo stesso obiettivo.

0

Ho dichiarato una costante char [] per i VOWELS, quindi implementato un metodo che controlla se un char è una vocale o meno (restituendo un valore booleano). Nel mio metodo principale, mi dichiaro una stringa e convertirlo in un array di caratteri, in modo che possa passare l'indice della matrice char come parametro del mio metodo 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; 
     } 
    } 
Problemi correlati