Konstruktor initialisiert nicht, NULLPOINTER Exception



  • Guten Tag zusammen,

    anbei das Listing mit dem Problem des Konstruktors der ein Array von Kreis objekten nicht initialisiert.
    1. Warum arbeitet mein Konstruktor nicht sauber?
    2. Warum muss ich im Programm "KreisTest" nochmals initialisieren?
    3. Wie würde der Code richtig lauten?

    Grüße,
    Kevin

    public class Kreis extends Object
    {	private int x,y,radius,x_tmp,y_tmp;
    	public final double PI = 3.14159;
    		public void setRadius(int wert) {
    		radius = wert;
    	}
    	public double getUmfang() {
    		return 2*radius*PI;
    	}
    	public double getFlaeche() {
    		return radius*radius*PI;
    	}
    	public Kreis () {
    		this(10,10,10);
    	}
    	public Kreis(int x, int y, int radius) {
    		this.x = x;
    		this.y = y;
    		this.radius = radius;
    	}
    	public boolean bewege(int deltaX, int deltaY) {
    		x_tmp += deltaX;
    		y_tmp += deltaY;
    		if(x_tmp+radius > 1024 || x_tmp < 0
    			|| y_tmp > 768 || y_tmp < 0) return false;
    
    		else {
    			x=x_tmp;
    			y=y_tmp;
    		}
    		return true;
    	}
    	public void skaliere(int deltaRadius) {
    		radius += deltaRadius;
    	}
    	public String toString() {
    		return "Kreis bei x= "+x+" y= "+y+" Radius: "+radius;
    	}
    	public boolean equals(Kreis kreisObj) {
    		if (radius == kreisObj.radius) {
    			System.out.println("Juhuu");
    			return true;
    		}
    		else {
    			System.out.println("Schade");
    			return false;
    		}
    	}
    }
    
    public class KreisTest extends Object
    {	public static void main(String[] args) {
    		// Eigentlich werden die Instanzen hier schon initialisiert
    		Kreis[] kreis = new Kreis[5];
    		// Warum bekomme ich OHNE Zusatzinitialisierung eine
    		// NULLPOINTER EXCEPTION beim Zugriff???
    		for(int i=0; i<kreis.length; i++) {
    			kreis[i]=new Kreis();
    		}
    		// Zugriff
    		for(int i=0; i<kreis.length; i++) {
    			System.out.println("i = "+i);
    			System.out.println("Element"+i+" "+kreis[i].toString());
    		}
    	}
    }
    


  • 1. Die Konstruktoren sehen gut aus.
    2. Tust du nicht. In Zeile 4 legst du ein Array an, das Platz für 5 Kreisreferenzen bietet (die aber alle noch null sind). In Zeile 8 greifst du auf die freien Array-Plätze zu, um neu angelegt Objekte herein zu schreiben. Das sind 2 unterschiedliche Dinge.
    3. Was stimmt denn nicht?



  • deine equals methode überschreibt übrigens nicht Object#equals, die signatur stimmt nicht.


Log in to reply