2013-11-14 103 views
0

我需要在用戶輸入的字符串中查找所有元音,然後在屏幕上打印含有最多元音的單詞。
該程序使用用戶輸入。
用戶輸入小寫字母串。
例如如何在字符串中查找元音,並在屏幕上打印含有最多元音的單詞?

「我喜歡Java編程」

,它應該讀出:

編程

我試圖將字符串分割成不同的話,那工作。
我只是不知道如何應用「for」循環來搜索不同的單詞。 我需要在工作方法,所以這是我用來尋找元音字符串中的方法:

public void findvowel(){ 
    for(int index = 0;index < word.length();index++){ 
    char vowel = word.charAt(index); 
    if((vowel == 'a')|| 
     (vowel == 'e')|| 
     (vowel == 'i')|| 
     (vowel == 'o')|| 
     (vowel == 'u')){ 
      System.out.println(vowel); 
      } 
     } 
    } 

但我知道這是行不通的。 你能幫助我嗎?

+2

我可能會丟失一些東西很明顯,但這個功能看起來像它應該可以正常工作。但是,您可能想要明確「word」變量來自哪裏。我預料它會成爲'findvowel'方法的一個參數。 – jazzbassrob

+1

你爲什麼認爲這不起作用? – Maroun

+0

您可以顯示您正在尋找的簡單輸入和預期輸出嗎? – Prateek

回答

1

這應該是一個很好的起點;注意,方法名,現在還真說,它做什麼 -

// public static int findvowel(String word) { 
public static int getVowelCount(String word) { 
    int count = 0; 
    if (word != null) { 
    word = word.trim().toLowerCase(); 
    } 
    if (word == null || word.length() < 1) { 
    return count; 
    } 
    for (int index = 0; index < word.length(); index++) { 
    // That Fred he's a 
    char fred = word.charAt(index); 
    if ((fred == 'a') || (fred == 'e') 
     || (fred == 'i') || (fred == 'o') 
     || (fred == 'u')) { 
     ++count; 
     } 
    } 
    System.out.println("For the word \"" + word 
     + "\" there are " + count + " vowels"); 
    return count; 
} 
+0

並非所有的OP要求都被執行。這對我來說很好,因爲SO是**而不是**「爲我服務的功課*」。 –

+0

我只是想在正確的方向給一個指針。我將「元音」重命名爲fred,但除此之外它是OP的代碼(只固定返回一個計數)。 :) –

+0

在我的(不是很謙虛的意見)這是正確的做法。如果你提供了一個起點而不是完整的答案,那將會更好。 +1給你。 –

4
public class MaxVowels { 
    public static void main(String[] args) { 
     String sentence = "This is a loooooooooong sentence"; 
     int maxVowelCount = 0; 
     String wordsWithMostVowels = null; 
     String[] words = sentence.split(" "); 

     for(String word : words){ 
      int vowelCount = 0; 
      word = word.toLowerCase(); 
      for(int i = 0; i < word.length() ; i++){ 
       char x = word.charAt(i); 
       if(x == 'a' || x == 'e' || x == 'i' || 
        x == 'o' || x == 'u'){ 
        vowelCount++; 
       } 
      } 
      if(vowelCount > maxVowelCount){ 
       maxVowelCount = vowelCount; 
       wordsWithMostVowels = word; 
      } 
     } 
     System.out.println("Word with most vowels is: " + wordsWithMostVowels); 
    } 
} 

的代碼非常簡單,不需要解釋=)
代碼忽略了其中兩個詞有相同數量的元音的情況。在這種情況下,第一個單詞將用作大多數元音的單詞。

+1

如果有人有興趣,這裏是這段代碼翻譯爲Go和runnable:http://play.golang.org/p/o-3RpXWQoA – voidlogic

1

你正朝着正確的方向前進。幾件事:

你不需要打印元音。你會在所有單詞中計算元音的數量。由於您一次只能完成一個單詞,因此您要記住先前單詞的計數。更好的策略是隻記住元音數量最多的單詞。每當你找到一個含有更多元音的單詞時,你就會更新結果。

您可以使用領域記住與元音的最大數目字與號一起:

String wordWithMaxVowels; 
int maxNumberOfVowels; 

