class CCalculator{
int a,b,c;
void set_value(int x,int y,int z){
a=x;
b=y;
c=z;
}
void show(){
System.out.println("a="+a+" b="+b+" c="+c);
}
int add(){
return a+b+c;
}
int sub(){
return a-b-c;
}
int mul(){
return a*b*c;
}
int avg(){
 return (a+b+c)/3;
}
}
public class p_155_10 { /**
 * @param args
 */
public static void main(String[] args) {
CCalculator obj=new CCalculator();
obj.set_value(3, 4, 1);
int x=4,y=3;
System.out.println("x*y="+x*y);
System.out.println("x/y="+x/y+" x/y="+(double)x/y);

System.out.println("add="+obj.add()+" sub="+obj.sub()+" mul="+obj.mul()+" avg="+(double)obj.avg());//这里为何没有从int转换成double呢?
// TODO 自动生成方法存根 }}
求高手解答,不甚感激!

解决方案 »

  1.   

    double >int ,不能使用强制转换
      

  2.   

    x*y=12
    x/y=1 x/y=1.3333333333333333
    add=8 sub=-2 mul=12 avg=2.0
    转了,你在试试
      

  3.   

    int avg(){
         return (a+b+c)/3;
    }
    我想把这个方法里面的结果转换成double类型的。或者说这个方法如何修改,才能得到有小数结果?return double(a+b+c)/3;
    这样不行?
      

  4.   

    如果在Oracle中可以直接赋给Integer,就可以和INT型做算法,但是你的代码a+b+c的结果是int类型,3也是int类型结果也是Int类型,但是用double接收的0.0,你的结果是int所以接收不了。
    建议写成(a+b+c)/3.0;
    试试看,我没有放到代码中试,你先看看,回头我再来。
      

  5.   


    楼主:是不是就想把avg()方法返回值改成double类型的啊!呵呵!
        
      那楼主,我们接下来先说一下,概念部分,在java概念里,虽然没自动装箱,和拆箱的概念,其实我们也可以理解成这样。
     
       低精度的数据类型转换成高精度的数据类型,无需进行强转转换如下所示:   int x=1;
       double y=x;   反过来:高精度的数据类型转换成低精度的数据类型,就必须要强转了。如下所示:   double x=1.0;
       int y=(int)x;
       
       注意:大数据类型转小数据类型,会丢失精度的哦!
     
       接下来看看楼主的:就不难明白了!   楼主只需将计算好的结果转成,你需要的数据类型即可,但特别友好提示一下:需要类型兼容哦!double avg() {
       return (a + b + c) / 3;
    }
      

  6.   

    x*y=12
    x/y=1 x/y=1.3333333333333333
    add=8 sub=-2 mul=12 avg=2.0
     这是我运行后的结果,结果已经是double型的了啊如果你想把add  sub mul的结果也弄成double型的话 还是要像avg那样转下型就可以了啊 或者直接在方法里返回double型的
      

  7.   

    avg()方法返回的类型就是int,如果要返回小数的话,应该是
    double avg(){
      return (a+b+c)/3.0;}
      

  8.   

    一:double已经把类型转了 你的avg()函数返回的是一个int型,当调用函数之后再强转失去效果
    二:改正后的
    double avg(){
         return (double)(a+b+c)/3;
    }
      

  9.   

    class CCalculator{
        int a,b,c;
    void set_value(int x,int y,int z){
        a=x;
        b=y;
        c=z;
    }
    void show(){
        System.out.println("a="+a+" b="+b+" c="+c);
    }
    int add(){
        return a+b+c;
    }
    int sub(){
        return a-b-c;
    }
    int mul(){
        return a*b*c;
    }
    double avg(){//写方法时返回类型变成double就行了
         return (double)(a+b+c)/3;
    }
    }
    public class Suilian {    /**
         * @param args
         */
        public static void main(String[] args) {
            CCalculator obj=new CCalculator();
            obj.set_value(3, 4, 1);
            int x=4,y=3;
            System.out.println("x*y="+x*y);
            System.out.println("x/y="+x/y+" x/y="+(int)x/y);
            
            System.out.println("add="+obj.add()+" sub="+obj.sub()+" mul="+obj.mul()+" avg="+obj.avg());//这里为何没有从int转换成double呢?
            // TODO 自动生成方法存根    }}
      

  10.   

      返回类型直接写成double。
      

  11.   

    结果能得到啊!只是觉得这样子的效率太低了点,INT 和DOUBLE中反复的转换,也容易出错
      

  12.   

    感谢LS的兄弟们。问题已经被你们解决了。特别是5楼,12楼,解答非常准确。7楼很认真的回答我的问题,是我没说清楚问题,在这向那些误解我原意的兄弟们说声抱歉了。(a+b+c)/3 我想在计算过程中就是double类型的。正如12楼所言,强制转换失去效果。只是在这之前,我也试过用return double(a+b+c)/3; 程序老是出错,我还以为不行呢。原来是我搞错了。基础还是不够啊。