27: Dateien 2 – Haus des Nikolaus mit Koordinaten

 

Schreiben Sie ein Programm, welches aus einer Eingabedatei “haus.txt” jeweils zeilenweise die Koordinaten x,y eines Hauspunktes einliest und an diesen Punkten jeweils ein Haus des Nikolaus zeichnet.
Nutzen Sie zum Zeichnen eines Hauses eine Methode “zeichneHaus” und eine Klasse Haus mit einer Methode “zeichne”.

Lösung

Achtung: Diese Aufgabe ist besonders relevant für die Klausur!!!

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Vector;
import unibwm.Grafik;

public class Aufgabe27
{
	public static void main(String[] args)
	{
		// Variablen Deklaration
		String sQuellDateiName;
		Grafik gfkAusgabe;
		File fleDatei;
		Scanner scnEingabe;
		Vector<String> sData;
		Vector<Integer> iPosX;
		Vector<Integer> iPosY;

		// Variablen Initialisierung
		sQuellDateiName = "daten.txt";
		gfkAusgabe = new Grafik();
		fleDatei = new File(sQuellDateiName);
		sData = new Vector<String>();
		iPosX = new Vector<Integer>();
		iPosY = new Vector<Integer>();

		try
		{
			scnEingabe = new Scanner(fleDatei);

			while (scnEingabe.hasNext())
				sData.add(scnEingabe.next());

			for (int i = 0; i < sData.size(); ++ i)
			{
				iPosX.add(Integer.parseInt(sData.elementAt(i).split(",")[0]));
				iPosY.add(Integer.parseInt(sData.elementAt(i).split(",")[1]));
			} // end for

			for (int i = 0; i < iPosX.size(); ++ i)
			{
				Haus NeuesHaus = new Haus(iPosX.elementAt(i), iPosY.elementAt(i));
				NeuesHaus.Zeichnen(gfkAusgabe);
			} // end for
			gfkAusgabe.show("Ausgabe der Häuser");	

		} // end try
		catch (FileNotFoundException e)
		{
			System.out.println("Datei konnte nicht gelesen werden!");
		} // end catch
	} // end main
} // end Aufgabe27

Und die geforderte Klasse für das Haus:

import unibwm.Grafik;

public class Haus
{
	int iStartX, iStartY, iBreite, iHoehe, iDachHoehe;

	public Haus(int iStartX, int iStartY, int iBreite,
			int iHoehe, int iDachHoehe)
	{
		this.iStartX = iStartX;
		this.iStartY = iStartY;
		this.iBreite = iBreite;
		this.iHoehe = iHoehe;
		this.iDachHoehe = iDachHoehe;
	} // end Haus (ausführlicher Konstruktor)

	public Haus(int iStartX, int iStartY)
	{
		this.iStartX = iStartX;
		this.iStartY = iStartY;
		this.iBreite = 20;
		this.iHoehe = 30;
		this.iDachHoehe = 10;
	} // end Haus (nur Position Konstruktor)

	public void Zeichnen(Grafik gfkAusgabe)
	{
		int x1 = iStartX, y1 = iStartY;
		int x2 = iStartX, y2 = iStartY + iHoehe;
		int x3 = iStartX + iBreite, y3 = iStartY + iHoehe;
		int x4 = iStartX + iBreite, y4 = iStartY;
		int x5 = iStartX + iBreite / 2, y5 = iStartY + iHoehe + iDachHoehe;

		gfkAusgabe.addLine(x1, y1, x2, y2);
		gfkAusgabe.addLine(x2, y2, x3, y3);
		gfkAusgabe.addLine(x3, y3, x4, y4);
		gfkAusgabe.addLine(x4, y4, x2, y2);
		gfkAusgabe.addLine(x2, y2, x5, y5);
		gfkAusgabe.addLine(x5, y5, x3, y3);
		gfkAusgabe.addLine(x3, y3, x1, y1);
		gfkAusgabe.addLine(x1, y1, x4, y4);
	} // end Zeichnen
} // end Haus