2015-03-18 33 views
0

我遇到了我的模式問題,並讓它輸入多於10個數字!關於在C#中使用模式的問題

這些是我與我的代碼有兩個問題。

 public static void Main(string[] args) 
     { 

      int[] myNums = new int[10]; 
      int number = 0; 
      int count = 0; 
      Console.WriteLine("--Nmber Modifier--\n"); 
      Console.WriteLine("Entering a number that is no between 1 and 10 will end your process"); 
      do// limited to 10 HELP 
      { 
       number = Util.PromptForInt("Enter a number between 1 and 10 : "); 
       if ((number <= 10) && (number >= 1)) 
       { 
        myNums[count] = number; 
       } 
       count++; 
      } 
      while ((number <= 10) && (number >= 1)); 
      Array.Sort(myNums); 


      Console.WriteLine("Average number is : " + MeantAverage(myNums)); 
      Console.WriteLine("Largest Number is : " + LargestNum(myNums)); 
      Console.WriteLine("Smallest Number is : " + SmallestNum(myNums)); 
      Console.WriteLine("Most common number is : " + Mode(myNums)); 
      Console.ReadLine(); 
     } 

     static double MeantAverage(int[] nums) 
     { 

      double dMeanAverage; 
      double dSum = 0; 
      var groups = nums.GroupBy(item => item); 

      foreach (var group in groups) 
      { 
       dSum = group.Key + dSum; 
      } 

      dMeanAverage = dSum/nums[nums.Length - 1]; 
      return Math.Round(dMeanAverage, 2); 
     } 
     static int LargestNum(int[] nums) 
     { 
      int highestNum; 
      highestNum = nums[nums.Length - 1]; 
      return highestNum; 
     } 
     static int SmallestNum(int[] nums) 
     { 

      int lowest = 0; 

      for (int b = 0; b < nums.Length; b++) 
      { 
       if (nums[b] > lowest) 
       { 
        lowest += nums[b]; 

        return lowest; 
       } 
      } return lowest; 
     } 
     static int Mode(int[] nums) 
     { 
      // issues with mode 
      int modes = 0; 

      var modeGroup = nums.GroupBy(v => v); 
      int max = modeGroup.Max(g => g.Count()); 
      modes = modeGroup.First(g => g.Count() == max).Key; 
      return modes; 
     } 
    } 
} 

回答

1

你創造了10個數字的數組:

int[] myNums = new int[10]; 

所以當你循環不限制你到10個的數字,因爲你沒有對證count,該系統做因爲只要您嘗試訪問第10個元素(myNums[10]),您將獲得IndexOutOfRangeException

既然你不抓住它,它只是要終止你的程序。

解決你的問題:

  • 覈對count讓你不輸入太多的數字!
  • 如果您需要可變長度集合,請使用爲List<T>而不是數組構建的集合。數組是固定長度(大部分),和大約這是一個可怕的濫用數組語義。
0

修改後的代碼有點不同,意圖是相同的。

  • 你忘了在同時的情況下,以覈對count
  • 你會崩潰的「0」投入(對空數組沒有安全防範)
  • 改變的模式,合併項目,然後降序排序

    var myNums = new List<int>(10); 
    for(int i=0; i < 10; ++i) 
    { 
        int number = Utils.PromptForInt("Enter a number between 1 and 10 : "); 
        if(number > 10 || number < 1) 
         break; 
        myNums.Add(number); 
    } 
    if(myNums.Count < 1) 
        return; //no item input, do something 
    
    myNums.Sort(); 
    Console.WriteLine("Average: {0}", myNums.Sum()/(double)myNums.Count); 
    Console.WriteLine("Largest: {0}", myNums[myNums.Count - 1]); 
    Console.WriteLine("Smallest: {0}", myNums[0]); 
    
    var result = myNums.GroupBy(n => n) 
          .Select(c => new { Key = c.Key, total = c.Count() }) 
          .OrderByDescending(a => a.total); 
    Console.WriteLine("Most common: {0}, used {1} times", result.First().Key, result.First().total);