[英]Bad operand type for binary operator '^'
嘗試創建一個遞歸方法,將一個double值提升為java課程的int權限。 指令說“但是,編寫代碼,以便當n為偶數時,方法將返回(x ^(n / 2))^ 2。”
這是我到目前為止:
public static double powerFaster(double x, int n) {
if (n == 0) {
return 1;
}
else if ((n % 2) == 0) {
return ((x ^ (n / 2.0) ^ 2.0)); //Error occurs here.
} else {
return x * powerFaster(x, (n - 1));
}
}
^
是XOR運算符,而不是冪。 使用Math.pow()
獲取電源。
也就是說,我認為你錯過了練習的重點。
你應該return powerFaster(x, n/2) * powerFaster(x, n/2);
當n
是偶數時(實際上進行一次遞歸調用,將其結果存儲在變量中並將其自身相乘)。
public static double powerFaster(double x, int n) {
if (n == 0) {
return 1;
}
else if ((n % 2) == 0) {
double pow = powerFaster(x, n/2);
return pow * pow;
} else {
return x * powerFaster(x, (n - 1));
}
}
如果你這樣做是為了提高速度,你想避免使用Math.pow
因為這是你要替換的功能。
要得到一個值的平方,你可以做d * d
public static void main(String[] args) {
System.out.println(powerOf(2, 9));
}
public static double powerOf(double d, int n) {
if (n < 0) return 1 / powerOf(d, -n);
double ret = 1;
if (n > 1)
ret = powerOf(d * d, n / 2);
if (n % 2 != 0)
ret *= d;
return ret;
}
版畫
512.0
^
是按位異或,與整數一起使用 :
int a = 6; //00000110
int b = 5; //00000101
int c = a ^ b; //gives you 3 = 00000011, not 6^5
操作處於二進制級別:
00000110 //a
00000101 //b
--------- XOR
00000011
要執行電源,請使用Math.pow()
:
Math.pow(2.0, 1.0) //gives you 2.0
在Java中,您應該使用java.lang.Math.pow(double x,double n)將值x
提升為n
的冪
在旁注不要忘記Math.pow是一個非常繁重的操作,如果你只使用它作為方形或立方體,你最好用*運算符或甚至for循環
Mult with *運算符耗時4ms
Mult with math pow需要717ms
帶有for循環的Mult需要4ms
只有在測試中使用立方體操作,才能完成一百萬次
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.