【问题标题】:c# adding array calculations to new decimalc# 将数组计算添加到新的十进制
【发布时间】:2017-03-16 08:00:25
【问题描述】:

所以问题是我无法让 total += parkFee 将所有 parkFee 加在一起,它似乎只需要 20 max_fee 并将其乘以数组长度 (30) 而不是获取 parkFee 的新总和。

这很可能是我错过的超级简单的东西,因为我对此很陌生,但我似乎无法弄清楚。
我觉得这个问题可能与if 声明有关。如果有人能指出我正确的方向,将不胜感激。谢谢。

/*pseudocode
Program : CarParkCalc3
     * HOURLY_RATE=2.50
     * MAX_FREE=20.00
     * int[]hoursArray 
     * parkFee = HOURLY_RATE * hoursArray
     * IF parkTime > MAX_FEE THEN
     *      OUTPUT MAX_FEE
     * ELSE
     *      OUTPUT parkFee
     * ENDIF
*/


const decimal HOURLY_RATE = 2.50m;
const decimal MAX_FEE = 20m;
decimal parkFee = 0;
int[] hoursArray = { 8, 24, 9, 7, 6, 12, 10, 11, 23, 1, 2, 9, 8, 8, 9, 7, 9, 15, 6, 1, 7, 6, 12, 10, 11, 23, 1, 2, 9, 8 };


Console.WriteLine("Hours  Park fee");
for (int index = 0; index < hoursArray.Length; index++)

{
    {
        parkFee = HOURLY_RATE * hoursArray[index];

        if (parkFee > MAX_FEE)
        {
            Console.WriteLine("{0,6}   {1,9} ", hoursArray[index], MAX_FEE.ToString("N"));
        }
        else
        {
            Console.WriteLine("{0,6}   {1,9} ", hoursArray[index], parkFee.ToString("N"));
        }

    }

}

decimal total = 0;
double average = 0;
for (int index = 0; index < hoursArray.Length; index++)

{
    total += parkFee;
}

average = (double)total / hoursArray.Length;
Console.WriteLine("Total = " + total);
Console.WriteLine("Average = " + average.ToString("N2"));
Console.ReadKey();

【问题讨论】:

  • 您每次都在上层 for 循环中重新计算 parkFee。总计只是为数组中的每个元素添加相同的 parkFee(上 for 循环中最后计算的值)
  • 解决这个问题以及学习新知识的最佳方法是调试这段代码,观察每行代码中所有变量的变化情况。这样你就会看到它有什么问题
  • 看看你添加parkFee的最后一个循环。在每次迭代时检查parkFee 的值!如果您不想或不能使用调试器,可以将其打印到控制台。你会发现它没有改变!现在原因是你的解决方案

标签: c# arrays sum average


【解决方案1】:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
  class Program
{
    static void Main(string[] args)
    {
        {
            /*pseudocode
            Program : CarParkCalc3
                 * HOURLY_RATE=2.50
                 * MAX_FREE=20.00
                 * int[]hoursArray 
                 * parkFee = HOURLY_RATE * hoursArray
                 * IF parkTime > MAX_FEE THEN
                 *      OUTPUT MAX_FEE
                 * ELSE
                 *      OUTPUT parkFee
                 * ENDIF
            */


            const decimal HOURLY_RATE = 2.50m;
            const decimal MAX_FEE = 20m;

            int[] hoursArray = { 8, 24, 9, 7, 6, 12, 10, 11, 23, 1, 2, 9, 8, 8, 9, 7, 9, 15, 6, 1, 7, 6, 12, 10, 11, 23, 1, 2, 9, 8 };
            decimal[] parkFee = new decimal[hoursArray.Length];

            Console.WriteLine("Hours  Park fee");
            for (int index = 0; index < hoursArray.Length; index++)

            {



                {
                    parkFee[index] = HOURLY_RATE * hoursArray[index];

                    if (parkFee[index] > MAX_FEE)
                    {
                        Console.WriteLine("{0,6}   {1,9} ", hoursArray[index], MAX_FEE.ToString("N"));
                    }
                    else
                    {
                        Console.WriteLine("{0,6}   {1,9} ", hoursArray[index], parkFee[index].ToString("N"));
                    }

                }

            }

            decimal total = 0;
            double average = 0;
            for (int index = 0; index < hoursArray.Length; index++)

            {
                total += parkFee[index];
            }

            average = (double)total / hoursArray.Length;
            Console.WriteLine("Total = " + total);
            Console.WriteLine("Average = " + average.ToString("N2"));
            Console.ReadKey();
        }
    }
}

}

你可以用数组做到这一点,只使用一个变量,这就是你得到单个值的原因

【讨论】:

  • 查看发布的问题和 cmets 变得非常明显,OP 正在尝试学习。这个答案的教育价值为-1。没有任何解释。甚至没有尝试教钓鱼就交出鱼没有太大价值或使用恕我直言
【解决方案2】:

只需移动总计 += parkFee;到上层循环。

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*pseudocode
        Program : CarParkCalc3
             * HOURLY_RATE=2.50
             * MAX_FREE=20.00
             * int[]hoursArray 
             * parkFee = HOURLY_RATE * hoursArray
             * IF parkTime > MAX_FEE THEN
             *      OUTPUT MAX_FEE
             * ELSE
             *      OUTPUT parkFee
             * ENDIF
        */


            const decimal HOURLY_RATE = 2.50m;
            const decimal MAX_FEE = 20m;
            decimal parkFee = 0;
            int[] hoursArray = { 8, 24, 9, 7, 6, 12, 10, 11, 23, 1, 2, 9, 8, 8, 9, 7, 9, 15, 6, 1, 7, 6, 12, 10, 11, 23, 1, 2, 9, 8 };
            decimal total = 0;
            double average = 0;

            Console.WriteLine("Hours  Park fee");
            for (int index = 0; index < hoursArray.Length; index++)
            {



                {
                    parkFee = HOURLY_RATE * hoursArray[index];
                    total += parkFee;
                    if (parkFee > MAX_FEE)
                    {
                        Console.WriteLine("{0,6}   {1,9} ", hoursArray[index], MAX_FEE.ToString("N"));
                    }
                    else
                    {
                        Console.WriteLine("{0,6}   {1,9} ", hoursArray[index], parkFee.ToString("N"));
                    }

                }

            }




            average = (double)total / hoursArray.Length;
            Console.WriteLine("Total = " + total);
            Console.WriteLine("Average = " + average.ToString("N2"));
            Console.ReadKey();
        }
    }
}

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 2012-12-11
    • 1970-01-01
    • 2017-12-07
    • 2019-03-01
    • 2019-04-29
    • 2019-09-22
    • 2017-06-05
    • 1970-01-01
    相关资源
    最近更新 更多