我正在创建一些简单的数学计算方法。我有一个方形,立方体和超立方体方法。我正在尝试创建一个幂方法,当n = 2时,调用square方法,当n = 3时,调用cube方法等。我希望这个幂方法返回一个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;
}
答案 0 :(得分: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;
}
答案 1 :(得分:0)
你可以使用循环,就像这里(我希望我做对了)。
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()
?
答案 2 :(得分:0)
此代码无法编译,因为k尚未初始化,并且您在return k;
处收到编译错误。如果要初始化为0,请在声明中使用int k=0
答案 3 :(得分:0)
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
始终有效。