C#,如何输出特定的数组搜索?

时间:2016-10-30 01:17:19

标签: c#

我创建的程序会提示用户输入月数,每月缺勤次数以及每月允许的缺勤金额。它应该计算员工的平均工作缺勤量以及他/她超过允许的最大缺勤次数。

我能够通过阵列循环计算平均值,但是他/她已经超过最大缺席次数存在问题。我正在使用二进制搜索方法,但无法输出员工超过允许缺勤金额的特定月份数。

这是该部分的当前代码:

for (int i = 0; i < numbOfAbsences.Length; i++)
{
    sum += numbOfAbsences[i];
    averageAbsences = (sum / numbOfMonths);
    Console.WriteLine("Employee was absent " + averageAbsences + " times per month.");
}

a = Array.BinarySearch(numbOfAbsences, maxAbsences);
if (a >= maxAbsences)
{                
}

我不确定在最后一组括号内会发生什么,因为我并不是要指出是否超过了最大数量,而是指出它的次数。

感谢您提供的帮助。

1 个答案:

答案 0 :(得分:0)

首先,问题没有明确说明。归结为:

“有一个很好的方法来获取一个int数组并将它们全部除以一个计数来产生一个双重数组的平均值?另外,我如何计算一个大于阈值的int数组的值?(这是什么我到目前为止:)“

其次,代码段非常混乱。更确切地说......它没有正确缩进。并非所有使用的变量都已定义,因此我们必须猜测它们是什么。变量名称不是很具描述性,因此必须查看每个变量如何用于理解它。然而,最重要的是,这不是封装。没有对象,没有函数......只需要原始代码,你需要非常仔细地阅读每一行才能理解。

将代码段与此对比:

using System;
using System.Linq;

namespace ArraySearch_StackOverflow
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] employeeAbsencesEachMonth = new int[] { 1, 2, 3, 4, 5, 6 };
            int maxAbsencesAllowedPerMonth = 3;

            double averageAbsencesPerMonth = GetAverageAbsencesPerMonth(employeeAbsencesEachMonth);
            Console.WriteLine($"Employee's Average Absences Per Month: {averageAbsencesPerMonth}"); /* 3 */
            int numTimesMaxAbsencesExceeded = GetNumMaxAbsencesViolations(employeeAbsencesEachMonth, maxAbsencesAllowedPerMonth);
            Console.WriteLine($"Number of Times Employee Exceeded Max Absence Limit: {numTimesMaxAbsencesExceeded}"); /* 3 */

            Console.WriteLine("\nPress any key to continue...");
            Console.ReadKey();
        }

        private static double GetAverageAbsencesPerMonth(int[] employeeAbsencesEachMonth)
        {
            // ???
            throw new NotImplementedException();
        }

        private static int GetNumMaxAbsencesViolations(int[] employeeAbsencesEachMonth, int maxAbsencesAllowedPerMonth)
        {
            // ???
            throw new NotImplementedException();
        }
    }
}

这个片段非常清晰。即使没有描述,它也会立即显示出被问到的内容,以及如何判断答案是否正确。因为问题已被转换为函数签名,并且上下文已被转换为调用函数的驱动程序,所以请完成设置和预期结果。

当然,这意味着答案的简单格式,您可以将其直接复制粘贴到代码中:

private static double GetAverageAbsencesPerMonth(int[] employeeAbsencesEachMonth)
{
    return employeeAbsencesEachMonth.Sum() / employeeAbsencesEachMonth.Length;
}

private static int GetNumMaxAbsencesViolations(int[] employeeAbsencesEachMonth, int maxAbsencesAllowedPerMonth)
{
    return employeeAbsencesEachMonth.Count(x => x > maxAbsencesAllowedPerMonth);
}