2016-10-13 2 views
0

So habe ich Probleme, den Index des ersten Vokals in einer Zeichenkette zu finden. Dies ist der Code, den ich mir ausgedacht habe, aber er liefert nichts zurück. Es soll den Index des ersten Vokals zurückgeben, zum Beispiel, wenn die Zeichenfolge "Hello World" war, sollte es 1 zurückgeben, weil der Index des ersten Vokals 'e' ist. Wenn in der gegebenen Zeichenfolge kein Vokal vorhanden ist, sollte -1 zurückgegeben werden.Den Index des ersten Vokals in einer Zeichenkette finden

public class Vowel 
{ 
    public static int isVowel(String s) 
    { 
     int a = -1; 
     for(int i = 0; i < s.length(); i++) 
     { 
      if("aeiouAEIOU".indexOf(i) >= 0) 
      { 
       a = i; 
      } 
     } 
     return a; 
    } 
} 
+0

Sie bedeutete 'indexOf (s.charAt (i))', und Sie müssen die Schleife verlassen, sonst werden Sie die * letzten * Index finden eines Vokal. Abstimmung zu schließen als "kann nicht mehr reproduziert werden", da es unwahrscheinlich ist, dass dies für andere von Nutzen sein wird. – Andreas

+0

hast du es geschafft, es auszuarbeiten? – ItamarG3

+0

* FYI: * Name der Methode ist irreführend. 'isVowel()' klingt so, als sollte es einen booleschen Wert zurückgeben und gibt nicht an, was ein 'int' Rückgabewert wäre. Guter Name könnte 'indexOfFirstVowel()' sein. – Andreas

Antwort

2

Nutzen Sie eine private statische Methode zu überprüfen, ob ein bestimmtes Zeichen ein Vokal ist:

public static int firstVowelPos(String s) { 
    for (int i = 0; i < s.length(); i++) { 
     char c = s.charAt(i); 
     if (isVowel(c)) 
      return s.indexOf(c); 
    } 
    return -1; 
} 

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

Wenn Sie in Ihrem Code nicht anderswo für Vokale überprüfen müssen, kann dies durch vereinfacht werden bewegen des Vokals in Ihre bedingte Anweisung Überprüfung:

public static int firstVowelPos(String s) { 
    for (int i = 0; i < s.length(); i++) { 
     char c = s.charAt(i); 
     if ("AEIOUaeiou".indexOf(c) != -1) 
      return s.indexOf(c); 
    } 
    return -1; 
} 
0

der Grund, warum Ihre Methode nichts zurückkehr ist, weil es in einem String aller Vokale für den Index einer ganzen Zahl ist zu prüfen. Was Sie tun sollten, ist das Zeichen bei i innerhalb von s zu überprüfen, um zu sehen, ob es ein Vokal ist, und dann diesen Index zurückzugeben.

Außerdem würde ich empfehlen, Ihre Methode zu etwas wie "indexFirstVowel" umzubenennen. Im Folgenden finden Sie eine mögliche Lösung, wenn Sie es versuchen wollen:

public class Vowel 
{ 

    public static void main(String[] args) 
    { 
     int x = indexFirstVowel("Hello World"); 
    } 


    public static int indexFirstVowel(String s) 
    { 
     for(int i = 0; i < s.length(); i++) 
     { 
       switch(s.charAt(i)) 
       { 
        case 'a': 
        case 'e': 
        case 'i': 
        case 'o': 
        case 'u': 
        case 'A': 
        case 'E': 
        case 'I': 
        case 'O': 
        case 'U': 
        return i; 
        default: 
        break; 
       } 
     } 

      return -1; 
    } 
} 
Verwandte Themen