c#从for循环中的数组索引中减去一个数字

c#从for循环中的数组索引中减去一个数字,c#,arrays,C#,Arrays,我需要找出数组中每个数值与平均值的差值。我需要循环遍历每个值,从平均值中减去每个值,然后显示差值。我尝试了几种不同的方法,但最后的结果总是0。我做错了什么 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Console; namespace AvgNDiff { c

我需要找出数组中每个数值与平均值的差值。我需要循环遍历每个值,从平均值中减去每个值,然后显示差值。我尝试了几种不同的方法,但最后的结果总是0。我做错了什么

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




        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用静态系统控制台;
名称空间AvgNDiff
{
班级计划
{
静态void Main(字符串[]参数)
{
整数[]个数=新整数[10];
int x=0;
int i;
string entryString=“”;
int计数器=0;
整数倒计时=10;
整数和=0;
整数平均=0;
while(计数器”;
else如果(x==9)
写入(“输入{0}更多数字或键入0停止>”,倒计时);
其他的
写入(“最多输入{0}个数字或键入0停止>”,倒计时);
entryString=ReadLine();
数字[x]=转换为32(entryString);
if(entryString!=“0”)
{
总和+=数字[x];
计数器++;
x++;
}
倒计时--;
}
平均值=总和/x;
WriteLine(“\n\n您输入的{0}个数字的和为{1}”,x,sum);
WriteLine(“您的数字的平均值为”+平均值);
写线(“\n\n数字差”);
写线(“-----------------------------------------”;
对于(i=0;i
看看这里

int value = numbers[i];
int diff = value - average;
WriteLine(String.Format("{0,-10}   {1,-10}", (numbers[i]), value));
这里的关键问题是writeline语句

您已经告诉它显示
数字[i]
,哦,等等<代码>数字[i]
(这就是值)

然而,diff包含与平均值的差异…

static void Main(string[]args)
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();
}
{ 列表编号列表=新列表(); Console.WriteLine(“最多输入10个数字或键入0以停止:”); 对于(int i=0;i<10;i++) { int userInput=0; 而(!int.TryParse(Console.ReadLine(),out userInput)) { WriteLine(“只接受整数,让我们再试一次…”); } if(userInput==0) { 打破 } 其他的 { numberList.Add(用户输入); 如果(i<9) { WriteLine(“是的,还有{0}个数{1}!”,(9-i),(i==8?”:“s”); } } } 双倍平均值=numberList.average(); for(int i=0;i
不要将整个解决方案塞进单个
Main
,提取(并调试)一个方法:

   // 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]));  
   } 
//从平均值中减去每个项目
私有静态双[]MyNormalize(int[]源){
双和=0.0;
foreach(源中的var项)
总和+=项目;
double[]结果=新的double[source.Length];
对于(int i=0;i
不应该将“diff”作为参数(而不是“value”)放在最后一条WriteLine语句中吗?是的,我忘记把它改回去了。后期编辑。然而原始结果。你们也假设平均值是一个整数,不太可能是这样。是的,没错,但我还不在那个里。这里是小步骤。复制粘贴我的代码(并切换平均数列表[i]),它就会工作。:)