2015-10-18 16 views
1

我是編程新手,我正在學習Java語言中的函數。將If語句更改爲Java中的函數

有功能,一個描述兔子的生長,另一個描述狐狸的生長。在這兩個函數中,都有一個if聲明以避免nbRabbitsnbFoxex達到負數。

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到另一個函數?我想避免if的複製和粘貼。

+2

您想爲兩行創建一個新函數嗎? – sam

+3

使用'while'而不是'if'?我不明白這個問題。順便說一句,從現實世界的角度來看,'double'類型對於動物的數量沒有意義。 –

+1

函數在java中被稱爲方法 –

回答

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

如果你創建這樣的方法,你可以調用,如果該方法,而不是做一些事情,如:

nbRabbits = nonZero(nbRabbits); 
nbFoxes = nonZero(nbFoxes); 

避免負數。

6

避免複製粘貼絕對是一個不錯的目標。但是,與編寫函數來替換它相比,有一個更好的解決方案 - 使用其他人已經編寫的函數。在這種情況下,java.util.Math#max。例如:

nFoxes = Math.max(nFoxes, 0); 
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); 
} 
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; 
    }