NullPointerException

NikeAir22

Mitglied
Hallo leute :)

ich habe vor einigen Tagen die Hausuafgabe bekommen, ein Programm in Java zu schreiben, welches sowohl den Umfang als auch den Flacheninhalts eines Dreiecks und eines Kreises errechnet. Jetzt wo ich einigermaßen "fertig" bin, will mein Programm einfach nicht laufen und ich sehe den Fehler nicht so recht (Beschreibe ich nochmal genauer unter dem Quellcode). Außerdem sollte das ganze eine Abstrakte Klasse "Figur" haben. Diese enthält die Methode CompareTo, welche bei mir noch falsch ist. Ich habe mir das auch noch nicht angesehen, also ignoriert das einfach :)


Java:
abstract class Figur implements Comparable {
	abstract double inhalt();
	abstract double umfang();
	public int compareTo(Object object) {
		return 2;
		
	}
}


Java:
public class Punkt {

    // Attribute
    private double x;
    private double y;
    private final double EPS = 0.0000001;

    // Konstruktor
    public Punkt(double x, double y) {
        this.x = x;
        this.y = y;
    }
    // get-/set-Methoden

    public double getX() {
        return this.x;
    }


    public double getY() {
        return this.y;
    }


    public void setX(double x) {
        this.x = x;
    }


    public void setY(double y) {
        this.y = y;
    }

    // Überlagerung von Methoden der Klasse Object
    public boolean equals(Object x) {
        Punkt that = (Punkt) x;
        return Math.abs(this.x - that.x) < this.EPS && Math.abs(this.y - that.y) < this.EPS;
    }

    public Object clone() {
        return new Punkt(this.x, this.y);
    }
    public String toString() {
        return String.format("%.1f, %.1f", this.x, this.y);
    }


    // Anwendungen
    public double abstand() {
        return Math.sqrt((this.x * this.x) + (this.y * this.y));
    }

    public double abstand(Punkt p) {
        double diffX = Math.abs(this.x - p.x);
        double diffY = Math.abs(this.y - p.y);
        return Math.sqrt((diffX * diffX) + (diffY * diffY));
    }
}




Java:
public class Dreieck extends Figur{
    public Punkt p1;
    public Punkt p2;
    public Punkt p3;
    
    public Dreieck (Punkt p1 , Punkt p2 , Punkt p3){
        
        this.p1 = p1;
        this.p2 = p2;
        this.p3 = p3;
    }
   
	public void setP1(Punkt p1) {
		this.p1 = p1;
	}

	public void setP2(Punkt p2) {
		this.p2 = p2;
	}

	public void setP3(Punkt p3) {
		this.p3 = p3;
	}

	public Punkt getP1() {
		return p1;
	}


	public Punkt getP2() {
		return p2;
	}


	public Punkt getP3() {
		return p3;
	}

	
	double a = p1.abstand(p2);
	double b = p1.abstand(p3);
	double c = p2.abstand(p3);
	
	double s = 0.5 * (a + b + c);

	
	double inhalt() {
		double inhalt = Math.sqrt(s*(s-a)*(s-b)*(s-c));
		
		return inhalt;
	}

	
	double umfang() {
		double umfang = a+b+c;
		
		return umfang;
	}
	
	public String toString(){
		return String.format("%f /n%f", inhalt(), umfang() );
	}
	
   
}


und hier Spuckt Eclipse mir die NullPointerException aus...in Zeile 42 bei:
" double a = p1.abstand(p2);
double b = p1.abstand(p3);
double c = p2.abstand(p3);
"




Java:
public class Kreis extends Figur {
	
	private Punkt p4;
	private double r;
	private double pi = Math.PI;
	
	
	public Kreis (Punkt p4, double r){
		this.p4 = p4;
		this.r = r;
		
	}
	
	public Punkt getP4() {
		return p4;
	}

	public double getR() {
		return r;
	}

	public void setP4(Punkt p4) {
		this.p4 = p4;
	}
	
	
	double inhalt() {
		double inhalt = (pi * r * r);
		return inhalt;
	}


