将If语句更改为Java中的函数

时间:2015-10-18 21:05:59

标签: java function if-statement methods

我是编程新手,而且我正在学习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); 语句,以避免ifnbRabbits达到负数。

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

4 个答案:

答案 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;
    }