c#从for循环中的数组索引中减去一个数字
我需要找出数组中每个数值与平均值的差值。我需要循环遍历每个值,从平均值中减去每个值,然后显示差值。我尝试了几种不同的方法,但最后的结果总是0。我做错了什么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
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]),它就会工作。:)