此代码的结果应该是“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());
}
}
答案 0 :(得分:4)
您的问题是((3 + 4) / 2 ) * (20 / 100)
不是3
。它是0
因为(20 / 100)
为零...在整数运算中。
实际上,即使((3 + 4) / 2 ) * 20 / 100
为60 / 100
也是0
。所以我怀疑你的根本问题是你有完全错误的公式。
此外,a
,u
和x
的初始化应该在超类型构造函数中而不是子类型构造函数中。 (这不能解决您当前的问题,但是目前您拥有代码的方式,创建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,你究竟想要达到什么目的,你的问题不是很明确?
对于代码,它将使用您提供的参数执行以下操作。
((7/2)*(0)// 10/100会给你0,除非你施展这个计算
3 * 0 // 7/2设置为3,因为这是一个int计算
最终答案0。
根据您要实现的目标,您可能只需要使用除int计算之外的其他内容。