java pow
最近调用了一个函数math.pow,不过出了些小问题,一直没找到,望指点。package zy;
import java.lang.Math;
public class Shuixian
{
public static void main(String args[])
{
int a,b,c,n,j,i=1;
for(n=100;n<=999;n++)
{
a=n/100;
b=(n-i*100)/10;
c=n%10;
j=Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3);
while(n==j)
{
System.out.println("输出第"+i+"个水仙花:"+n);
i++;
}
}
System.exit(0);
}
}
调用结果:
D:\>javac zy\Shuixian.java
zy\Shuixian.java:13: 可能损失精度
找到: double
需要: int
j=Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3);
^
1 错误
----------------解决方案--------------------------------------------------------
基本数据类型的转换,当把级别低的值赋值给级别高的变量时,系统自动完成数据类型的转换;
当把级别个高的数值赋值给级别低的变量时,必须使用显示转换,格式:(类型名)要转换的值;
此题中变量j是int型变量,而Math类下的pow(double a,double b)返回值类型为double级别比int高,符合上面的第二种情况,所以要进行强制转换:
j=(int)(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3));
或者把j声明为double型变量即可。
----------------解决方案--------------------------------------------------------
回复 2楼 dadongzicool
还是得请教一下,pow(double a,double b)的返回值为double,这个我可以理解,但是不太明白的是pow(double a,double b)里的参数类型为double型,我输入int型的参数是不是直接转换为double型的。 ----------------解决方案--------------------------------------------------------
回复 3楼 hanxingxing
是的 ----------------解决方案--------------------------------------------------------
以下是引用hanxingxing在2010-3-21 18:49:57的发言:
还是得请教一下,pow(double a,double b)的返回值为double,这个我可以理解,但是不太明白的是pow(double a,double b)里的参数类型为double型,我输入int型的参数是不是直接转换为double型的。
当级别低的变量的值赋值给级别高的变量时,系统自动完成转换,反之要强制转换,此时有可能造成精度的损失。 还是得请教一下,pow(double a,double b)的返回值为double,这个我可以理解,但是不太明白的是pow(double a,double b)里的参数类型为double型,我输入int型的参数是不是直接转换为double型的。
----------------解决方案--------------------------------------------------------
回复 5楼 dadongzicool
谢谢版主!弱弱的问一句,你每天都在线吗?? ----------------解决方案--------------------------------------------------------
以下是引用hanxingxing在2010-3-22 00:00:04的发言:
谢谢版主!弱弱的问一句,你每天都在线吗??
哈 每天都在线的 谢谢版主!弱弱的问一句,你每天都在线吗??
----------------解决方案--------------------------------------------------------
package zy;
import java.lang.Math;
public class Shuixian
{
public static void main(String args[])
{
int a,b,c,n,j,i=1;
for(n=100;n<=999;n++)
{
a=n/100;
b=(n-i*100)/10;
c=n%10;
j=(int)(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3));
if(n==j) //while会是死循环,必须改成if
{
System.out.println("输出第"+i+"个水仙花:"+n);
i++;
}
}
System.exit(0);
}
}
[ 本帖最后由 lampeter123 于 2010-3-22 08:33 编辑 ]
----------------解决方案--------------------------------------------------------
回复 8楼 lampeter123
谢了,您看的真细,说明你对我的程序用心看了,再次感谢你的指导。 ----------------解决方案--------------------------------------------------------