【问题标题】:Java making maths methodsJava制作数学方法
【发布时间】:2013-11-20 20:01:46
【问题描述】:

我正在创建一些进行简单数学计算的方法。我有一个正方形、立方体和超立方体方法。我正在尝试创建一个幂方法,当 n = 2 时,调用平方方法,当 n = 3 时,调用立方体方法等。我希望这个幂方法返回一个 int k。然而 k 的值似乎并没有落后于 if 语句。有什么建议吗?

  public int power(int x, int n){
    int k;
    if (n==2){
        k = square(x);
    }
    else if (n==3){
        k = cube(x);
    }
    else if (n==4){
        k = hypercube(x);
    }
    else if (n==1){
        k = x;
    }
    return k;
}

【问题讨论】:

  • 当您传递n0 时会发生什么? 5?
  • 你的值不是"travelling beyond the if statements"是什么意思是你的方法返回0或者java默认的int是什么?
  • 什么意思“k 的值似乎没有超出 if 语句”?你怎么知道的?
  • 使用调试器跟踪k的值

标签: java methods


【解决方案1】:

使用您的代码,我从编译器中得到“错误:变量 k 可能尚未初始化”。我猜这就是你的意思。这是因为,就像错误提示的那样,如果 n 不在 1 - 4 范围内,则 k 永远不会显式设置为任何值。这是解决问题的一种方法,它允许该方法适用于更大的 n 值(只要您不循环超过 Integer.MAX_VALUE):

public int power(int x, int n){
    int k;
    if (n==2){
        k = square(x);
    }
    else if (n==3){
        k = cube(x);
    }
    else if (n==4){
        k = hypercube(x);
    }
    else if (n==1){
        k = x;
    }
    else {
        k = 1;
        for (int i = 0; i < n; i++) {
            k *= x;
        }
    }
    return k;
}

【讨论】:

  • 这似乎有效,尽管当我调用 power 方法时,我收到一个红旗,告诉我必须将 power 方法设置为静态,不能对非静态 power 方法进行静态引用?
  • 要么将power 更改为静态方法(public static int power),要么在使用它之前创建它所在类的实例。您可能还需要将squarecubehypercube 设为静态。
【解决方案2】:

您可以为此使用循环,就像这里一样(我希望我做对了)。

public int power(int x, int n){
    if(n==0) return 1;
    int k = x;
    while(--n > 0) {
        k *= x;
    }
    return k;
}

您还可以添加对负幂的支持,但随后您需要一些其他返回类型(例如 float 或 double)。

但老实说,你为什么不直接使用Math.pow()

【讨论】:

    【解决方案3】:

    此代码无法编译,因为 k 尚未初始化,并且您在 return k; 处收到编译错误。如果要初始化为 0,请在声明中使用int k=0

    【讨论】:

      【解决方案4】:

      k 将在方法结束时“已知”,如果它是在途中分配的。也许你强制不能传入 k 的无效值,那么它应该做你想做的事情:

      public int power(int x, int n){
          if (n < 1 || n > 4){
              throw new IllegalArgumentException("n is invalid :" + n);
          }
          int k = 0;
          if (n==2){
              k = square(x);
          }
          else if (n==3){
              k = cube(x);
          }
          else if (n==4){
              k = hypercube(x);
          }
          else if (n==1){
              k = x;
          }
          return k;
      }
      

      您还应该确保x 始终有效。

      【讨论】:

        猜你喜欢
        • 2017-02-13
        • 2020-10-15
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多