2017-03-21 46 views
-1

我需要從平均值中找出數組中每個數值的差異。我需要遍歷每個值並從平均值中減去每個值,並顯示差異。我嘗試了幾種不同的方法,但最終的區別總是爲0。我在這裏做錯了什麼?c#在for循環中從數組索引中減去一個數字

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using static System.Console; 

namespace AvgNDiff 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int[] numbers = new int[10]; 
      int x = 0; 
      int i; 
      string entryString = ""; 
      int counter = 0; 
      int countdown = 10; 
      int sum = 0; 
      int average = 0; 


      while (counter < numbers.Length && numbers[x] != 10 && entryString != "0") 
      { 
       if (x == 0) 
        Write("Enter up to 10 numbers or type 0 to stop > "); 
       else if (x == 9) 
        Write("Enter {0} more number or type 0 to stop > ", countdown); 
       else 
        Write("Enter up to {0} more numbers or type 0 to stop > ", countdown); 

       entryString = ReadLine(); 
       numbers[x] = Convert.ToInt32(entryString); 


       if (entryString != "0") 
       { 
        sum += numbers[x]; 
        counter++; 
        x++; 
       } 

       countdown--; 
      } 

      average = sum/x; 

      WriteLine("\n\nYou entered {0} numbers with a sum of {1}", x, sum); 
      WriteLine("The average of your numbers is " + average); 

      WriteLine("\n\nNumber  Difference"); 
      WriteLine("-------------------------------"); 



      for (i=0; i < x; i++) 
      { 
       int value = numbers[i]; 
       int diff = average-value; 

       WriteLine(String.Format("{0,-10} {1,-10}", (numbers[i]), diff)); 
      } 


      ReadKey(); 




     } 
    } 
} 
+1

不應置於「差異」作爲參數(而不是「值」) st WriteLine語句? –

回答

1

看看這裏

int value = numbers[i]; 
int diff = value - average; 
WriteLine(String.Format("{0,-10} {1,-10}", (numbers[i]), value)); 

這裏的關鍵問題是的WriteLine語句。

你們已經告訴它顯示numbers[i],哦等待.. numbers[i](如多數民衆贊成什麼值)

但DIFF包含從平均方差...

+0

是的,我忘了將它改回來。發佈編輯。原來的結果。 – codeRed

+0

你也假設average是一個整數,它不太可能是這樣。 – BugFinder

0
static void Main(string[] args) 
{ 
    List<int> numberList = new List<int>(); 

    Console.WriteLine("Enter up to 10 numbers or type 0 to stop:"); 

    for (int i = 0; i < 10; i++) 
    { 
     int userInput = 0; 

     while (!int.TryParse(Console.ReadLine(), out userInput)) 
     { 
      Console.WriteLine("Only integer numbers accepted, let's try again...:"); 
     } 

     if (userInput == 0) 
     { 
      break; 
     } 
     else 
     { 
      numberList.Add(userInput); 

      if (i < 9) 
      { 
       Console.WriteLine("Yeah, {0} more number{1} to go!", (9 - i), (i == 8 ? "" : "s")); 
      } 
     } 
    } 

    double average = numberList.Average(); 

    for (int i = 0; i < numberList.Count; i++) 
    { 
     Console.WriteLine("#{0}: {1} - {2} = {3}", (i+1), numberList[i], average, (numberList[i] - average)); 
    } 

    Console.ReadLine(); 
} 
+0

編輯我的帖子糾正一個小錯誤。 – Roger

+0

value from the average .... again not the average from the value。 – codeRed

+0

它和你一樣....值 - 平均值。 – Roger

0

不要死記硬背的整個soultion成單個Main,提取物(和調試)的方法:在非常LA

// Subtract each item from the average 
    private static double[] MyNormalize(int[] source) { 
    double sum = 0.0; 

    foreach (var item in source) 
     sum += item; 

    double[] result = new double[source.Length]; 

    for (int i = 0; i < source.Length; ++i) 
     result[i] = sum/source.Length - source[i]; 

    return result; 
    } 

    ... 

    static void Main(string[] args) { 
    int[] numbers = new int[10]; 

    ... 
    // Input 
    while (counter < numbers.Length && numbers[x] != 10 && entryString != "0") { 
     ... 
     entryString = ReadLine(); 
     numbers[x] = Convert.ToInt32(entryString); 
    } 

    // Business logic 
    double[] norm = MyNormalize(numbers); 

    // Output 
    for (int i = 0; i < numbers.Length; ++i) 
     WriteLine(String.Format("{0,-10} {1,-10}", numbers[i], norm[i])); 
    } 
+0

是的,真的,但我還沒有。嬰兒在這裏步驟。 – codeRed