2016-09-10 23 views
1

に読んでください。私は援助が必要です。私は、ユーザーがテキストを入力し、テキストを逆にしてから、テキストの母音の数を読んで、逆のテキストに母音の数を教えています。母音の数をjavaの文字列から

public static void main(String[] args) 
{ 
System.out.println ("Please type in whatever you want "); 
Scanner type_input = new Scanner (System.in); 
Scanner type_input = new Scanner (System.in); 
StringBuilder type_output = new StringBuilder(); 
type_output.append(type_hold); 
type_output=type_output.reverse(); 
System.out.println("Is this what you types in? " + type_output); 

for(int vowel_num = 0; vowel_num< type_hold.length(); vowel_num++) 
    { 
     if((type_hold.charAt(vowel_num) =='a')||(type_hold.charAt(vowel_num) =='e')|| 
      (type_hold.charAt(vowel_num) =='o')||(type_hold.charAt(vowel_num) =='i')|| 
      (type_hold.charAt(vowel_num) =='u')){  

     System.out.println("There are " + vowel_num + " vowels in " + type_hold); 
    } 

しかし、実行するには次のように入力します。私はどこがうんざりしているのか分かりません。

run: 
Please type in whatever you want 
hello 
Is this what you types in? olleh 
There are 1 vowels in hello 
There are 4 vowels in hello 

編集:私はそれを理解しました。誰もが助けてくれてありがとう!

+7

私は逆に、テキスト内の母音の数が、元のテキストにおける母音の数と同じであることを賭けている... – ajb

+0

@ajbは、私はそのコメントに大笑いしていました。しかし、私は彼がちょうど2つの練習課題を持っていると思います - 逆のテキストと母音を数えましょう。私は彼が元の*と*逆のテキストでそれらを数えようとしていたとは思わない。 –

+2

なぜ 'type_input ='行が2回ありますか?もう一つの問題は、 'vowel_num'は値の数を数えず、むしろそれらの位置を与えることです。 –

答えて

3
  1. type_holdとは何ですか?あなたはそれをインスタンス化するのを見ていない、あなたはそれを使用しています。
  2. 何かvowel_num?あなたは文字列をループしているインデックスですか?あなたが数えた母音の数は?あなたは、文字列で母音をカウントするために行っているはずです何

indexを想定し

vowel_countは、あなたが遭遇した母音の数である、我々は現在、スキャンされた文字列のインデックスです。

int vowel_count = 0; 
for(int index = 0; index < type_hold.length(); index++) { 
    if((type_hold.charAt(index) =='a') || 
     (type_hold.charAt(index) =='e') || 
     (type_hold.charAt(index) =='o') || 
     (type_hold.charAt(index) =='i') || 
     (type_hold.charAt(index) =='u')){ 

     // character at vowel_index is a vowel. 
     // you have encountered 1 more vowel! 
     System.out.println("Character at " + index + " is a vowel."); 
     vowel_count ++; 
    } 
} 

System.out.println("There are " + vowel_count + " vowels in " + type_hold); 
+0

'vowel_index'の名前を 'inputIndex'などに変更することもお勧めします。 –

+0

ありがとうございます。あなたの例を見て、私はどこがうんざりしていたのか分かります。 _hold型はスキャナ変数new_inputからの入力を保持するための初期の変数で、StringBuilder変数type_outputで使用できるようになりました。私はそれができるより良い方法があると確信していますが、私はまだどれくらいのことがわかりません。だから、vowel_indexは、それが見た母音の各インスタンスの整数に値を追加し、forループはvowel_numに値を追加します。 –

+0

あなたを混乱させて申し訳ありませんが、私はvowel_indexがインデックスであると言います。つまり、文字列を繰り返し処理するためのインデックスなので、それぞれのforループで文字列の次の文字を見るためにインクリメントされます。 –

-1

コードを少し変更しました。見てみましょう。

public static void main(String[] args) 
{ 
    System.out.println ("Please type in whatever you want "); 
    Scanner type_input = new Scanner (System.in); 
    Scanner type_input = new Scanner (System.in); 
    StringBuilder type_output = new StringBuilder(); 
    type_output.append(type_hold); 
    type_output=type_output.reverse(); 
    System.out.println("Is this what you types in? " + type_output); 

    int count=0; 
    for(int vowel_num = 0; vowel_num< type_hold.length(); vowel_num++) 
    { 
    if((type_hold.charAt(vowel_num) =='a') ||(type_hold.charAt(vowel_num) =='e')|| 
     (type_hold.charAt(vowel_num) =='o')||(type_hold.charAt(vowel_num) =='i')|| 
     (type_hold.charAt(vowel_num) =='u')){  

    //System.out.println("There are " + vowel_num + " vowels in " + type_hold);      Instead of this 

    count++; 
    } 

System.out.println("There are " + count + " vowels in " + type_hold); 
} 

これはあなたの作業を完了させるはずです。

+2

1.コンパイルさえしません。 // 2.コードを修正するだけでなく、最初に間違ったことを説明する必要があります。 –

3

Java 8ストリームは、文字列内の文字配列で使用できます。

StringBuilder type_hold = new StringBuilder(); 
long vowel_num = type_hold.toString().toLowerCase().chars() 
     .filter(it -> "aeiou".indexOf(it) != -1).count(); 
+0

Stephenはプログラミングの初心者で、基本を学んでいると思います。 IMHOストリームとLambdaは初心者のためのものではありません。 –

+1

私は 'it - >" aeiou ".indexOf(it)> = 0';を使用します)+1 –

+0

@peter優れた、ありがとう – Adam

関連する問題