当前位置: 代码迷 >> Java相关 >> java pow
  详细解决方案

java pow

热度:445   发布时间:2010-03-21 09:56:27.0
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 错误
搜索更多相关的解决方案: java  pow  

----------------解决方案--------------------------------------------------------
基本数据类型的转换,当把级别低的值赋值给级别高的变量时,系统自动完成数据类型的转换;
当把级别个高的数值赋值给级别低的变量时,必须使用显示转换,格式:(类型名)要转换的值;

此题中变量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型的。
当级别低的变量的值赋值给级别高的变量时,系统自动完成转换,反之要强制转换,此时有可能造成精度的损失。
----------------解决方案--------------------------------------------------------
回复 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
谢了,您看的真细,说明你对我的程序用心看了,再次感谢你的指导。
----------------解决方案--------------------------------------------------------
  相关解决方案