假設在這種情況下你在一個單一的word工作。您需要一個本地變量來保留此word中元音的計數。

int vowelCount = 0; 
// Your code to loop over the word but remember 
// to increase vowelCount if you find a vowel: 
// vowelCount++; 

最後檢查這個數字是否大於我們目前爲止的最大值。更新字段,如果是這種情況:

if(vowelCount > maxNumberOfVowels) { 
    wordWithMaxVowels = word; 
    maxNumberOfVowels = vowelCount; 
} 

另一個提示如下。要檢查字符c是元音,您可以:

if ("aeiouAEIOU".indexOf(c) != -1) { 
    vowelCount++; 
} 
0

你findVowel()方法是幾乎沒有。你爲什麼要輸出元音呢?而不是findVowel(),我想你想要一個名爲countVowels()的東西,它返回單詞中元音的數量。事情是這樣的:

public int countVowels(String word){ 
     int count = 0; 
     for(int index = 0;index < word.length();index++){ 
     char vowel = word.charAt(index); 
     if((vowel == 'a')|| 
       (vowel == 'e')|| 
       (vowel == 'i')|| 
       (vowel == 'o')|| 
       (vowel == 'u')){ 
      count++; 
     } 
     } 
     return count; 
    } 

這種方式,你可以調用countVowels()對句的每一個字,並跟蹤這個詞的最元音爲止。 例如:

String sentence = "This is a sentence."; 
String[] words = sentence.split(" "); //splits sentence into string array by spaces 

String maxStringSoFar = ""; 
int maxStringVowelCount = 0; 
for(String s : words) 
{ 
    int currentWordVowelCount = countVowels(s); 
    if(currentWordVowelCount > maxStringVowelCount) 
    { 
      maxStringSoFar = s; 
      maxStringVowelCount = currentWordVowelCount; 
    } 
} 
0

嘿,我有一些不同的答案-----

class strDemo2 
{ 
    public static void main(String args[]) 
    { 
    String s1=new String("The Ghost of The Arabean Sea"); 


     char c1[]=new char[30]; 
     char c2[]={'a','e','i','o','u'}; 
     s1.getChars(0,28,c1,0); 
     int pf=0,pl=0; 
     for(int i=0;i<s1.length();i++) 
     { 
      for(int j=0;j<5;j++) 
      { 
       if(c1[i]==c2[j]) 
       { 
      System.out.println("vowel found at:-> "+(i+1)+" which is "+c2[j]); 
       }  
      } 
     }    

    } 
} 
0
public class Test2{ 
public static void main(String[] args) { 
    String message = "words containig mooooost vowels"; 
    String wordWithMostVowel = null; 
    int maxVowelCount = 0; 
    String tests[] = message.split(" "); 
    int totalVowel = 0; 
    for(String test : tests){ 
     int vowelCount = 0; 
     test = test.toLowerCase(); 
     for(int i=0;i<test.length();i++){ 
      switch(test.charAt(i)){ 
      case 'a': 
      case 'e': 
      case 'i': 
      case 'o': 
      case 'u': 
      vowelCount++; 
      } 
      if(vowelCount > maxVowelCount){ 
       maxVowelCount = vowelCount; 
       wordWithMostVowel = test; 
      } 
     } 
     totalVowel = totalVowel+vowelCount; 
    } 
    System.out.println("total vowels "+totalVowel+" word with max vowel is "+wordWithMostVowel); 
} 

}

0
public static void Vowels(){ 
     String Name = "seleniumtesting"; 
     String Vowels = "aeiou"; 
     char[] N = Name.toCharArray(); 
     for(int i=0; i<N.length; i++){ 

      if(Vowels.contains(String.valueOf(N[i]))){ 
       System.out.println("It is a Vowel : "+ N[i]); 

      } 
     } 
    } 
+0

爲什麼OP應該「試試這個」?一個**好的答案**將總是解釋做了什麼以及爲什麼這樣做,不僅是爲了OP,而且是爲了將來訪問SO的人可能會發現這個問題並且正在閱讀你的答案。 –

+0

歡迎來到StackOverflow。請解釋你的awnser。這使得OP更容易理解他做錯了什麼。這裏是一個小指南:http://stackoverflow.com/help/how-to-answer – osanger