首页 > 解决方案 > 向类传递值不断返回 0

问题描述

这可能是一个简单/愚蠢的问题,但我试图弄清楚为什么我的代码一直返回 0。我认为我传递值的语法不正确,但我无法找出正确的方法。

    class ICESMARK
{
    static int ICECount = 0;
    public double average = 0;

    public double[] ICES = new double[8];
    public ICESMARK(double Mark)
    {
        Mark = ICES[ICECount];
        if (ICECount == (ICES.Length - 1))
        {

            for (int x = 0; x < ICES.Length; x++)
            {
               average += ICES[x];
            }

            average /= ICES.Length;
        }

        ICECount++;
    }
}

class Program
{
    static void Main(string[] args)
    {
        ICESMARK[] ICE = new ICESMARK[8];
        //LABSMARK[] LAB = new LABSMARK[6];
        double userInput;

        for (int counter = 0; counter < ICE.Length ; counter++)
        {
            Console.Write("Please enter your mark for ICE{0}: ", counter + 1 );
            bool ifInt = double.TryParse(Console.ReadLine(), out userInput);
            ICE[counter] = new ICESMARK(userInput);
        }

        Console.WriteLine(ICE[1].average);
        Console.ReadLine();
    }
}

ICE[1].average - 显示 0

另外,如果有人有更有效的方法,请随时告诉我。除了平均值,必须是计算,不能使用内置方法。

标签: c#

解决方案


完成工作的最简单代码:

void Main()
{
    double[] ICE = new double[8];

    double userInput = 0.0;

    for (int counter = 0; counter < ICE.Length; counter++)
    {
        Console.WriteLine($"Please enter your mark for ICE {counter}: ");

        bool isNumerical = false;

        while(!isNumerical)
            isNumerical = double.TryParse(Console.ReadLine(), out userInput);

        ICE[counter] = userInput;
    }

    Console.WriteLine("Average : " + ICE.Average());
    Console.ReadLine();
}

这个怎么运作:

  1. 删除了所有的装饰,你不需要为此目的额外的课程
  2. 强制代码输入有效的双精度值以填充所有插槽
  3. 最后用来Linq Average计算Average

推荐阅读