我是编程新手,而且我正在学习Java语言中的函数。
有功能,一种描述兔子的生长,另一种描述狐狸的生长。在这两个函数中,都有一个double LeiPI = 0;
for (int i = 0; i < sent; i++) {
LeiPI += 4.0 * Math.pow(-1, i) / (2.0 * i + 1);
}
System.out.println(LeiPI);
语句,以避免if
或nbRabbits
达到负数。
nbFoxex
我的问题是:如何将此public static double calculateRabbits(double rabbits, double foxes, double attackRate) {
for (int i = 0; i < Duration; ++i){
rabbits = nbRabbits;
nbRabbits *= (1.0 + GROWTH_RATE_RABBITS - attackRate * nbFoxes );
**if (nbRabbits < 0.0){
nbRabbits = 0.0;
}**
}
return nbRabbits;
}
public static double calculateFoxes(double rabbits, double foxes, double attackRate) {
for (int i = 0; i < Duration; ++i){
nbFoxes *= (1.0 + ATTACK_RATE_INIT * rabbits * GROWTH_RATE_FOXES - MORTALITY_RATE);
**if (nbFoxes < 0.0){
nbFoxes = 0.0;
}**
}
return nbFoxes;
}
更改为其他功能?我想避免复制和粘贴if
。
答案 0 :(得分:6)
避免复制粘贴绝对是一个很好的目标。但是有一个更好的解决方案,而不是编写一个函数来替换它 - 使用其他人已经写过的函数。在这种情况下,java.util.Math#max
。 E.g:
nFoxes = Math.max(nFoxes, 0);
答案 1 :(得分:1)
在这种情况下,我会采用完全不同的方法并使用辅助函数:
private static int calculateAnimals(int ours, int other, double growth_rate, double factor) {
int result = ours;
for (int i = 0; i < Duration; ++i) {
result *= (1.0 + growth_rate + factor * other);
if (result < 0.0) {
result = 0.0;
}
}
return result;
}
public static int calculateFoxes(double rabbits, double foxes, double attackRate) {
return calculateAnimals(foxes, rabbits, -MORTALITY_RATE, ATTACK_RATE_INIT * GROWTH_RATE_FOXES);
}
public static int calculateRabbits(double rabbits, double foxes, double attackRate) {
return calculateAnimals(rabbits, foxes, GROWTH_RATE_RABBITS, -attackRate);
}
答案 2 :(得分:0)
我会尽力帮助你。首先,我认为你不应该将double
用于那种变量。相反,请使用int
。
int rabbit;
int foxes;
要回答您的问题,您可以执行以下操作:
public double nonZero(double v)
{
double value = 0.0;
/*If v is less than 0 then return 0*/
if (v < 0.0) {
value = 0.0;
}
/*If v is greater than cero return v*/
else
{
value = v;
}
return value;
}
如果您创建这样的方法,则可以调用方法而不是if,并执行以下操作:
nbRabbits = nonZero(nbRabbits);
nbFoxes = nonZero(nbFoxes);
避免负数。
答案 3 :(得分:0)
你可以这样做;创建单个方法并返回值,如果它大于零,否则将其设置为零。用这个方法。
public static double calculateRabbits(double rabbits, double foxes, double attackRate) {
for (int i = 0; i < Duration; ++i){
rabbits = numberOfRabbits(nbRabbits);
nbRabbits *= (1.0 + GROWTH_RATE_RABBITS - attackRate * nbFoxes );
return nbRabbits;
}
public static double mustNotBeZero(double numberOfRabbits){
if(numberOfRabbits<0){
numberOfRabbits=0.0;
}
else
return numberOfRabbits;
}