[JAVA] Ganz einfaches Programm will nicht immer!

Sherman123

Fleet Admiral
Registriert
Nov. 2002
Beiträge
12.344
Ich will ein Programm schreiben, das mir den Flächeninhalt für ein Rechteck ausgibt. Die Koordinaten der Punkte sind gegeben. Der Einfachheit halber sind die Seiten parallel zur x und y-achse.

Ich habe immer die Koordinaten A(0/0), B(5/0), C(5/3) und D(0/3) genommen. Nun soll das Programm für jedes beliebige Rechteck gelten, das heißt A muss nicht zwingend unten links sein. Somit gibt es 4 verschieden Möglichkeiten.

Leider funktioniert mein Programm nur in Fall 1 und 4. (A = links oben und A = links unten, BCD folgen dann gegen den Uhrzeigersinn)

Code:
import javax.swing.JOptionPane;

public class Flaechenrechner3 {
	public static void main(String args[])
	{
		String koordinate1x, koordinate1y, koordinate2x, koordinate2y, koordinate3x, koordinate3y, koordinate4x, koordinate4y;

		int ax, ay, bx, by, cx, cy, dx, dy;
		double a, b, flaeche;

		koordinate1x=JOptionPane.showInputDialog ("X-Koordinate von Punkt A");
		koordinate1y=JOptionPane.showInputDialog ("Y-Koordinate von Punkt A");
		koordinate2x=JOptionPane.showInputDialog ("X-Koordinate von Punkt B");
		koordinate2y=JOptionPane.showInputDialog ("Y-Koordinate von Punkt B");
		koordinate3x=JOptionPane.showInputDialog ("X-Koordinate von Punkt C");
		koordinate3y=JOptionPane.showInputDialog ("Y-Koordinate von Punkt C");
		koordinate4x=JOptionPane.showInputDialog ("Y-Koordinate von Punkt D");
		koordinate4y=JOptionPane.showInputDialog ("Y-Koordinate von Punkt D");

		ax=Integer.parseInt(koordinate1x);
		ay=Integer.parseInt(koordinate1y);
		bx=Integer.parseInt(koordinate2x);
		by=Integer.parseInt(koordinate2y);
		cx=Integer.parseInt(koordinate3x);
		cy=Integer.parseInt(koordinate3y);
		dx=Integer.parseInt(koordinate4x);
		dy=Integer.parseInt(koordinate4y);



		if (ax < bx && ax == dx){

		a =bx-ax;
		b =cy-by;

		flaeche=a*b;

		JOptionPane.showMessageDialog(null, "Das Rechteck mit den Punkten A: " +ax+"/"+ay+", B: " +bx+"/"+by+", C: " +cx+"/"+cy+" und D: " +dx/dy+ " hat eine Flaeche von " +flaeche+ " m²");

		}



		if (ax == bx && ax > dx){

		a =by-ay;
		b =bx-cx;

		flaeche=a*b;

		JOptionPane.showMessageDialog(null, "Das Rechteck mit den Punkten A: " +ax+"/"+ay+", B: " +bx+"/"+by+", C: " +cx+"/"+cy+" und D: " +dx/dy+ " hat eine Flaeche von " +flaeche+ " m²");

		}


		if (ax > bx && ay == dy){

		a =ax-bx;
		b =by-cy;

		flaeche=a*b;

		JOptionPane.showMessageDialog(null, "Das Rechteck mit den Punkten A: " +ax+"/"+ay+", B: " +bx+"/"+by+", C: " +cx+"/"+cy+" und D: " +dx/dy+ " hat eine Flaeche von " +flaeche+ " m²");

		}


		if (ax == bx && ax < dx){

		a =ay-by;
		b =cx-by;

		flaeche=a*b;

		JOptionPane.showMessageDialog(null, "Das Rechteck mit den Punkten A: " +ax+"/"+ay+", B: " +bx+"/"+by+", C: " +cx+"/"+cy+" und D: " +dx/dy+ " hat eine Flaeche von " +flaeche+ " m²");


		}


		System.exit(0);

	}
}
 
Deine Anwendung funktioniert auch in Fall 2, wenn A rechts oben ist.

Für den Fall, daß A aber links unten ist passiert folgendes:

C D


B A

Deine Abfrage für diesen Fall lautet: if (ax > bx && ay == dy)

Dies gibt aber false, denn richtig müsste es lauten: if (ax > bx && ax == dx)

Dann funktioniert auch dieser Fall.

Eine Anmerkung noch:

Du solltest dir nochmal die Ausgabe der Koordinaten von D angucken. Was hat man in Mathe über die Division durch Null gelernt? Kann ja sein, daß jemand tatsächlich Null als y-Koordinate von D eingibt...
 
Ich glaube du verstehst mich nicht ganz.

A kann einen von vier Werten annehmen (0/0, 5/0, 5/3, 0/3) siehe Bild
BCD folgen dann immer gegen den Uhrzeigersinn.

Leider funktioniert das Programm nur, solange A entweder links oben oder links unten ist.

Meiner Meinung nach stimmen die Logischen Ausdrücke:

Fall #1: A hat 0/0 ---> Ax < Bx && Ax == Dx
Fall #2: A hat 5/0 ---> Ax == Bx && Ax > Dx
Fall #3: A hat 5/3 ---> Ax > Bx && Ax == Dx
Fall #4: A hat 0/3 ---> Ax == Bx && Ax < Dx

Cobinja schrieb:
Was hat man in Mathe über die Division durch Null gelernt? Kann ja sein, daß jemand tatsächlich Null als y-Koordinate von D eingibt...
Welche Division?? Das sind cartesische Koordinaten!!
 
Zuletzt bearbeitet:
Okay, Ich hab falsch gelesen. Ich hatte "im Uhrzeigersinn" gelesen statt "gegen den Uhrzeigersinn".

Nichtsdestotrotz: Wenn du mal deinen geposteten Code anguckst, wirst du feststellen, daß dort folgendes für deinen dritten Fall steht:
if (ax > bx && ay == dy)
Ich habe daraufhin geschrieben, das wäre falsch.
In deinem zweiten Post ist der Vergleich für den dritten Fall ja auch richtig.

Zu der Sache Division durch Null:
" und D: " +dx/dy+ " hat eine Flaeche von "
Für deinen zweiten Fall, A(5/0), also unten rechts, hat D die Koordinaten (0/0).
Du versuchst aber, die Division der beiden Zahlen auszugeben, in diesem Fall also 0/0.

Bei diesen beiden Fällen gibt dein Programm nicht das, was es soll, im ersten Fall schlägt der Vergleich fehl, im zweiten Fall passiert eine
java.lang.ArithmeticException: / by zero
 
Oh verdammt danke. Ich hab irgendwie vergessen, dass der Bruchstrich nicht so geeignet für das darstellen von Cartesischen Koordinaten ist. Ich verwende jetzt A(x|y).

Fall drei habe ich auf: if (ax > bx && ax == dx) ausgebessert.

Danke. Ich hoffe jetzt funktioniert es!:)


EDIT: BOAH den vertikalen Strich mag Java auch nicht. Ich nehme jetzt einfach ein großes "i".:rolleyes:
 
Zuletzt bearbeitet:
Wie wär's damit:
Code:
+dx+"/"+dy+
So hast du's auch bei den anderen Punkten gemacht.
 
Ja bin gerade draufgekommen!

Yeah das scheiß Programm funzt endlich. Jetzt noch ein paar weitere Methoden einfügen und ich bin fertig.


Danke auf jeden Fall.:)
 
Zurück
Oben