我的任务是编写一个程序,提示用户输入正双a
和整数
n
大于2,并将正整数a
的第n个根的值打印到屏幕上,精确到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?
答案 0 :(得分:8)
将1/n
替换为1.0/n
。
您正在获得整数除法,因此无论n
是什么,如果它是2或更高,那么1/n
将会出现零。然后你将你的数字提高到零功率,得到1
。
用1
替换1.0
使得除法成为浮点除法 - 也就是说,结果不会被截断为整数。这就是你想要的。
答案 1 :(得分:5)
首先,我假设
double sum = Math.pow(a,(1/root));
应该是
double sum = Math.pow(a,(1/n));
因为代码中没有root
变量。
其次,对于每个整数n,1 / n会给出0>因此总和为1.0。 您应该将其替换为:
double sum = Math.pow(a,(1.0/n));
或
double sum = Math.pow(a,(1/(double)n));
为了得到双变量的除法。