	double umfang() {
		double umfang = (2 * pi * r);
		return umfang;
	}

}


Die Klasse "Kreis" war auch noch nicht fertig...es geht mir hier ja erstmal auch nur um die Klasse "Dreieck :)


Java:
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Punkt p1 = new Punkt(1.0, 1.0);
		Punkt p2 = new Punkt(1.0, 4.0);
		Punkt p3 = new Punkt(5.0, 2.5);
		
		Figur f = new Dreieck (p1, p2, p3);
		
		System.out.println (f.inhalt());
		System.out.println (f.umfang());

	}

}




Also, folgendes Problem: Ich bekomme beim Ausführen immer einen Fehler beim Ausführen des Programms. Der erste ist beschrieben, unter meiner Klasse Dreieck und der Zweite ist in der Main-Klasse, in Zeile 15 ( "Figur f = new Dreieck (p1, p2, p3);" )...der Genaue Fehler ist folgender:

"Exception in thread "main" java.lang.NullPointerException
at figuren.Dreieck.<init>(Dreieck.java:42)
at figuren.Main.main(Main.java:15)"


Wisst ihr vielleicht, wo mein Fehler liegt? Ich bitte euch ganz dringend um Rat :)
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
wann wird deiner Meinung nach der Code
> double a = p1.abstand(p2);
ausgeführt?
nachdem dein Konstruktor p1 gesetzt hat? welche Regeln spielen da eine Rolle?
im Zweifel lieber gar nicht so komplizierte Zeilen direkt in die Klasse schreiben,

wenn sie nicht sowieso für eine bestimmte Methode gedacht waren, dann nur die Variablen in der Klasse definieren,
und das Zuweisen von Werten in deinem Konstruktor nach Reihenfolge ausführen
 

anti-held

Bekanntes Mitglied
Deine Klasse sollte so aussehen, dass
der Code mit dem du die Abstände der Punkte berechnest müssen in Methoden passieren...
Am besten im Konsturktor.
Hier kannst du auch gleich deinen Umfang und deinen Inhalt berechnen lassen.
So muss diese Berechnung nicht jedes mal durchgeführt werden sobald du inhalt() oder umfang() aufrufst.

Außerdem sollten deine Membervariablen (p1,p2,p3) auch private sein...sonst brauchst du dafür ja keine Getter bzw. Setter mehr!

Java:
public class Dreieck extends Figur{
    private Punkt p1;
    private Punkt p2;
    private Punkt p3;

    private umfang;
    private inhalt;
    
    public Dreieck (Punkt p1 , Punkt p2 , Punkt p3){
        
        this.p1 = p1;
        this.p2 = p2;
        this.p3 = p3;

        a = p1.abstand(p2);
        b = p1.abstand(p3);
        c = p2.abstand(p3);
    
        s = 0.5 * (a + b + c);

        inhalt = Math.sqrt(s*(s-a)*(s-b)*(s-c));
        umfang = a+b+c;
    }
   
    public void setP1(Punkt p1) {
        this.p1 = p1;
    }
 
    public void setP2(Punkt p2) {
        this.p2 = p2;
    }
 
    public void setP3(Punkt p3) {
        this.p3 = p3;
    }
 
    public Punkt getP1() {
        return p1;
    }
 
    public Punkt getP2() {
        return p2;
    }
 
    public Punkt getP3() {
        return p3;
    }
 
    double getInhalt() {
        return inhalt;
    }
 
    double getUmfang() {
        return umfang;
    }
    
    public String toString(){
        return String.format("%f /n%f", getInhalt(), getUmfang());
    }
}
 

NikeAir22

Mitglied
Leute...vielen Dank für eure Hilfe...mein Code sieht jetzt folgendermaßen aus:

Java:
public class Dreieck extends Figur{
    public Punkt p1;
    public Punkt p2;
    public Punkt p3;
    protected double a;
    protected double b;
    protected double c;
    
    public Dreieck (Punkt p1 , Punkt p2 , Punkt p3){
        
        this.p1 = p1;
        this.p2 = p2;
        this.p3 = p3;
        this.a = p1.abstand(p2);
        this.b = p1.abstand(p3);
        this.c = p2.abstand(p3);
    	        
    }
   
	public void setP1(Punkt p1) {
		this.p1 = p1;
	}

	public void setP2(Punkt p2) {
		this.p2 = p2;
	}

	public void setP3(Punkt p3) {
		this.p3 = p3;
	}

	public Punkt getP1() {
		return p1;
	}


	public Punkt getP2() {
		return p2;
	}


	public Punkt getP3() {
		return p3;
	}

	

	

	
	double inhalt() {
		double inhalt = 0.25 * Math.sqrt((a+b+c)*(a+b-c)*(b+c-a)*(c+a-b));
		
		return inhalt;
	}

	
	double umfang() {
		double umfang = a+b+c;
		
		return umfang;
	}
	
	public String toString(){
		return String.format("%f /n%f", inhalt(), umfang() );
	}
	
   
}


komischerweise, hat Ihnalt() mit der alten Formel nicht funktioniert, also musste ich die andere Form vom Satz des Heron nehmen...jetzt läuft es aber...danke sehr Leute...echt ein tolles Forum ;)
 
S

SlaterB

Gast
man kann mit den set-Methoden die Punkte noch verändern,
aber die Abstände a, b, c werden schon im Konstruktor berechnet und später verwendet,
das passt nicht gut zusammen,

lieber a, b, c erst dann berechnen wenn sie verwendet werden,
in mehreren Methoden mehrfach ist natürlich nicht so schön, falls nicht per Methoden:
double umfang = a()+b()+c(); // drei Methoden die berechnen

weitere Möglichkeiten:
- in inhalt() und umfang() eine Methode berechneAbstände() aufrufen, dann je nur eine Zeile

- oder nach jedem set neuberechnen,

eine Ideallösung gibt es nicht
 
G

Gast2

Gast
Deine Punkte Member sind auch immer noch public. Die gehören alle private gesetzt (wie bereits erwähnt).
 

NikeAir22

Mitglied
Ich habe noch eine kurze Frage....hier erstmal mein geänderter Quellcode für die Klasse "Dreieck":

Java:
public class Dreieck extends Figur{
    private Punkt p1;
    private Punkt p2;
    private Punkt p3;
    protected double a;
    protected double b;
    protected double c;
    
    public Dreieck (Punkt p1 , Punkt p2 , Punkt p3){
        
        this.p1 = p1;
        this.p2 = p2;
        this.p3 = p3;
        this.a = p1.abstand(p2);
        this.b = p1.abstand(p3);
        this.c = p2.abstand(p3);
    	        
    }
    

    

	public void setP1(Punkt p1) {
		this.p1 = p1;
	}

	public void setP2(Punkt p2) {
		this.p2 = p2;
	}

	public void setP3(Punkt p3) {
		this.p3 = p3;
	}

	public Punkt getP1() {
		return p1;
	}


	public Punkt getP2() {
		return p2;
	}


	public Punkt getP3() {
		return p3;
	}

	

	
	

	
	double inhalt() {
		double inhalt = 0.25 * Math.sqrt((a+b+c)*(a+b-c)*(b+c-a)*(c+a-b));
		
		return inhalt;
	}

	
	double umfang() {
		double umfang = a+b+c;
		
		return umfang;
	}
	
    public Object clone() {
    	return new Dreieck (this.p1, this.p2, this.p3);
    	
    }
	
	public String toString(){
		return String.format("%f /n%f", inhalt(), umfang() );
	}
	
   
}
[/Java]


Und hier die Main:

[code=Java]
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Punkt p1 = new Punkt(0.0, 0.0);
		Punkt p2 = new Punkt(3.0, 0.0);
		Punkt p3 = new Punkt(0.0, 4.0);
		Punkt p4 = new Punkt(3.0, 3.2);
		double r = 1.0;

		
		Figur f = new Dreieck(p1, p2, p3);
		
		System.out.printf("%9.5f%n", f.inhalt()); // Erwarteter Wert: 6.00000
		System.out.printf("%9.5f%n", f.umfang()); // Erwarteter Wert: 12.00000
		
		
		f = new Kreis(p4, r);
		System.out.printf("%9.5f%n", f.inhalt()); // Erwarteter Wert: 3.14159
		System.out.printf("%9.5f%n", f.umfang()); // Erwarteter Wert: 6.28319
	
	}

}
[/Java]

Wenn ich für die Punkte p1, p2 und p3 folgendes eingebe,(−2.250, 7.375), (0.500, 0.500) und (3.750,−7.625), bekomme ich diese Ausgabe für das Dreieck:

 0,00000
 32,31099

Wieso ist der Flächeninhalt = 0?? Stimmt etwas an meiner Rechnung nicht? Ich habe, wie vorgeschrieben, den Satz des Heron verwendet. :)
 

NikeAir22

Mitglied
ah okay...das ist einfach nur eine linie...kann ich es irgendwie verhindern, dass mir sowas passiert? also, dass er mir in solchen fällen eine entsprechende meldung ausspuckt? wie ich das bei zwei gleichen punkten mache, ist klar, aber gibt es auch hier eine möglichkeit? :)
 
S

SlaterB

Gast
na, Inhalt nahe 0 ist doch schon ein Kriterium,
wie man sieht/ sich denken kann sind hier auch zwei Seiten fast exakt so lang wie die dritte, das ist noch bisschen schneller zu prüfen,
zwei Punkte dicht zusammen, eine Seitenlänge von 0,0000... wäre noch deutlicher

aber man muss schon Rechnen, irgendwelche Bedingungen aufstellen, aus den Punkten kann man es nicht automatisch erahnen
 

Amstaff51

Mitglied
Kann man das mit einer equals() Methode in der Klasse Dreieck erreichen?

Sowas wie (funktioniert aber nicht)

Java:
    public boolean equals(Object inhalt) {
    	if (inhalt() == 0) {
    		return false;
    	}
    	return true;
    }
 

anti-held

Bekanntes Mitglied
Falls du es allgemein verhindern willst, könntest du eine hasNoSurface Methode implementieren und diese dann in allen setPoint Klassen und dem Konstruktor aufrufen und eine Exception werfen, falls diese true ergibt.

Java:
private boolean hasNoSurface(){
    // Seitenlängen überprüfen
    if(a == 0 || b == 0 || c == 0)
        return true;
    // Inhalt überprüfen
    if(inhalt() == 0)
        return true;
    return false;
}

hier der Konsturktor als Beispiel:

Java:
public Dreieck (Punkt p1 , Punkt p2 , Punkt p3){
        this.p1 = p1;
        this.p2 = p2;
        this.p3 = p3;
        a = p1.abstand(p2);
        b = p1.abstand(p3);
        c = p2.abstand(p3);
        if(hasNoSurface)
            throw new RuntimeException("Das Dreieck hat keinen Flächeninhalt.");
}

Ebenso sollten die beiden Zeilen auch in deinen setPX eingefügt werden.

Java:
public void setP1(Punkt p){
    p1 = p;
    this.a = p1.abstand(p2);
    this.b = p1.abstand(p3);
    if(hasNoSurface)
        throw new RuntimeException("Das Dreieck hat keinen Flächeninhalt.");
}

public void setP2(Punkt p){
    p2 = p;
    a = p1.abstand(p2);
    c = p2.abstand(p3);
    if(hasNoSurface)
        throw new RuntimeException("Das Dreieck hat keinen Flächeninhalt.");
}

public void setP3(Punkt p){
    p3 = p;
    b = p1.abstand(p3);
    c = p2.abstand(p3);
    if(hasNoSurface)
        throw new RuntimeException("Das Dreieck hat keinen Flächeninhalt.");
}

So erhältst du eine Fehlermeldung, falls du ein Dreieck mit keinem Flächeninhalt erstellst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
C Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 10
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
berserkerdq2 Nullpointerexception, obwohl ich Array initialisiere? Java Basics - Anfänger-Themen 1
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
Jose05 Nullpointerexception Java Basics - Anfänger-Themen 7
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
H Java NullPointerException Java Basics - Anfänger-Themen 4
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
L Threads Komischer NullPointerException Java Basics - Anfänger-Themen 2
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
D NullPointerException im Array Java Basics - Anfänger-Themen 4
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
V NullPointerException Java Basics - Anfänger-Themen 2
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
scratchy1 NullPointerException Java Basics - Anfänger-Themen 19
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
W Optional<T> - NullPointerException Java Basics - Anfänger-Themen 37
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
L Variablen NullPointerException bei Dateigröße (Nr.1) Java Basics - Anfänger-Themen 4
M Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 13
D NullPointerException umgehen Java Basics - Anfänger-Themen 17
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
W ArrayList NullPointerException Java Basics - Anfänger-Themen 4
A NullPointerException Java Basics - Anfänger-Themen 6
S NullPointerException Java Basics - Anfänger-Themen 4
T OOP Wörterbuch NullPointerException Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
O NullPointerException Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Feld NullPointerException Java Basics - Anfänger-Themen 4
L Variablen Unerklärliche NullPointerException Java Basics - Anfänger-Themen 2
E Compiler-Fehler nullPointerException in verschachteltem Modell Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Threads NullPointerException Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
kodela NullPointerException Java Basics - Anfänger-Themen 12
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
H NullPointerException obwohl Objekt angelegt wurde Java Basics - Anfänger-Themen 1
A Threads Reentrantlock | NullpointerException möglicher Deadlock? Java Basics - Anfänger-Themen 0
K Compiler-Fehler NullPointerException lösen Java Basics - Anfänger-Themen 16
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
P Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 1
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S Methoden Methode funktioniert nicht | NullPointerException Java Basics - Anfänger-Themen 6
F NullpointerException bei zweidimensionalem Array Java Basics - Anfänger-Themen 2
Z OOP - Array ständig NullPointerException Java Basics - Anfänger-Themen 4
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
T Nullpointerexception und es wird nichts angezeigt Java Basics - Anfänger-Themen 15
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
B ProcessMessage NullPointerException Java Basics - Anfänger-Themen 11
shiroX Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 9
MrSnake ItemListener mit NullPointerException Java Basics - Anfänger-Themen 3
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
M NullPointerException Java Basics - Anfänger-Themen 8
B Vererbung NullPointerException Java Basics - Anfänger-Themen 38
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
G NullPointerException Java Basics - Anfänger-Themen 1
J NullpointerException Java Basics - Anfänger-Themen 1
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
M String-Vergleich und NullPointerException Java Basics - Anfänger-Themen 4
D Java Fehler: NullPointerException Java Basics - Anfänger-Themen 1
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
X Problem mit NullPointerException Java Basics - Anfänger-Themen 2
K NullPointerException in der Hashtable Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Hilfestellung bei einer NullPointerException Java Basics - Anfänger-Themen 1
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
L NullPointerException Java Basics - Anfänger-Themen 11
M Nullpointerexception??? Java Basics - Anfänger-Themen 2
W NullPointerException bei DefaultListModel Java Basics - Anfänger-Themen 5
N NullPointerException bei Konsolenausgabe Java Basics - Anfänger-Themen 5
J Klasse in Klasse; NullPointerException Java Basics - Anfänger-Themen 8
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
Q NullPointerException Java Basics - Anfänger-Themen 5
H NullPointerException Java Basics - Anfänger-Themen 5
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K NullPointerException wird geworfen, bitte um Hilfe! Java Basics - Anfänger-Themen 7
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
J Char-Array - NullPointerException Java Basics - Anfänger-Themen 3
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Array wird nicht übernommen NullPointerException Java Basics - Anfänger-Themen 6
S Datentypen List.toString wirft NullPointerException Java Basics - Anfänger-Themen 5
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
B JRadioButton wechsel gibt NullPointerException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben