Fläche von Rechtecken

Status
Nicht offen für weitere Antworten.
S

Sue84

Gast
Hallo!

Folgende Aufgabe hatte ich zu realisieren:

Ein CAD Programm erwartet, dass der Anwender die Koordinaten von zwei Eckpunkten für jedes von mehreren Rechtecken eingibt. Dabei wird vorausgesetzt, das die Seiten der Rechtecke parallel zur X und Y Achse verlaufen. Die Koordinaten eines jeden Eckpunkts werden als Paar von Ganzzahlen eingegeben, zuerst die X-Koordinate und dann die Y-Koordinate. Der Urprung des Koordinatensystems (0,0) ist die linke obere Ecke, so dass Y abwärts zunimmt und X nach rechts zunimmt.

Das Programm berechnet für jedes Rechteck die Höhe, die Breite und die Fläche. Die zwei eingegebenen Eckpunkte müssen sich diagonal gegenüber liegen (links oben und rechts unten, oder rechts oben und links unten), aber welche Wahl für jedes Rechteck getroffen wird, ist Sache des Anwenders. Der Anwender kann die Eckpunkte in beliebiger Reihenfolge eingeben. Höhe und Breite sind immer positive (das Programm wird seine Berechnungen anpassen müssen, damit das wahr ist.)

Das Programm wird sanft beendet, wenn der Anwender Eckpunkte eingibt, die nicht die eines Rechtecks sein können (entweder die Höhe ist 0, die Breite ist 0 oder beide.)

Diese Aufgabe ist eine Übungsaufgabe zu "Überwachungsgesteuerten Schleifen".

Hier mein Programm:

Code:
import java.io.*;
class FlaecheRechtecke
{
	public static void main (String[] args) throws IOException
	{
		BufferedReader stdin =
			new BufferedReader (new InputStreamReader (System.in));
		
		String inputData;
		int x1, y1, x2, y2, breite, hoehe, flaeche = 0;
		
		System.out.println("CAD Programm");
		System.out.println("Erster Eckpunkt X-Koordinate:");
		inputData = stdin.readLine();
		x1 = Integer.parseInt (inputData);
		
		System.out.println("Erster Eckpunkt Y-Koordinate:");
		inputData = stdin.readLine();
		y1 = Integer.parseInt (inputData);
		
		System.out.println("Zweiter Eckpunkt X-Koordinate:");
		inputData = stdin.readLine();
		x2 = Integer.parseInt (inputData);
		
		System.out.println("Zweiter Eckpunkt Y-Koordinate:");
		inputData = stdin.readLine();
		y2 = Integer.parseInt (inputData);
	
		if (x2 > x1)
			breite = x2 - x1;
		else if (x1 > x2)
				breite = x1 - x2;
			 else breite = 0;
		
		if (y2 > y1)
			hoehe = y2 - y1;
		else if (y1 > y2)
				hoehe = y1 - y2;
			 else hoehe = 0;
			 
		while ( hoehe != 0 || breite != 0)
		{
			flaeche = hoehe * breite;
			
			System.out.println("Breite: " + breite + " Hoehe: " + hoehe +
				" Flaeche: " + flaeche);
				
			System.out.println("Erster Eckpunkt X-Koordinate:");
			inputData = stdin.readLine();
			x1 = Integer.parseInt (inputData);
		
			System.out.println("Erster Eckpunkt Y-Koordinate:");
			inputData = stdin.readLine();
			y1 = Integer.parseInt (inputData);
		
			System.out.println("Zweiter Eckpunkt X-Koordinate:");
			inputData = stdin.readLine();
			x2 = Integer.parseInt (inputData);
		
			System.out.println("Zweiter Eckpunkt Y-Koordinate:");
			inputData = stdin.readLine();
			y2 = Integer.parseInt (inputData);
			
			if (x2 > x1)
				breite = x2 - x1;
			else if (x1 > x2)
					breite = x1 - x2;
				 else breite = 0;
		
			if (y2 > y1)
				hoehe = y2 - y1;
			else if (y1 > y2)
					hoehe = y1 - y2;
				 else hoehe = 0;
			 	 
		}
		flaeche = hoehe * breite;
		
		System.out.println("Breite: " + breite + " Hoehe: " + hoehe +
				" Flaeche: " + flaeche);
		System.out.println("Fertig!");
		
	}
					
}

Es läuft so, aber ist das auch guter Programmierstil oder kann man das Programm auch einfacher / besser schreiben?

Über jede Antwort wäre ich sehr dankbar!


MfG Sue
 

Wildcard

Top Contributor
Sue84 hat gesagt.:
Es läuft so, aber ist das auch guter Programmierstil oder kann man das Programm auch einfacher / besser schreiben?
Für diese Frage gibt es eine einfache Merkregel:
Wenn die main-Methode länger als 3 Zeilen ist stellt man sie besser nicht :D
So wie es jetzt ist hat es nichts mit OOP zu tun. Im übrigen gibt es auch eine Rectangle Klasse, die dir das Leben vermutlich erleichtert :wink:
 

mic_checker

Top Contributor
Versuch das ganze halt etwas mehr zu abstrahieren, eine lange main Methode ist wie gesagt ein Zeichen dafür das du nicht objekt orientiert programmiert hast ;)

Schreib dir ne eigene Klasse - du kannst ja auch Rectangle zu hilfe nehmen.
Dann noch extra Eingabe Methoden (einlesen der Koordinaten) etc. pp. Dann musst du in main nicht viel machen als tatsächlich ein Objekt zu erzeugen...

Ausserdem solltest du dran denken NumberFormatException abzufangen (Integer.parseInt(..)).
 

SebiB90

Top Contributor
hast du schonmal was von der do-while schleife gehört?
das verkürzt dein programm sehr
was soll überhaupt die schleifen bedingung sein? ich glaub du musst da != durch == ersetzen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Fläche von Rechtecken Java Basics - Anfänger-Themen 8
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
A Kreisumfang/-Fläche vom Kreis berechnen Java Basics - Anfänger-Themen 39
F JPanel als JPG - weisse Fläche Java Basics - Anfänger-Themen 9
A Intelligente Anordnung von Frames in einer Fläche Java Basics - Anfänger-Themen 4
A Leere Fläche einer Tabelle umfärben Java Basics - Anfänger-Themen 3
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
F MouseOver bei schräg gestellter Fläche Java Basics - Anfänger-Themen 2
J Anwendung zeigte weiße Fläche bis ich kompiliert hatte! Java Basics - Anfänger-Themen 2
H Button auf AWT Fläche pixelgenau positionieren Java Basics - Anfänger-Themen 4
W Problem mit einem Programm Rechteck Fläche, Umfang Java Basics - Anfänger-Themen 6
N Berührung zwischen Rechtecken Java Basics - Anfänger-Themen 5
S Zeichen von abgerundeten Rechtecken auf einem Applet Java Basics - Anfänger-Themen 5
K Schnittfläche von Rechtecken Java Basics - Anfänger-Themen 11
S Rechtecke zu moeglichst groesseren Rechtecken kombinieren? Java Basics - Anfänger-Themen 7
S Intersection von Rechtecken..? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben