2016-08-20 25 views
-6

0から10までの任意の数の値を入力して とするプログラムを作成します。ユーザーが値の入力を停止すると、頻度分布 棒グラフが表示されます。アスタリスクを使用して、各値が入力された回数を表示します。配列の頻度分布

私はこれを書いた:関連部分はprintASCIIChart、ユーザーの入力を保存する方法です

static void Main(string[] args) 
    { 
     int numArrElement; 
     Console.Write("How many number do you want to enter in array: "); 
     numArrElement = int.Parse(Console.ReadLine()); 

     int[] numbers = new int[numArrElement]; 
     string inValue; 

     for (int i = 0; i< numArrElement; i++) 
     {    
      Console.Write("Enter your number between 0-10: "); 
      inValue = Console.ReadLine(); 
      if(int.TryParse(inValue , out numbers[i]) == false) 
      { 
       Console.WriteLine("Invalid data entry----0 stored"); 
      } 
     } 

     GetRepeatedValue(numbers); 
     Console.ReadKey(); 
    } 

    //Method 
    public static void GetRepeatedValue(int[] num) 
    { 
     for (int i = 0; i < num.Length; i++) 
     { 
      int valueCnt = 0; 
      for (int j = 0; j < num.Length; j++) 
      { 
       if (num[j] == i) 
       {     
        valueCnt++; 
       } 
      } 
      if (valueCnt > 0) 
      { 
       Console.WriteLine(i + " " + valueCnt); 
      } 
     } 
    } 
+0

割り当てを投稿しないでください。 – ChiefTwoPencils

+0

私はこの問題を解決することに問題があります。私は助けが必要です。 –

+0

あなたは何を問題にしていますか? – jcolemang

答えて

-1
static void Main(string[] args) 
{ 
    var data = new int[11]; //spec: valid values [0-10] 

    while (true) 
    { 
     Console.Write("Enter a number [0-10] or 'q' to quit and draw chart: "); 
     var input = Console.ReadLine(); 
     var value = 0; 

     if (inputIsValid(input, out value)) 
     { 
      data[value]++; 
     } 
     else if (input.ToLowerInvariant() == "q") 
     { 
      break; 
     } 
     else 
     { 
      Console.WriteLine("Invalid number, pleae try again."); 
     } 
    } 

    Console.WriteLine(); 
    Console.WriteLine(printASCIIChart(data)); 
    Console.ReadLine(); 
} 

private static bool inputIsValid(string input, out int value) 
{ 
    if (int.TryParse(input, out value)) 
    { 
     if (value > -1 && value < 11) 
      return true; 
    } 

    return false; 
} 

private static string printASCIIChart(IEnumerable<int> data) 
{ 
    var builder = new StringBuilder(); 
    var counter = 0; 

    foreach (var num in data) 
    { 
     builder.AppendLine($"[{counter:00}]: {new string('*', num)}"); 
     counter++; 
    } 

    return builder.ToString(); 
} 

を。

データを格納する最も簡単な方法は、対応するインデックスのカウンタをインクリメントする各番号のカウントを保持する配列を使用することです。棒グラフを印刷すると、データがこのように格納された後、単純にthis便利なstringコンストラクタを使用すると、非常にストレートに表示されます。

関連する問題