我创建的程序会提示用户输入月数,每月缺勤次数以及每月允许的缺勤金额。它应该计算员工的平均工作缺勤量以及他/她超过允许的最大缺勤次数。
我能够通过阵列循环计算平均值,但是他/她已经超过最大缺席次数存在问题。我正在使用二进制搜索方法,但无法输出员工超过允许缺勤金额的特定月份数。
这是该部分的当前代码:
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)
{
}
我不确定在最后一组括号内会发生什么,因为我并不是要指出是否超过了最大数量,而是指出它的次数。
感谢您提供的帮助。
答案 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);
}