子类构造函数

时间:2009-11-08 05:19:43

标签: java constructor

此代码的结果应该是“huugiin zardal:3”,但它不起作用 请帮忙。还有什么简单的方法来写它吗?

class Cost3{

 int a;

 int u;
 int x;
 Cost3(int a,int u,int x){ 
 }
}

class FC1 extends Cost3{
   FC1(int a1, int u1, int x1){
   super(a1,u1,x1);
   a=a1;
   u=u1;
   x=x1;
   }

  public int huugiin_zardal(){
   return(((a+u)/2)*(x/100));
  }
}

public class Cost2{
 public static void main(String args[]){
  FC1 h_z=new FC1(3,4,20);
  System.out.println("huugiin zardal: "+h_z.huugiin_zardal());  
 } 
}

5 个答案:

答案 0 :(得分:4)

您的问题是((3 + 4) / 2 ) * (20 / 100)不是3。它是0因为(20 / 100)为零...在整数运算中。

实际上,即使((3 + 4) / 2 ) * 20 / 10060 / 100也是0。所以我怀疑你的根本问题是你有完全错误的公式。

此外,aux的初始化应该在超类型构造函数中而不是子类型构造函数中。 (这不能解决您当前的问题,但是目前您拥有代码的方式,创建Cost3的实例将返回一个尚未初始化字段的对象。)

答案 1 :(得分:3)

((3 + 4)/ 2)*(20/100)
 (7/2)*(0)
     0

7/2 = 3而不是3.5,因为它在整数除法中被截断。 相同的20/100 = 0而不是0.2

更好地缩进代码,这有很大帮助。

答案 2 :(得分:2)

这是一个更好,更简单的代码版本,但是由于其他人已经讨论过的整数除法原因,它会打印出0:

class Cost3 {
    int a;
    int u;
    int x;

    public Cost3(int a, int u, int x) {
        this.a = a;
        this.u = u;
        this.x = x;
    }
}

class FC1 extends Cost3 {
    public FC1(int a, int u, int x) {
        super(a, u, x);
    }

    public int huugiin_zardal(){
        return (((a + u) / 2) * (x / 100));
    }
}

public class Cost2 {
    public static void main(String args[]){
        FC1 h_z = new FC1(3, 4, 20);
        System.out.println("huugiin zardal: " + h_z.huugiin_zardal());
    }
}

请注意,如果超类处理实例变量(a,u和x),则不需要在子类中设置它们,只需通过super()调用正确的构造函数。

很难确切知道你的意图是什么,但有一种猜测是你想要一个可以处理特定变量的基类(Cost3),并且有一个基于不同计算返回值的扩展(例如FC1)。如果是这样,将基类提供为抽象是更合乎逻辑的,如下所示:

class abstract Cost3 {
    int a;
    int u;
    int x;

    public Cost3(int a, int u, int x) {
        this.a = a;
        this.u = u;
        this.x = x;
    }

    public abstract int calculate();
}

class FC1 extends Cost3 {
    public FC1(int a, int u, int x) {
        super(a, u, x);
    }

    public int calculate() {
        return (((a + u) / 2) * (x / 100));
    }
}

答案 3 :(得分:1)

huugiin_zardal()方法中,所有变量都声明为int。因此除法运算符执行整数除法,它将静默截断任何余数。对于整数除法,20 / 100 = 0

只需将您的一个变量强制转换为double,它会将整个表达式提升为浮点数,但最后只舍入为整数。

答案 4 :(得分:1)

你如何得到3,你究竟想要达到什么目的,你的问题不是很明确?

对于代码,它将使用您提供的参数执行以下操作。

(((3 + 4)/ 2)*(20/100))

((7/2)*(0)// 10/100会给你0,除非你施展这个计算

3 * 0 // 7/2设置为3,因为这是一个int计算

最终答案0。

根据您要实现的目标,您可能只需要使用除int计算之外的其他内容。