2016-10-03 14 views
0

私は、ユーザからフレーズを受け取り、その後母音を数え、すべての母音をその数に従ってソートされた昇順に表示するプログラムを作っています。見えるようになっているかのソート後の出力?

例:私は両方のソート後:

Welcome to the vowel counter and sorter! 
Enter a phrase! 

aaaaaeeeeiiioou 

The vowels and their count: 

u 1 

o 2 

i 3 

e 4 

a 5 

私は私のコードは、私は本当に母音」の後に何をするか分からない除いて結構ですし、そのカウントがあると思います。

Enter a phrase! 


aaaaaeeeeiiioou 

The vowels and their count: 

U 1 


U 79 


U 79 


U 79 

U 79 
:母音とカウント

int[] vCount = new int[5]; 

    System.out.println("Welcome to the vowel counter and sorter!\nEnter a phrase!"); 
    String input = keyboard.nextLine(); 

    String upInput = input.toUpperCase(); 

    //examine all characters 

    for (int i=0; i<upInput.length(); i++) 
    { 
     switch (upInput.charAt(i)) 
     { 
      case 'A': 
       vCount[0]++; 
       break; 
      case 'E': 
       vCount[1]++; 
       break; 
      case 'I': 
       vCount[2]++; 
       break; 
      case 'O': 
       vCount[3]++; 
       break; 
      case 'U': 
       vCount[4]++; 
       break; 
     } 
    } 

    char[] vArray = {'A', 'E', 'I', 'O', 'U'}; 
    //Bubble Sort 
    boolean hasSwapped = true; 

    while (hasSwapped == true) 
    { 
     hasSwapped = false; //Assumes it is sorted 

     for (int i = 0; i<vCount.length-1; i++) 
     { 
     if (vCount[i] > vCount[i+1]) 
     { 
      int temp = vCount[i]; 
      vCount[i] = vCount[i+1]; 
      vCount[i+1] = temp; 
      hasSwapped = true; 
      char temp2 = vArray[i]; 
      vArray[i] = vArray[i+1]; 
      vCount[i+1] = temp2; 
     } 
     } 
    } 
    System.out.println("The vowels and their count:"); 
    for (int i=0; i<vArray.length; i++) 
    { 
     System.out.println(vArray[i]+ " " +vCount[i]); 
    } 
} 

私の出力は完全に間違っていると台無しです私はあなたが、アレイを印刷するためのループのために必要がありますが、私の出力が道オフになっていると仮定します

これを正しく印刷するのを手伝ってください。

答えて

0

はあなたの並べ替えのためのコードの私のコメントを参照してください:注意点としては

if (vCount[i] > vCount[i+1]) 
    { 
     int temp = vCount[i]; 
     vCount[i] = vCount[i+1]; 
     vCount[i+1] = temp; 
     hasSwapped = true; 
     char temp2 = vArray[i]; 
     vArray[i] = vArray[i+1]; 
     vCount[i+1] = temp2; // this line is wrong. reference vArray not vCount 
    } 

をあなた自身をソート書き換えることはありません、なぜ、このような問題があります。そのためのライブラリがあります。 charのマップを使ってintを実装し、最高のカウントに基づいて結果を出力するだけで、これを実装する方がはるかにクリーンです。しかし、あなたの直ちに問題を解決する必要があります:

if (vCount[i] > vCount[i+1]) 
    { 
     int temp = vCount[i]; 
     vCount[i] = vCount[i+1]; 
     vCount[i+1] = temp; 
     hasSwapped = true; 
     char temp2 = vArray[i]; 
     vArray[i] = vArray[i+1]; 
     vArray[i+1] = temp2; 
    } 
+0

私はそれを見落として驚いています!ありがとうございました。私はちょうど配列を学習し始めました。教授が私たちに学ばせようとしている演習の1つは、バブルソートを使って配列をソートすることです。これは私の最初のプログラミングクラスなので、マップやライブラリについては何も知りません! –

+0

@ChrisM問題はありません、喜んで助けてください。 upvoteして受け入れてください! – nhouser9

+0

upvoteと受け入れる:)ところで、私は私の教授のコードブロックのソートの例を使って、なぜそれがvCount.length -1の行であるか教えてくれますか?for(int i = 0; i

関連する問題