我的任务:
创建一个尺寸为10个元素的数组,并用任意整数值填充。
打印数组的最大值,数组的最小值,元素的总和,所有元素的平均值,并打印所有奇数。
我的代码:
using System;
using System.Linq;
namespace Massiv
{
public class MyMassiv
{
private int[] myMassiv = new int[10];
public int this[int index]
{
get
{
return myMassiv[index];
}
set
{
myMassiv[index] = value;
}
}
public int GetMaxElement(MyMassiv massiv)
{
return myMassiv.Max();
}
public int GetMinElement(MyMassiv massiv)
{
return myMassiv.Min();
}
public int GetSum(MyMassiv massiv)
{
return (int)myMassiv.Sum();
}
public double GetAverage(MyMassiv massiv)
{
return myMassiv.Average();
}
public void PrintOddValue(MyMassiv massiv)
{
for (int i = 0; i < myMassiv.Length; i++)
{
if(myMassiv[i] % 2 != 0)
Console.Write(myMassiv[i] + " ");
}
}
}
class Program
{
static void Main(string[] args)
{
MyMassiv mm = new MyMassiv();
Random rnd = new Random();
int n = 10;
for (int i = 0; i < n; i++)
{
mm[i] = rnd.Next(1000);
Console.WriteLine("{0} - {1}", i, mm[i]);
}
Console.WriteLine("Max: {0}, Min: {1}, Sum: {2}, Average: {3}", mm.GetMaxElement(mm), mm.GetMinElement(mm), mm.GetSum(mm), mm.GetAverage(mm));
Console.Write("Odd Value: ");
mm.PrintOddValue(mm);
Console.ReadKey();
}
}
}
它可以工作,但是我不确定某些设计。例如:“ mm.GetMaxElement(mm)”。这种设计对我来说似乎并不完美。在MyMassiv类中,我正在访问一个私有int [] myMassiv-这样好吗?我的设计错误是什么? 我考虑设计方法,以便什么都不会传递给他们。我在正确的轨道上吗?
答案 0 :(得分:0)
请查看重构示例:
public class MyMassiv
{
private int[] _array;
public int MaxElement => _array.Max();
public int MinElement => _array.Min();
public int Sum => _array.Sum();
public double Average => _array.Average();
public MyMassiv(int size = 10)
{
var rnd = new Random();
_array = Enumerable.Range(0, size)
.Select(i => rnd.Next(1000))
.ToArray();
}
public IEnumerable<int> GetOddValues() => _array.Where(item => item % 2 != 0);
}
class Program
{
static void Main(string[] args)
{
MyMassiv mm = new MyMassiv();
Console.WriteLine(
"Max: {0}, Min: {1}, Sum: {2}, Average: {3}",
mm.MaxElement,
mm.MinElement,
mm.Sum,
mm.Average);
Console.Write("Odd Values: ");
mm.GetOddValues()
.ToList()
.ForEach(item => Console.WriteLine(item));
Console.ReadKey();
}
}
您可以封装MyMassiv类范围内的所有“逻辑”。 在主要方法中,您只能显示值。 无需将MyMassiv对象传递给方法(就像您的示例中一样)。