为什么String变量输出String作为名称和建筑材料?
总是在打印代码时,“名称”和建筑材料上的输出始终为“空”。
public class Mauer{
private int height;
private int width;
private String baumaterial;
private String Name;
Mauer(int h, int b, String bm, String n){
this.setD(h,b, baumaterial, Name);
}
public void setD(int h, int b, String bm, String n) {
this.height=h;
this.width=b;
this.baumaterial = bm;
this.Name = n;
}
public int getH() {
return height;
}
public int getW() {
return width;
}
public String getBM() {
return baumaterial;
}
public String getN() {
return Name;
}
}
...和第二部分
public class Program extends Mauer{
Program(int h, int b, String bm, String n) {
super(h, b, bm, n);
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
Mauer m1 = new Mauer(5,10, "Stein", "Burgmauer");
Mauer m2 = new Mauer(7,12, "Holz", "Holzmauer");
System.out.println("Die Höhe der Mauer ist " + m1.getH());
System.out.println(" Die Breite der Mauer ist "+ m1.getW());
System.out.println(" Das Material besteht aus "+ m1.getBM());
System.out.println("Der Name der Mauer ist "+m1.getN());
System.out.println("Die Höhe der zweiten Mauer ist "+ m2.getH());
System.out.println(" Die Breite der zweiten Mauer ist "+ m2.getW());
System.out.println(" Das zweite Material besteht aus "+ m2.getBM());
System.out.println("der Name der zweiten Mauer 2 ist "+ m2.getN());
}
}
答案 0 :(得分:0)
您的构造函数会将其具有的空变量作为参数传递给方法。 您应该通过
this.setD(h, b, bm, n)
例如,仅定义但未初始化名称,因此Name仍为null,您将其作为参数传递给setD。如果您进行调试,则会看到此信息。
答案 1 :(得分:0)
在Java中,所有实例变量都将初始化为默认值,然后构造函数才有机会对其进行初始化。对于对象,默认值为null
。
您的Mauer
类的构造函数不传递参数bm
和n
,而是传递实例变量baumaterial
和Name
。 (普通的Java命名约定将Name
命名为name
,用小写字母表示。)调用setD
时,它实际上将这些变量设置为它们自己-null
。
检索这些值以进行打印时,+
运算符将执行字符串转换,该转换将null
转换为字符串"null"
,您将其视为输出。
修复您的构造函数,将所有4 个参数传递给setD
而不是2个。
顺便说一句,在此问题给出的代码中没有明显理由使Program
扩展Mauer
。您很可能可以删除Program
构造函数,并使Program
不扩展Mauer
。