在Java中计算正整数的第n个根

在Java中计算正整数的第n个根,java,recursion,square-root,Java,Recursion,Square Root,我的任务是编写一个程序,提示用户输入一个正双精度a和一个整数 n大于2,并将正整数的第n个根的值a打印到屏幕上,精确到100位。我使用了Math.pow来获得根,我觉得好像我做的每件事都是对的。唯一的问题是,每次我运行程序时,输出都是1.0,无论我为a和n输入什么数字。我的代码有什么问题 import java.util.Scanner; import java.lang.Math; public class Q8 { public static void main(String[]

我的任务是编写一个程序,提示用户输入一个正双精度
a
和一个整数
n
大于2,并将正整数的第n个根的值
a
打印到屏幕上,精确到100位。我使用了
Math.pow
来获得根,我觉得好像我做的每件事都是对的。唯一的问题是,每次我运行程序时,输出都是
1.0
,无论我为
a
n
输入什么数字。我的代码有什么问题

import java.util.Scanner;
import java.lang.Math;

public class Q8 {

    public static void main(String[] args) {

    System.out.println("Enter a positive number: ");
    Scanner in = new Scanner(System.in);
    double a = in.nextDouble();

    System.out.println("Enter an integer greater than 2: ");
    Scanner in2 = new Scanner(System.in);
    int n = in.nextInt();

    System.out.println(pow (a,n));
    }

private static double pow(double a, int n) {
      if (n == 0){
            return 1;
      }

      else{
         double sum = Math.pow(a,(1/n));
         return sum;
}

为什么答案总是1.0?

1/n
替换为
1.0/n

你得到的是整数除法,所以无论
n
是什么,如果是2或更高,那么
1/n
都是零。然后你将你的数字提高到零次方,这将给出
1


1
替换为
1.0
将使除法变成浮点除法-也就是说,结果不会被截断为整数。这就是你想要的。

首先,我假设

double sum = Math.pow(a,(1/root));
应该是

double sum = Math.pow(a,(1/n));
因为代码中没有
根变量

其次,对于每一个n>1的整数,1/n将为0。因此,总和为1.0。 您应将其替换为:

double sum = Math.pow(a,(1.0/n));


为了得到双变量的除法。

我没有看到在这个表达式中定义了
root
Math.pow(a,(1/root))
。这是什么?@icza这是个打字错误。
root
应该是
n
或者
n
应该是
root
。使用
双精度
永远不会得到100位小数。请允许我介绍一下
BigDecimal
pow
对函数来说是一个糟糕的名字。我如何合并BigDecimal?前提是
root
也是一个整数,否则它是一个浮点运算,不管文本的类型如何。对。在我看来,OP希望
n
相同,只是键入了其中一个错误。根应该是n,而不是根。尽管如此,这还是奏效了!好的,因为你刚刚编辑了你的问题,我编辑了我的答案来匹配它。是的,我编辑了!谢谢你的帮助,真是个愚蠢的错误!
double sum = Math.pow(a,(1/(double)n));