Java有指数运算符吗?

81

Java中是否有指数运算符?

例如,如果提示用户输入两个数字,他们输入32,则正确答案应为9

import java.util.Scanner;
public class Exponentiation {

    public static double powerOf (double p) {
        double pCubed;

        pCubed = p*p;
        return (pCubed);
    }

    public static void main (String [] args) {
        Scanner in = new Scanner (System.in);

        double num = 2.0;
        double cube;    

        System.out.print ("Please put two numbers: ");
        num = in.nextInt();

        cube = powerOf(num);

        System.out.println (cube);
    }
}

15
“p*p” 是“pSquared”,而不是“pCubed”。意思是 p 的平方,而不是 p 的立方。 - Bill the Lizard
6个回答

140

没有操作符,但有一个方法。

Math.pow(2, 3) // 8.0

Math.pow(3, 2) // 9.0

提醒一下,一个普遍的错误是认为2 ^ 3表示2的3次方。实际上并不是这样。符号^在Java(和类似语言)是二进制异或运算符,而不是幂运算符。



5
我想知道为什么“^”是位异或运算符(例如Java和Python)的事实标准——一定会让许多初学者或MATLAB用户感到困惑... - flow2k
4
为什么要单独提到Java和Python?在通用过程式编程语言中,“^”作为按位异或的运算符是由C引入的,几乎所有基于C(或从C或C ++中汲取灵感的)的语言都遵循了这个惯例。它在专门用于数学编程的语言中意味着另一种含义,这并不应该使任何人感到困惑。 - Mike 'Pomax' Kamermans

44

要使用用户输入来完成此操作:

public static void getPow(){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter first integer: ");    // 3
    int first = sc.nextInt();
    System.out.println("Enter second integer: ");    // 2
    int second = sc.nextInt();
    System.out.println(first + " to the power of " + second + " is " + 
        (int) Math.pow(first, second));    // outputs 9

7
最简单的方法是使用Math库。
使用Math.pow(a, b),结果将为a^b
如果你想自己实现,你需要使用for循环。
// Works only for b >= 1
public static double myPow(double a, int b){
    double res =1;
    for (int i = 0; i < b; i++) {
        res *= a;
    }
    return res;
}

使用中:

double base = 2;
int exp = 3;
double whatIWantToKnow = myPow(2, 3);

如何提示用户输入两个数字?例如2 3 = 8。 - user3362992
在你的例子中,底数将是3,指数为2。我猜你应该在内部循环中乘以a,并迭代b次。 - Saad
1
@libik 如果 b 是负数呢? - shanwu
1
myPow(double, double)方法的签名意味着它使用浮点幂进行计算,但实际上并不是这样。该方法的签名应该改为myPow(double, int)。Math.pow(double, double)确实考虑了浮点幂,例如,Math.pow(4, 0.5)返回4的平方根,即2,而myPow(4, 0.5)将返回4。 - Hummeling Engineering BV
@HummelingEngineeringBV - 好的,让我们在4年后修复它 :) - libik

6

有一个名为Math.pow(double a, double b)的方法。注意它返回一个double类型的值,你需要将其转换成int类型,例如(int)Math.pow(double a, double b)


4
您可以使用 Math 类的 pow 方法。以下代码将输出 2 的 3 次方(8)。
System.out.println(Math.pow(2, 3));

3

如果有人想使用递归来创建自己的指数函数,以下是供参考的内容。

public static double power(double value, double p) {
        if (p <= 0)
            return 1;

        return value * power(value, p - 1);
    }

4
请勿建议此类算法,它仅适用于 p 域的可忽略子集。 - Markus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接