入口参数过多时的method求解
只有三个入口参数还可以通过唯一一个method,输入所有入口参数,如下例:
static bool IsTeenager(int age, int minAge, int maxAge)
{
bool teenager = (age > minAge && (age < maxAge));
return teenager;
}
可是如果入口参数很多很多,像下面这个标准模型里的拉格朗日量方程,就无法用上面的方式求解。
当入口参数过多时,对于新手可行的解决方式如下:
e.g. f(x,y,z,w) = ax + by + cz + dw (a,b,c,d都是常数,x,y,z,w都是变量)
class Calculate
{
static private double x; // 将所有的入口参数都创建为Class Calculate的静态变量,开机既有
static private double y;
static private double z;
static private double w;
/* 为所有入口参数,逐个建立Set赋值方法,都是静态的以便于后面的Main调用,只赋值不用返回值。所以是Void的。CalculateF() 里的参数是空的,具体获取了什么结果,由body内部的公式和参数来决定。*/
public static void SetX(double x_)
{
x = x_;
}
public static void SetY(double y_)
{
y = y_;
}
public static void SetZ(double z_)
{
z = z_;
}
public static void SetW(double w_)
{
w = w_;
}
public static double CalculateF()
{
int a = 10;
int b = 14;
int c = 8;
int d = 7;
double result = a*x + b*y +c*z + d*w;
return result;
}
/* 通过这种方法,不仅可以解决入口参数过多的问题,还可以使公式的设置具有灵活性。因为内部所用到的参数和公式都可以改变。如下例*/
public static double CalculateG()
{
int a = 10;
int b = 14;
double result = a * x - b * y;
return result;
}
/* 在主程序中调用Set方法,并打印输出*/
static void Main(string[] args)
{
SetX(12.02);
SetY(10.5);
SetZ(11.8);
SetW(8.8);
Console.WriteLine(CalculateF());
Console.WriteLine(CalculateG());
Console.ReadKey();
}
可是,开过多的静态空间,会导致程序占用内存过多,其实也可以通过实例化Class的方式来解决。
步骤:
1)创建一个Class,在Class里写入一些public的方法
2)在Main主程序中,实例化这个Class,为instance
3)通过这个实例可以调用Class里的方法。
4)在入口参数里赋值。注意:入口参数,要与之前定义的方法相匹配,不然会报错。
instance.methodsOfClass()
程序如下:
/* 创建一个含有变量x,y,z,w的Class,叫Cal,将变量都封装为private*/
class Cal
{
private double x;
private double y;
private double z;
private double w;
/* 为每一个变量创建Setter,属性为public*/
public void SetX(double x_)
{
x = x_;
}
public void SetY(double y_)
{
y = y_;
}
public void SetZ(double z_)
{
z = z_;
}
public void SetW(double w_)
{
w = w_;
}
/* 创建一个method,属性为public*/
public double CalculateF()
{
int a = 10;
int b = 14;
int c = 8;
int d = 7;
double result = a * x + b * y + c * z + d * w;
return result;
}
/* 虽然上述methods都不是静态的,也能通过实例化Class Cal的方式来调用Cal里的方法。*/
static void Main(string[] args)
{
Cal firstCal = new Cal();
firstCal.SetX(10.5);
firstCal.SetY(12.3);
firstCal.SetZ(9.8);
firstCal.SetW(7.2);
Console.WriteLine(firstCal.CalculateF());
Console.ReadKey();
}