Почему я получаю значение NULL в качестве вывода String? - PullRequest
0 голосов
/ 19 сентября 2019

Почему переменная 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());

    }

}

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

В Java все переменные экземпляра инициализируются до значений по умолчанию, прежде чем конструктор сможет их инициализировать.Для объектов значением по умолчанию является null.

Ваш конструктор для класса Mauer передает не аргументы bm и n, а переменные экземпляра baumaterial и Name.(Обычные соглашения Java о присвоении имен будут именовать Name как name в нижнем регистре.) Когда вызывается setD, он по существу устанавливает эти переменные для себя - null.

Когда эти значения извлекаются дляпри печати оператор + выполняет преобразование строки, которая преобразует null в строку "null", которую вы видите в качестве вывода.

Исправьте конструктор, чтобы он передавал все 4 параметров вsetD вместо просто 2.

Кстати, в приведенном в этом вопросе коде нет никаких оснований для расширения Program на Mauer.Вероятно, вы можете удалить конструктор Program и Program не расширять Mauer.

0 голосов
/ 19 сентября 2019

ваш конструктор передает в качестве параметров методу пустые переменные, которые у него есть.Yo должен передать

 this.setD(h, b, bm, n)

Имя, например, было только определено, но не инициализировано, поэтому Имя по-прежнему равно нулю, и вы передавали его в качестве аргумента для setD.Если вы выполните отладку, вы увидите это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...