这是我写的一段代码。
public class cube {
private int length;
private int breadth;
private int height;
private int volume;
private int density;
private int weight;
public cube(int l,int b,int h, int d) {
length=l;
breadth=b;
height=h;
density=d;
}
public void volmeShow(){
volume = length * breadth * height;
System.out.println("The Volume of the cube is "+this.volume);
}
}
所以如果我像这样实现上面的立方体类,
public class cubeApp {
public static void main(String[] args){
cube mycube = new cube(5,6,9,2);
mycube.volumeShow();
}
}
我得到一个输出,告诉我音量是270。
但是我得到一个输出,表示音量为0.另一方面,如果我像这样定义音量变量:
public class cube {
private int length;
private int breadth;
private int height;
private int volume=length*breadth*height;
private int density;
private int weight;
public cube(int l,int b,int h, int d) {
length=l;
breadth=b;
height=h;
density=d;
}
public void volmeShow(){
System.out.println("The Volume of the cube is " + this.volume);
}
}
为什么会这样?
答案 0 :(得分:4)
因为length
,breadth
和height
在执行该语句时尚未分配任何值。你最好在构造函数中执行该计算。
答案 1 :(得分:3)
唯一的问题是您的volume
变量仅在构造对象之前定义。其余属性默认设置为0,因此生成的卷为0。
您可以将构造函数修改为:
public cube(int l,int b,int h, int d) {
length=l;
breadth=b;
height=h;
density=d;
volume=length*breadth*height;
}
这样可以正确计算音量。 请注意,您应该使用Cube作为班级名称,请参阅Code Conventions for the Java
答案 2 :(得分:2)
由于在初始化类时执行private int volume=length*breadth*height;
,并且所有相关字段都为0.
您可以将构造函数修改为:
public cube(int l,int b,int h, int d) {
length=l;
breadth=b;
height=h;
density=d;
volume=length*breadth*height;
}
这样可以正确计算音量。 请注意,您应该使用Cube作为班级名称,请参阅Code Conventions for the Java
答案 3 :(得分:2)
初始化类时,所有成员字段都初始化为默认值(int
(和一般数字)为0)。
基本上
private int length;
private int breadth;
private int height;
private int density;
private int weight;
private int volume=length*breadth*height;
评估到
private int length = 0;
private int breadth = 0;
private int height = 0;
private int density = 0;
private int weight = 0;
private int volume=length*breadth*height;
评估为
private int volume=0*0*0;
然后您不再更新音量值。
你实际上会做得更好......
public cube(int l,int b,int h, int d) {
length=l;
breadth=b;
height=h;
density=d;
volume=length*breadth*height;
}
...实际上,您可以完全取消length
,breadth
,height
和density
值(来自您的示例),因为它们不会在课堂上添加任何东西......
答案 4 :(得分:1)
在其他变量中设置值后,您需要计算和分配音量 -
public cube(int l,int b,int h, int d) {
length=l;
breadth=b;
height=h;
density=d;
volume=length*breadth*height;
}
但是,在你的班级中,音量似乎是多余的。您可以删除它,您的方法可以随时计算它 -
public void volmeShow(){
int volume=length*breadth*height; //local, not needed at class level
System.out.println("The Volume of the cube is " + volume);
答案 5 :(得分:0)
你不能像这样定义var。
在方法外定义时 - 这将在创建类时计算。
答案 6 :(得分:0)
属性由构造函数初始化,以便在构造函数体之前但在调用super()之后声明它们。
在初始化卷时,在您的情况下,所有成员都设置为零,这是int的默认值。
你必须写:
public cube(int l,int b,int h, int d) {
length = l;
breadth = b;
height = h;
density = d;
volume = length*breadth*height;
}