2016-08-20 168 views
-6

編寫一個程序,允許輸入0到10之間的任意數量的值爲 。當用戶停止輸入值時,顯示頻率分佈 條形圖。使用星號顯示每個值輸入的次數。數組的頻率分佈

我寫了這個:

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(); 
} 

相關部分是printASCIIChart並存儲用戶的輸入的方式。

存儲數據最簡單的方法就是使用一個數組來保持每個數字在相應索引中增加計數器的數量。只要使用this方便的string構造函數,一旦數據以這種方式存儲,打印條形圖就非常直觀。