【问题标题】:Change an If statement to a function in Java将 If 语句更改为 Java 中的函数
【发布时间】:2016-01-17 03:22:58
【问题描述】:

我是编程新手,正在学习 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的复制和粘贴。

【问题讨论】:

  • 你想为两行创建一个新函数?
  • 使用while 代替if?我不明白这个问题。顺便说一句,从现实世界的角度来看,double 类型对于动物的数量没有意义。
  • 函数在java中称为方法
  • 其实我不想只为两行创建一个方法。我的教授想要……哈哈

标签: java function if-statement methods


【解决方案1】:

避免复制粘贴绝对是一个好目标。但是有一个比编写函数来替换它更好的解决方案——使用其他人已经编写的函数。在这种情况下,java.util.Math#max。例如:

nFoxes = Math.max(nFoxes, 0);

【讨论】:

    【解决方案2】:

    我会尽力帮助你的。首先,我认为您不应该将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】:

      在这种情况下,我会采取完全不同的方法并使用辅助函数:

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

      【讨论】:

        【解决方案4】:

        你可以这样做;创建单个方法,如果大于零则返回值,否则将其设置为零。用方法。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-23
          • 1970-01-01
          • 2022-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多