<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mathematical Engineering - LRT &#187; Programmieren</title>
	<atom:link href="http://me-lrt.de/kategorie/studium-1/programmieren/feed" rel="self" type="application/rss+xml" />
	<link>http://me-lrt.de</link>
	<description>Lernhilfen für das Studium, Übungsaufgaben mit Musterlösungen, Zusammenfassungen und Skripte, auch für andere technische Studiengänge relevant</description>
	<lastBuildDate>Fri, 27 Jan 2012 09:41:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>27: Dateien 2 &#8211; Haus des Nikolaus mit Koordinaten</title>
		<link>http://me-lrt.de/27-dateien-2-haus-des-nikolaus-mit-koordinaten</link>
		<comments>http://me-lrt.de/27-dateien-2-haus-des-nikolaus-mit-koordinaten#comments</comments>
		<pubDate>Wed, 23 Sep 2009 19:48:22 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=2873</guid>
		<description><![CDATA[Schreiben Sie ein Programm, welches aus einer Eingabedatei &#8220;haus.txt&#8221; 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 &#8220;zeichneHaus&#8221; und eine Klasse Haus mit einer Methode &#8220;zeichne&#8221;. Lösung Achtung: Diese Aufgabe ist besonders relevant für die Klausur!!! Und [...]]]></description>
			<content:encoded><![CDATA[<p>Schreiben Sie ein Programm, welches aus einer Eingabedatei &#8220;haus.txt&#8221; jeweils zeilenweise die Koordinaten x,y eines Hauspunktes einliest und an diesen Punkten jeweils ein Haus des Nikolaus zeichnet.<br />
Nutzen Sie zum Zeichnen eines Hauses eine Methode &#8220;zeichneHaus&#8221; und eine Klasse Haus mit einer Methode &#8220;zeichne&#8221;.</p>
<h2>Lösung</h2>
<p>Achtung: Diese Aufgabe ist besonders relevant für die Klausur!!!</p>
<pre class="brush: java; title: ; notranslate">
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&lt;String&gt; sData;
		Vector&lt;Integer&gt; iPosX;
		Vector&lt;Integer&gt; iPosY;

		// Variablen Initialisierung
		sQuellDateiName = &quot;daten.txt&quot;;
		gfkAusgabe = new Grafik();
		fleDatei = new File(sQuellDateiName);
		sData = new Vector&lt;String&gt;();
		iPosX = new Vector&lt;Integer&gt;();
		iPosY = new Vector&lt;Integer&gt;();

		try
		{
			scnEingabe = new Scanner(fleDatei);

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

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

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

		} // end try
		catch (FileNotFoundException e)
		{
			System.out.println(&quot;Datei konnte nicht gelesen werden!&quot;);
		} // end catch
	} // end main
} // end Aufgabe27
</pre>
<p>Und die geforderte Klasse für das Haus:</p>
<pre class="brush: java; title: ; notranslate">
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
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2F27-dateien-2-haus-des-nikolaus-mit-koordinaten&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/27-dateien-2-haus-des-nikolaus-mit-koordinaten/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>26: Dateien 1 &#8211; Einlesen von Daten</title>
		<link>http://me-lrt.de/26-dateien-1-einlesen-von-daten</link>
		<comments>http://me-lrt.de/26-dateien-1-einlesen-von-daten#comments</comments>
		<pubDate>Wed, 23 Sep 2009 19:43:43 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=2871</guid>
		<description><![CDATA[Gegeben ist eine Datei &#8220;daten.txt&#8221;, welche je Zeile einen ganzzahligen Wert besitzt. Lesen Sie diese Datei ein und protokollieren in der Ausgabedatei &#8220;doppelt.txt&#8221; alle in der gelesenen Datei doppelt vorkommenden Werte. Wie lautet das Programm, wenn Werte auch mehrfach (> 2-fach) in der Eingabedatei vorkommen können, jedoch jeder mehrfach vorkommende Wert nur einmal in der [...]]]></description>
			<content:encoded><![CDATA[<p>Gegeben ist eine Datei &#8220;daten.txt&#8221;, welche je Zeile einen ganzzahligen Wert besitzt. Lesen Sie diese Datei ein und protokollieren in der Ausgabedatei &#8220;doppelt.txt&#8221; alle in der gelesenen Datei doppelt vorkommenden Werte.<br />
Wie lautet das Programm, wenn Werte auch mehrfach (> 2-fach) in der Eingabedatei vorkommen können, jedoch jeder mehrfach vorkommende Wert nur einmal in der Ausgabedatei protokolliert werden soll?</p>
<h2>Lösung</h2>
<pre class="brush: java; title: ; notranslate">
import java.io.*;
import java.util.Scanner;
import java.util.Vector;

public class Aufgabe26
{
	public static void main(String[] args)
	{
		// Variablen Deklaration
		String sQuellDateiName, sZielDateiName;
		File fleDatei;
		Scanner scnEingabe;
		PrintStream pstAusgabe;
		Vector&lt;Integer&gt; iZahlen;
		Vector&lt;Integer&gt; iDoppelt;

		// Variablen Initialisierung
		sQuellDateiName = &quot;daten.txt&quot;;
		sZielDateiName = &quot;doppelt.txt&quot;;
		fleDatei = new File(sQuellDateiName);
		iZahlen = new Vector&lt;Integer&gt;();
		iDoppelt = new Vector&lt;Integer&gt;();

		try
		{
			scnEingabe = new Scanner(fleDatei);

			while (scnEingabe.hasNextInt())
				iZahlen.add(scnEingabe.nextInt());

			for (int i = 0; i &lt; iZahlen.size(); ++ i)
				for (int j = 0; j &lt; i; ++ j)
					if (iZahlen.elementAt(j) == iZahlen.elementAt(i))
					{
						boolean bNeu = true;
						for (int k = 0; k &lt; iDoppelt.size(); ++ k)
							if (iZahlen.elementAt(j) == iDoppelt.elementAt(k))
								bNeu = false;
						if (bNeu)
							iDoppelt.add(iZahlen.elementAt(i));
					} // end if

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

		fleDatei = new File(sZielDateiName);

		try
		{
			pstAusgabe = new PrintStream(fleDatei);
			for (int i = 0; i &lt; iDoppelt.size(); ++ i)
				pstAusgabe.println(iDoppelt.elementAt(i));
		} // end try
		catch (FileNotFoundException e)
		{
			System.out.println(&quot;Datei nicht gefunden&quot;);
		} // end catch
	}
}
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2F26-dateien-1-einlesen-von-daten&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/26-dateien-1-einlesen-von-daten/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>25: Vektoren 3 &#8211; erweitertes Matrix-Programm</title>
		<link>http://me-lrt.de/25-vektoren-3-erweitertes-matrix-programm</link>
		<comments>http://me-lrt.de/25-vektoren-3-erweitertes-matrix-programm#comments</comments>
		<pubDate>Wed, 23 Sep 2009 19:38:25 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=2866</guid>
		<description><![CDATA[Schreiben Sie unter Nutzung von Aufgabe 24 die folgenden Methoden: Division aller Elemente einer Matrix durch das betragsmäßig größte Element Zerlegung einer Matrix A in jeweils 3&#215;3 große Teilmatrizen Länge eines Vektors (als 1-zeilige Matrix): Lösung Und die extended Aufgabe24:]]></description>
			<content:encoded><![CDATA[<p>Schreiben Sie unter Nutzung von Aufgabe 24 die folgenden Methoden:</p>
<ul>
<li>
Division aller Elemente einer Matrix durch das betragsmäßig größte Element
</li>
<li>
Zerlegung einer Matrix A in jeweils 3&#215;3 große Teilmatrizen
</li>
<li>
Länge eines Vektors (als 1-zeilige Matrix):<br />
<img src="http://me-lrt.de/wp-content/ql-cache/quicklatex.com-ae1ba3360f079e538c6299844ff8f846_l3.png" class="ql-img-inline-formula" alt="&#92;&#108;&#101;&#102;&#116;&#124;&#32;&#118;&#32;&#92;&#114;&#105;&#103;&#104;&#116;&#124;&#32;&#61;&#32;&#92;&#115;&#113;&#114;&#116;&#123;&#118;&#95;&#49;&#94;&#50;&#43;&#92;&#108;&#100;&#111;&#116;&#115;&#43;&#118;&#95;&#110;&#94;&#50;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: -6px;"/>
</li>
</ul>
<h2>Lösung</h2>
<pre class="brush: java; title: ; notranslate">

public class Aufgabe25 extends Aufgabe24
{
	public static double[][] MaxQuotient (double[][] dMatrix)
	{
		for (int i = 0; i &lt; dMatrix.length; ++ i)
			for (int j = 0; j &lt; dMatrix[0].length; ++ j)
				dMatrix[i][j] /= MaximalerWert(dMatrix);

		return dMatrix;
	} // end ProduktSkalar

	public static void DreierZerlegung (double[][] dMatrix)
	{
		for (int i = 0; i &lt; dMatrix.length / 3; ++ i)
			for (int j = 0; j &lt; dMatrix[0].length / 3; ++j)
			{
				System.out.println(dMatrix[3 * i][j * 3]
				           + &quot; &quot; + dMatrix[3 * i][j * 3 + 1]
				           + &quot; &quot; + dMatrix[3 * i][j * 3 + 2]);
				System.out.println(dMatrix[3 * i + 1][j * 3]
				       	   + &quot; &quot; + dMatrix[3 * i + 1][j * 3 + 1]
				       	   + &quot; &quot; + dMatrix[3 * i + 1][j * 3 + 2]);
				System.out.println(dMatrix[3 * i + 2][j * 3]
				       	   + &quot; &quot; + dMatrix[3 * i + 2][j * 3 + 1]
				       	   + &quot; &quot; + dMatrix[3 * i + 2][j * 3 + 2]);

				System.out.println(&quot;-----&quot;);
			}

	}

	public static double Betrag (double[] dVektor)
	{
		double dQuadSumme = 0;
		for (int i = 0; i &lt; dVektor.length; ++ i)
			dQuadSumme += dVektor[i] * dVektor[i];
		return Math.sqrt(dQuadSumme);
	}

	public static void main(String[] args)
	{
		double[] dTest1 = {1, 2, 3};
		double[][] dTest3 = {{1, 2, 3}, {2, 3, 4}, {4, 5, 6}};

		double[][] dTest4 = {{1, 2, 3, 4, 5, 6},
							 {2, 3, 4, 3, 2, 1},
							 {4, 6, 8, 6, 4, 2},
							 {3, 5, 9, 7 ,4, 1},
							 {2, 4, 8, 7, 6, 1},
							 {2, 3 ,1, 5, 4, 5}};

		System.out.println(&quot;-----&quot;);
		DreierZerlegung(dTest4);

		System.out.println(MaxQuotient(dTest3)[1][1]);

		System.out.println(Betrag(dTest1));

	}
}
</pre>
<p>Und die extended Aufgabe24:</p>
<pre class="brush: java; title: ; notranslate">

public class Aufgabe24
{
	public static double[][] Summe (double[][] dMatrixA, double[][] dMatrixB)
	{
		double[][] dErgebnis = new double[dMatrixA.length][dMatrixA[0].length];

		for (int i = 0; i &lt; dMatrixA.length; ++ i)
			for (int j = 0; j &lt; dMatrixA[0].length; ++ j)
				dErgebnis[i][j] = dMatrixA[i][j] + dMatrixB[i][j];

		return dErgebnis;
	} // end Summe

	public static double[][] ProduktSkalar (double[][] dMatrix, double dSkalar)
	{
		for (int i = 0; i &lt; dMatrix.length; ++ i)
			for (int j = 0; j &lt; dMatrix[0].length; ++ j)
				dMatrix[i][j] *= dSkalar;

		return dMatrix;
	} // end ProduktSkalar

	public static double MaximalerWert (double[][] dMatrix)
	{
		double dMax = 0;
		for (int i = 0; i &lt; dMatrix.length; ++ i)
			for (int j = 0; j &lt; dMatrix[0].length; ++ j)
				if (dMatrix[i][j] &gt; dMax)
					dMax = dMatrix[i][j];
		return dMax;
	} // end MaximalerWert

	public static double[][] Transponierte (double[][] dMatrix)
	{
		double[][] dErgebnis = new double[dMatrix.length][dMatrix[0].length];
		for (int i = 0; i &lt; dMatrix.length; ++ i)
			for (int j = 0; j &lt; dMatrix[0].length; ++ j)
				dErgebnis[i][j] = dMatrix[j][i];
		return dErgebnis;
	} // end Transponierte

	public static double[][] TeilMatrix (double[][] dMatrix, int[] iBereich)
	{
		double[][] dErgebnis
			= new double[iBereich[2] - iBereich[0] + 1]
			            [iBereich[3] - iBereich[1] + 1];
		for (int i = iBereich[0]; i &lt;= iBereich[2]; ++ i)
			for (int j = iBereich[1]; j &lt;= iBereich[3]; ++ j)
				dErgebnis[i - iBereich[0]][j - iBereich[1]] = dMatrix[i][j];
		return dErgebnis;
	} // end TeilMatrix

	public static void main (String[] args)
	{
		double[][] dTest1 = {{1, 2, 3}, {4, 5, 6}};
		double[][] dTest2 = {{2, 3, 4}, {5, 7, 6}};
		double[][] dTest3 = {{1, 2, 3}, {2, 3, 4}, {4, 5, 6}};
		int[] iBereich = {1, 1, 2, 2};

		System.out.println(Summe(dTest1, dTest2)[1][0]);
		System.out.println(ProduktSkalar(dTest1, 5)[1][0]);
		System.out.println(MaximalerWert(dTest2));
		System.out.println(Transponierte(dTest3)[2][0]);
		System.out.println(TeilMatrix(dTest3, iBereich)[1][0]);
	} // end main
} // end Aufgabe 24
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2F25-vektoren-3-erweitertes-matrix-programm&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/25-vektoren-3-erweitertes-matrix-programm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>24: Vektoren 2 &#8211; Matrizen</title>
		<link>http://me-lrt.de/24-vektoren-2-matrizen</link>
		<comments>http://me-lrt.de/24-vektoren-2-matrizen#comments</comments>
		<pubDate>Wed, 23 Sep 2009 19:31:19 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=2861</guid>
		<description><![CDATA[Schreiben Sie jeweils (static) Methoden zum Bearbeiten von Matrizen und Vektoren. Gehen Sie davon aus, dass die Matrizen nicht notwendigerweise quadratisch sind: Addition zweier Matrizen Multiplikation mit einem Skalar Ermittlung des betragsmäßig größten Elements einer Matrix Transponieren einer Matrix Ermittlung der Teilmatrix von A. Die Teilmatrix besteht aus den Zeilen z1-z2 und den Spalten s1-s2 [...]]]></description>
			<content:encoded><![CDATA[<p>Schreiben Sie jeweils (static) Methoden zum Bearbeiten von Matrizen und Vektoren. Gehen Sie davon aus, dass die Matrizen nicht notwendigerweise quadratisch sind:</p>
<ul>
<li>
Addition zweier Matrizen
</li>
<li>
Multiplikation mit einem Skalar
</li>
<li>
Ermittlung des betragsmäßig größten Elements einer Matrix
</li>
<li>
Transponieren einer Matrix
</li>
<li>
Ermittlung der Teilmatrix von A. Die Teilmatrix besteht aus den Zeilen z1-z2 und den Spalten s1-s2 von A
</li>
</ul>
<h2>Lösung</h2>
<pre class="brush: java; title: ; notranslate">

public class Aufgabe24
{
	public static double[][] Summe (double[][] dMatrixA, double[][] dMatrixB)
	{
		double[][] dErgebnis = new double[dMatrixA.length][dMatrixA[0].length];

		for (int i = 0; i &lt; dMatrixA.length; ++ i)
			for (int j = 0; j &lt; dMatrixA[0].length; ++ j)
				dErgebnis[i][j] = dMatrixA[i][j] + dMatrixB[i][j];

		return dErgebnis;
	} // end Summe

	public static double[][] ProduktSkalar (double[][] dMatrix, double dSkalar)
	{
		for (int i = 0; i &lt; dMatrix.length; ++ i)
			for (int j = 0; j &lt; dMatrix[0].length; ++ j)
				dMatrix[i][j] *= dSkalar;

		return dMatrix;
	} // end ProduktSkalar

	public static double MaximalerWert (double[][] dMatrix)
	{
		double dMax = 0;
		for (int i = 0; i &lt; dMatrix.length; ++ i)
			for (int j = 0; j &lt; dMatrix[0].length; ++ j)
				if (dMatrix[i][j] &gt; dMax)
					dMax = dMatrix[i][j];
		return dMax;
	} // end MaximalerWert

	public static double[][] Transponierte (double[][] dMatrix)
	{
		double[][] dErgebnis = new double[dMatrix.length][dMatrix[0].length];
		for (int i = 0; i &lt; dMatrix.length; ++ i)
			for (int j = 0; j &lt; dMatrix[0].length; ++ j)
				dErgebnis[i][j] = dMatrix[j][i];
		return dErgebnis;
	} // end Transponierte

	public static double[][] TeilMatrix (double[][] dMatrix, int[] iBereich)
	{
		double[][] dErgebnis
			= new double[iBereich[2] - iBereich[0] + 1]
			            [iBereich[3] - iBereich[1] + 1];
		for (int i = iBereich[0]; i &lt;= iBereich[2]; ++ i)
			for (int j = iBereich[1]; j &lt;= iBereich[3]; ++ j)
				dErgebnis[i - iBereich[0]][j - iBereich[1]] = dMatrix[i][j];
		return dErgebnis;
	} // end TeilMatrix

	public static void main (String[] args)
	{
		double[][] dTest1 = {{1, 2, 3}, {4, 5, 6}};
		double[][] dTest2 = {{2, 3, 4}, {5, 7, 6}};
		double[][] dTest3 = {{1, 2, 3}, {2, 3, 4}, {4, 5, 6}};
		int[] iBereich = {1, 1, 2, 2};

		System.out.println(Summe(dTest1, dTest2)[1][0]);
		System.out.println(ProduktSkalar(dTest1, 5)[1][0]);
		System.out.println(MaximalerWert(dTest2));
		System.out.println(Transponierte(dTest3)[2][0]);
		System.out.println(TeilMatrix(dTest3, iBereich)[1][0]);
	} // end main
} // end Aufgabe 24
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2F24-vektoren-2-matrizen&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/24-vektoren-2-matrizen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>23: Vektoren 1 &#8211; Zufallszahlen</title>
		<link>http://me-lrt.de/23-vektoren-1-zufallszahlen</link>
		<comments>http://me-lrt.de/23-vektoren-1-zufallszahlen#comments</comments>
		<pubDate>Wed, 23 Sep 2009 19:25:08 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=2858</guid>
		<description><![CDATA[Erstellen Sie einen Vektor z (Datentyp int) bestehend aus n Zufallszahlen im Intervall [1, 100] Zählen Sie die Häufigkeit des Vorkommens der (ganzen) Zahlen in diesem Intervall, indem Sie einen weiteren Vektor h (mit 100 Elementen) bilden und darin jeweils die Häufigkeit des betreffenden Zahl ablegen. (Beispiel: h[i] = Häufigkeit der Zahl i im Vektor [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>
Erstellen Sie einen Vektor z (Datentyp int) bestehend aus n Zufallszahlen im Intervall [1, 100]
</li>
<li>
Zählen Sie die Häufigkeit des Vorkommens der (ganzen) Zahlen in diesem Intervall, indem Sie einen weiteren Vektor h (mit 100 Elementen) bilden und darin jeweils die Häufigkeit des betreffenden Zahl ablegen. (Beispiel: h[i] = Häufigkeit der Zahl i im Vektor z)
</li>
<li>
Zeichnen Sie eine Grafik für h[i]
</li>
<li>
Berechnen Sie einen neuen Vektor w, indem Sie aus den jeweils benachbarten m Werten aus dem Vektor z den Mittelwert bilden und diesen Mittelwert in w ablegen.
</li>
<li>
Bestimmen Sie auch für den Vektor w die Häufigkeit des Vorkokmmens im Vektor h und zeichnen Sie den Graphen h[i]
</li>
<li>
Wie ändern sich die Graphen in Abhängigkeit von m? Zeichnen Sie dazu mehrere Graphen in ein Grafikfenster
</li>
</ul>
<h2>Lösung</h2>
<p>Zur Lösung dieser Aufgabe wird die Datei <a href="http://lrt.phynet.de/upload/unibwm.jar" target="blank">unibwm.jar</a> benötigt. Sie kann in der Eclipse Umgebung in den Projektoptionen unter &#8220;add external jar&#8221; hinzugefügt werden.</p>
<pre class="brush: java; title: ; notranslate">
import unibwm.*;			// Grafik für die Ausgabe der Diagramme
import java.util.Scanner; 	// Scanner für die Eingabe von n

public class Aufgabe23
{
	static final int iFaktorX = 5;
	static final int iFaktorY = 20;
	static final int iIntervall = 100;

	public static void main(String[] args)
	{
		Scanner scnEingabe = new Scanner(System.in);
		System.out.print(&quot;n eingeben: &quot;);
		int iAnzahlGesamt = scnEingabe.nextInt();
		int iMax = 0;
		int[] iZufall = new int[iAnzahlGesamt];
		int[] iAnzahl = new int[iIntervall + 1];
		Grafik gfkAusgabe = new Grafik();

		for(int i = 0; i &lt; iAnzahlGesamt; ++ i)
		{
			iZufall[i] = (int) (Math.random() * iIntervall + 1);
			//System.out.println(iZufall[i]);
			++ iAnzahl[iZufall[i]];
		}

		for(int i = 1; i &lt;= iIntervall; ++ i)
			if (iAnzahl[i] &gt; iMax)
				iMax = iAnzahl[i];

		ZeichneDiagramm(iAnzahl, gfkAusgabe, 10, 10, iMax, &quot;original&quot;);

		iAnzahl = GemittelterVektor(iAnzahl);
		ZeichneDiagramm(iAnzahl, gfkAusgabe,
				10 , 20 + iMax * iFaktorY, iMax, &quot; 1 x gemittelt&quot;);

		iAnzahl = GemittelterVektor(iAnzahl);
		ZeichneDiagramm(iAnzahl, gfkAusgabe,
			10 + 110 * iFaktorX, 20 + iMax * iFaktorY, iMax, &quot;2 x gemittelt&quot;);

		iAnzahl = GemittelterVektor(iAnzahl);
		iAnzahl = GemittelterVektor(iAnzahl);
		ZeichneDiagramm(iAnzahl, gfkAusgabe,
			10 + 110 * iFaktorX, 10 , iMax, &quot;4 x gemittelt&quot;);

		gfkAusgabe.show(&quot;Ausgabe der Diagramme&quot;);
	}

	public static void ZeichneDiagramm(int[] iAnz, Grafik gfkAusg,
			int iStartX, int iStartY, int iMaximum, String sText)
	{

		// Koordinatenachsen:
		gfkAusg.addLine(iStartX, iStartY, iStartX + 100 * iFaktorX, iStartY);
		gfkAusg.addLine(iStartX, iStartY, iStartX,
				iStartY + iMaximum * iFaktorY);

		// Beschriftung:
		gfkAusg.addText(iStartX + 5, iStartY + 5, sText);

		for(int i = 1; i &lt; iIntervall; ++ i)
			gfkAusg.addLine(i * iFaktorX + iStartX,
					iAnz[i] * iFaktorY + iStartY,
					(i + 1) * iFaktorX + iStartX,
					iAnz[i+1] * iFaktorY + iStartY);
	} // end ZeichneDiagramm

	public static int[] GemittelterVektor(int[] iVektor)
	{
		int[] iErgebnis = new int[iVektor.length];
		iErgebnis[0] = iVektor[0];
		iErgebnis[iVektor.length - 1] = iVektor[iVektor.length - 1];

		for(int i = 1; i &lt; iVektor.length - 1; ++ i)
			iErgebnis[i] = (int) (.5 * (iVektor[i - 1] + iVektor[i + 1]));
		return iErgebnis;
	} // end GemittelterVektor
}
</pre>
<p>Teil b:</p>
<pre class="brush: java; title: ; notranslate">
import unibwm.*;			// Grafik für die Ausgabe der Diagramme

public class Aufgabe23b
{
	static final int iFaktorX = 5;
	static final int iFaktorY = 20;
	static final int iIntervall = 100;
	static final int iDiagramme = 4;
	static final int[] iRadius = {1, 3, 6};

	public static void ZeichneDiagramm(int[] iAnzahl, Grafik gfkAusg,
			int iStartX, int iStartY, int iMaximum, String sText)
	{

		// Koordinatenachsen:
		gfkAusg.addLine(iStartX, iStartY, iStartX + 100 * iFaktorX, iStartY);
		gfkAusg.addLine(iStartX, iStartY, iStartX,
				iStartY + iMaximum * iFaktorY);

		// Beschriftung:
		gfkAusg.addText(iStartX + 5, iStartY + 5, sText);

		for(int i = 0; i &lt; iIntervall - 1; ++ i)
			gfkAusg.addLine(i * iFaktorX + iStartX,
					iAnzahl[i] * iFaktorY + iStartY,
					(i + 1) * iFaktorX + iStartX,
					iAnzahl[i+1] * iFaktorY + iStartY);
	} // end ZeichneDiagramm

	public static int[] GemittelteWerte(int[] iVektor, int iRadius)
	{
		int[] iErgebnis = new int[iVektor.length];

		for (int i = 0; i &lt; iVektor.length; ++ i)
		{
			int iSumme = 0, iSummanden = 0;
			for (int j = i - iRadius; j &lt;= i + iRadius; ++ j)
			{
				if (j &gt;= 0 &amp;&amp; j &lt; iVektor.length)
				{
					iSumme += iVektor[j];
					++ iSummanden;
				} // end if
			} // end for
			iErgebnis[i] = iSumme / iSummanden;
		} // end for
		return iErgebnis;
	} // end GemittelteWerte

	public static void main (String args[])
	{
		// Variablen Deklaration
		int iAnzahlZahlen;
		int iWert[], iAnzahl[];
		int[][] iGemittelterWert;
		int iMax;
		Grafik gfkAusgabe = new Grafik();

		// Variablen Initialisierung
		iAnzahlZahlen = 1000;
		iWert = new int[iAnzahlZahlen];
		iAnzahl = new int[iIntervall];
		iGemittelterWert = new int[iDiagramme-1][iIntervall];
		iMax = 0;

		// Erstellen der Zufallszahlen
		for (int i = 0; i &lt; iAnzahlZahlen; ++ i)
			iWert[i] = (int) (Math.random() * iIntervall);;

		// Initialisieren des Zählvektors
		for (int i = 0; i &lt; iIntervall; ++ i)
			iAnzahl[i] = 0;

		// Zählen der Werte
		for (int i = 0; i &lt; iAnzahlZahlen; ++ i)
			++ iAnzahl[iWert[i]]; 

		// Maximum finden
		for(int i = 0; i &lt; iIntervall; ++ i)
			if (iAnzahl[i] &gt; iMax)
				iMax = iAnzahl[i];

		// original zeichnen
		ZeichneDiagramm(iAnzahl, gfkAusgabe, 10, 10, iMax, &quot;original&quot;);

		// werte mitteln
		iGemittelterWert[0] = GemittelteWerte(iAnzahl, iRadius[0]);

		// neu zeichnen
		ZeichneDiagramm(iGemittelterWert[0], gfkAusgabe,
				10 , 20 + iMax * iFaktorY, iMax,
				&quot; mit Radius &quot; + iRadius[0] + &quot; gemittelt&quot;);

		// werte mitteln
		iGemittelterWert[1] = GemittelteWerte(iAnzahl, iRadius[1]);

		// neu zeichnen
		ZeichneDiagramm(iGemittelterWert[1], gfkAusgabe,
				10 + 110 * iFaktorX, 20 + iMax * iFaktorY, iMax,
				&quot; mit Radius &quot; + iRadius[1] + &quot; gemittelt&quot;);

		// werte mitteln
		iGemittelterWert[2] = GemittelteWerte(iAnzahl, iRadius[2]);

		// neu zeichnen
		ZeichneDiagramm(iGemittelterWert[2], gfkAusgabe,
				10 + 110 * iFaktorX, 10, iMax,
				&quot; mit Radius &quot; + iRadius[2] + &quot; gemittelt&quot;);

		gfkAusgabe.show(&quot;Ausgabe der Diagramme&quot;);
	} // end main
} // end Aufgabe23b
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2F23-vektoren-1-zufallszahlen&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/23-vektoren-1-zufallszahlen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>22: Funktionen 6 &#8211; Grafikobjekte</title>
		<link>http://me-lrt.de/22-funktionen-6-grafikobjekte</link>
		<comments>http://me-lrt.de/22-funktionen-6-grafikobjekte#comments</comments>
		<pubDate>Wed, 23 Sep 2009 19:13:44 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=2854</guid>
		<description><![CDATA[Schreiben Sie eine Methode zur Implementierung der grafischen Grundfigur aus Aufgabe 11 und lösen Sie Aufgabe 11 unter Nutzung dieser Methode. Lösung Zur Lösung dieser Aufgabe wird die Datei unibwm.jar benötigt. Sie kann in der Eclipse Umgebung in den Projektoptionen unter &#8220;add external jar&#8221; hinzugefügt werden.]]></description>
			<content:encoded><![CDATA[<p>Schreiben Sie eine Methode zur Implementierung der grafischen Grundfigur aus Aufgabe 11 und lösen Sie Aufgabe 11 unter Nutzung dieser Methode.</p>
<h2>Lösung</h2>
<p>Zur Lösung dieser Aufgabe wird die Datei <a href="http://lrt.phynet.de/upload/unibwm.jar" target="blank">unibwm.jar</a> benötigt. Sie kann in der Eclipse Umgebung in den Projektoptionen unter &#8220;add external jar&#8221; hinzugefügt werden.</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner; 	// Scanner für die Eingabe von Werten
import unibwm.*;			// Grafik für die Ausgabe der Grafik

public class Aufgabe22
{
	// statische Variable, damit auch die ZeicheFigur-Funktion Zugriff hat:
	static Grafik gfkZeichnung;

	public static void main(String[] args)
	{
		// Variablen Deklaration
		gfkZeichnung = new Grafik();
		Scanner scnEingabe = new Scanner(System.in);
		int iAnzahlHorizontal, iAnzahlVertikal;
			// Abmessungen des Grundobjektes
		double dStartBreite, dStartHoehe;
			// Skalierte Abmessungen des Grundobjektes und aufsummierte Höhe
		double dAktuelleHoehe, dAktuelleBreite, dGesamtHoehe;

		// Variablen Initialisierung
		dGesamtHoehe = 0;
		System.out.print(&quot;Bitte horizontale Anzahl eingeben: &quot;);
		iAnzahlHorizontal = scnEingabe.nextInt();
		System.out.print(&quot;Bitte Startbreite eingeben: &quot;);
		dStartBreite = scnEingabe.nextDouble();
		System.out.print(&quot;Bitte vertikale Anzahl eingeben: &quot;);
		iAnzahlVertikal = scnEingabe.nextInt();
		System.out.print(&quot;Bitte Starthöhe eingeben: &quot;);
		dStartHoehe = scnEingabe.nextDouble();

		dAktuelleHoehe = dStartHoehe;
		dAktuelleBreite = dStartBreite;

		for (int i = 0; i &lt; iAnzahlVertikal; ++ i)
		{ // Äußere Schleife für vertikalen Durchlauf
			if (i &gt; 0) // ab dem zweiten Schritt Änderung der Höhe und Breite
			{
				dGesamtHoehe += dStartHoehe / Math.pow(2, i - 1);
				dAktuelleHoehe /= 2.;
				dAktuelleBreite /= 2.;
			} // end if

			for (int j = 0; j &lt; iAnzahlHorizontal * Math.pow(2, i); ++ j)
			{ // innere Schleife für horizontalen Durchlauf
				double x1, y1, x2, y2;
				x1 = dAktuelleBreite * j;
				x2 = dAktuelleBreite * (j + 1);
				y1 = dGesamtHoehe;
				y2 = dGesamtHoehe + dAktuelleHoehe;

				ZeichneFigur(x1, y1, x2, y2);
			} // end for j
		} // end for i

		gfkZeichnung.show(&quot;Ausgabe zu Aufgabe 11&quot;);
	} // end main

	public static void ZeichneFigur(double dStartX, double dStartY,
			double dEndX, double dEndY)
	{
		gfkZeichnung.addLine(dStartX, dStartY, dStartX, dEndY);
		gfkZeichnung.addLine(dStartX, dEndY, dEndX, dEndY);
		gfkZeichnung.addLine(dEndX, dEndY, dEndX, dStartY);
		gfkZeichnung.addLine(dStartX, dStartY,
				.5 * (dEndX - dStartX) + dStartX, dEndY);
		gfkZeichnung.addLine(.5 * (dEndX - dStartX) + dStartX,
				dEndY, dEndX, dStartY);
	} // end ZeichneFigur
} // end class
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2F22-funktionen-6-grafikobjekte&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/22-funktionen-6-grafikobjekte/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>s11 &#8211; Kommunikation mit dem User (Ein- und Ausgabe)</title>
		<link>http://me-lrt.de/s11-kommunikation-mit-dem-user-ein-und-ausgabe</link>
		<comments>http://me-lrt.de/s11-kommunikation-mit-dem-user-ein-und-ausgabe#comments</comments>
		<pubDate>Fri, 10 Apr 2009 17:04:10 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=1811</guid>
		<description><![CDATA[Ausgabe von Text in der Konsole Bisher können unsere Programme zwar Dinge tun, zum Beispiel aus übergebenen Parametern ein Ergebnis berechnen, aber das Ergebnis wird dem Nutzer des Programmes nicht mitgeteilt. Wir wollen nun eine Funktion einführen, mit der Text in der Konsole ausgegeben werden kann. Die Funktion ist: Natürlich könnte man die print-Funktion selber [...]]]></description>
			<content:encoded><![CDATA[<h2>Ausgabe von Text in der Konsole</h2>
<p>Bisher können unsere Programme zwar Dinge tun, zum Beispiel aus übergebenen Parametern ein Ergebnis berechnen, aber das Ergebnis wird dem Nutzer des Programmes nicht mitgeteilt.<br />
Wir wollen nun eine Funktion einführen, mit der Text in der Konsole ausgegeben werden kann.<br />
Die Funktion ist:</p>
<pre class="brush: java; title: ; notranslate">
print([String]);
</pre>
<p>Natürlich könnte man die print-Funktion selber programmieren, aber es gibt sie auch schon fertig in der Standardbibliothek von Java.<br />
Sie ist eine Funktion des Objektes out, welches wiederum zu der Klasse System gehört.</p>
<p>Um einen Text auszugeben, schreibt man daher in Java:</p>
<pre class="brush: java; title: ; notranslate">
System.out.print(&quot;hallo &quot;);
System.out.print(&quot;welt&quot;);
</pre>
<p>Es erscheint &#8220;hallo welt&#8221; in der Konsole. Hier wird schon ein Problem der print Methode deutlich: Alles wird in die gleiche Zeile geschrieben. Möchte man eine neue Zeile anfangen, muss man daher ein &#8220;\n&#8221; in den String einfügen:</p>
<pre class="brush: java; title: ; notranslate">
System.out.print(&quot;hallo \n welt&quot;);
</pre>
<p>führt zu der Ausgabe<br />
hallo<br />
 welt</p>
<p>Wenn man sich das \n sparen möchte, kann man statt print() die Methode println benutzen. Die beiden folgenden Befehle führen zu der gleichen Ausgabe:</p>
<pre class="brush: java; title: ; notranslate">
print(&quot;asd \n&quot;);

println(&quot;asd &quot;);
</pre>
<p>Mit print und println können auch Inhalte von Variablen ausgegeben werden:</p>
<pre class="brush: java; title: ; notranslate">
int i1 = 5;
String s1 = &quot;asd&quot;;
System.out.print(i1);
System.out.print(s1):
</pre>
<p>Ausgabe: &#8220;5asd&#8221;</p>
<p>Die Kombination von verschiedenen Teilen in der Methode print erfolgt mit +.</p>
<pre class="brush: java; title: ; notranslate">
int i1 = 5;
String s1 = &quot;asd&quot;;
System.out.print(i1+&quot; &quot;+s1);
</pre>
<p>Ausgabe: &#8220;5 asd&#8221;</p>
<p>Dies ist nicht zu verwechseln mit mathematischen Operationen, denn auch diese können innerhalb der print-Methode durchgeführt werden:</p>
<pre class="brush: java; title: ; notranslate">
System.out.print(17+23);
</pre>
<p>führt nicht zur Ausgabe &#8220;17+23&#8243; oder &#8220;1723&#8243;, sondern zu &#8220;40&#8243;.</p>
<p>Beispiel:<br />
Ausgabe der Zahlen von 0 bis 9 in je einer eigenen Zeile</p>
<pre class="brush: java; title: ; notranslate">
for (int i = 0; i &lt; 10; ++ i)
	System.out.println(i);
</pre>
<h2>Eingabe von Text in der Konsole</h2>
<p>Es gibt kaum ein Programm, das mit festen Werten rechnet. Normalerweise werden Werte vom Benutzer entgegengenommen.<br />
In Java kann dies wie folgt umgesetzt werden:</p>
<pre class="brush: java; title: ; notranslate">
System.out.println(&quot;Texteingabe mit Hilfe von System.in&quot;);
String s;
try
{
	BufferedReader brdEingabe
		= new BufferedReader(new InputStreamReader(System.in));
	System.out.print(&quot;Text eingeben: &quot;);
	s = brdEingabe.readLine();
	System.out.println(&quot;Sie haben eingegeben: &quot;+s);
}
catch (IOException e)
{
	System.out.println(&quot;Fehler bei der Ein- oder Ausgabe: &quot;+e);
}
</pre>
<p>Eine andere Möglichkeit ist es, einen sogenannten Scanner zu benutzen, der Tastatureingaben abscannt:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner; 	// Scanner für die Eingabe von Werten

public class ScannerTest
{
	public static void main(String[] args)
	{
		// Variablen Deklaration
		double x1, y1, x2, y2;
		Scanner scnEingabe = new Scanner(System.in);

		// Variablen Initialisierung
		System.out.println(&quot;Bitte Koordinaten von P1(x1, y1) und P2 eingeben&quot;);
		System.out.print(&quot;x1 = &quot;);
		x1 = scnEingabe.nextDouble();
		// Weitere Eingaben und Verarbeitung
	}
}
</pre>
<h2>Ausgabe von Text in eine Textdatei</h2>
<p>Um eine Textdatei zu schreiben, gibt es verschiedene Möglichkeiten. Die gebräuchlichste ist es, einen PrintWriter zu benutzen. Im Konstruktor initialisiert man diesen als FileWriter und übergibt ihm dann die zu speichernden Textzeilen. Bei der close() Anweisung wird die Textdatei gespeichert und geschlossen:</p>
<pre class="brush: java; title: ; notranslate">
System.out.println(&quot;Text in Textdatei schreiben&quot;);
try
{
	PrintWriter pwtAusgabe = new PrintWriter(new FileWriter (&quot;text.txt&quot;), true);
	pwtAusgabe.println(&quot;Erste Zeile&quot;);
	pwtAusgabe.println(&quot;Zweite Zeile und \n Dritte Zeile&quot;);
	pwtAusgabe.close();
}
catch (IOException e)
{
	System.out.println(&quot;Fehler bei der Ein- oder Ausgabe: &quot;+e);
}
</pre>
<p>Die andere Möglichkeit ist es, einen PrintStream zu nutzen:</p>
<pre class="brush: java; title: ; notranslate">
try
{
	File fleDatei;
	String sDateiname = &quot;data.txt&quot;;
	fleDatei = new File(sDateiname);
	PrintStream pstAusgabe = new PrintStream(fleDatei);
	pstAusgabe.println(&quot;asd&quot;);
	pstAusgabe.println(&quot;qwe&quot;);
}
catch (FileNotFoundException e)
{
	System.out.println(&quot;Datei konnte nich geschrieben werden&quot;);
}
</pre>
<h2>Einlesen von Textdateien</h2>
<p>Auch hier seien wieder zwei Alternativen genannt. Die erste Möglichkeit ist ein BufferedReader:</p>
<pre class="brush: java; title: ; notranslate">
System.out.println(&quot;Text aus Textdatei lesen&quot;);
String sZeile;
try
{
	BufferedReader brdEingabe = new BufferedReader(new FileReader(&quot;text.txt&quot;));
	while ((sZeile = brdEingabe.readLine()) != null)
	{
		// sZeile benutzen
		System.out.println(sZeile);
	}
	brdEingabe.close();
}
catch (IOException e)
{
	System.out.println(&quot;Fehler bei der Ein- oder Ausgabe: &quot;+e);
}
</pre>
<p>Die zweite Möglichkeit ein Scanner Objekt (wie schon bei der Eingabe per Tastatur):</p>
<pre class="brush: java; title: ; notranslate">
try
{
	Vector&lt;Integer&gt; iZahlen;
	File fleDatei = new File(&quot;data.txt&quot;);
	Scanner scnEingabe = new Scanner(fleDatei);
	while (scnEingabe.hasNextInt())
		iZahlen.add(scnEingabe.nextInt());
}
catch (IOException e)
{
	System.out.println(&quot;Fehler bei der Ein- oder Ausgabe: &quot;+e);
}
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2Fs11-kommunikation-mit-dem-user-ein-und-ausgabe&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/s11-kommunikation-mit-dem-user-ein-und-ausgabe/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>s10 &#8211; Fehlerbehandlung</title>
		<link>http://me-lrt.de/s10-fehlerbehandlung</link>
		<comments>http://me-lrt.de/s10-fehlerbehandlung#comments</comments>
		<pubDate>Fri, 10 Apr 2009 16:41:12 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=1808</guid>
		<description><![CDATA[In jedem Programm kann es zu Fehlern kommen, selbst wenn der Programmierer alles richtig gemacht hat. Die Fehler können zum Beispiel aus einem falschen Format der Eingabe des Users oder fehlenden Resourcen (Datei nicht vorhanden, lesen am Dateiende, &#8230;) resultieren. Java &#8220;wirft&#8221; diese Fehler dann aus und es bleibt dem Programmierer überlassen, ob er sein [...]]]></description>
			<content:encoded><![CDATA[<p>In jedem Programm kann es zu Fehlern kommen, selbst wenn der Programmierer alles richtig gemacht hat. Die Fehler können zum Beispiel aus einem falschen Format der Eingabe des Users oder fehlenden Resourcen (Datei nicht vorhanden, lesen am Dateiende, &#8230;) resultieren.<br />
Java &#8220;wirft&#8221; diese Fehler dann aus und es bleibt dem Programmierer überlassen, ob er sein Programm darauf vorbereitet hat, mit der Fehlermeldung umzugehen.</p>
<p>Es wird zwischen <strong>zwei Fehlertypen</strong> unterschieden:</p>
<ul>
<li><strong>Exception:</strong> Ausnahme, behebbarer Fehler</li>
<li><strong>Error:</strong> fataler Fehler</li>
</ul>
<p>Beispiel:</p>
<pre class="brush: java; title: ; notranslate">
import java.io.*;

class Fehlerbehandlung
{
	public static void main (String[] args)
	{
		int iZahl = Integer.parseInt(args[0]);
		System.out.println(&quot;Übergebene Zahl: &quot;+iZahl);
	}
}
</pre>
<p>Es können zwei verschiedene Fehler auftreten:</p>
<ul>
<li>Das Programm wurde ohne Parameter aufgerufen, das Array args ist daher leer. Der Zugriff auf das erste (fehlende) Element verursacht einen Speicherfehler, nämlich eine &#8220;ArrayIndexOutOfBoundsException&#8221;</li>
<li>Der erste übergebene Parameter war keine ganze Zahl sondern eine andere Zeichenkette, z.B. &#8220;asd581723&#8243;, daher konnte der Parameter nicht in einen Integer umgewandelt werden und es wird eine &#8220;NumberFormatException&#8221; ausgeworfen
</ul>
<p>Es gibt nun Fehler, um die sich der Programmierer kümmern sollte und solche, bei denen eine Fehlerbehandlung wenig Sinn macht. Beispiele für letztere:</p>
<ul>
<li>&#8220;OutOfMemoryError&#8221; oder &#8220;StackOverflowError&#8221;-Wenn kein Speicher mehr zur Verfügung steht, kann der Programmierer da auch nichts dran ändern</li>
<li>&#8220;InternalError&#8221; oder &#8220;UnknownError&#8221;-solche Fehler sind zu allgemein und können daher zur Laufzeit nicht sinnvoll behandelt werden</li>
</ul>
<p>Beispiele für Fehler, bei denen der Aufwand der Fehlerbehandlung den praktischen Nutzen häufig übersteigt:</p>
<ul>
<li>ArithmeticException, NullPointerException</li>
<li>ArrayIndexOutOfBoundsException, NumberFormatException-Manchmal sollte man auch zu Gunsten der Übersichtlichkeit des Programmtextes darauf vertrauen, dass der Benutzer weiß, wie er mit dem Programm umzugehen hat. Fehler seitens des Users können auch durch eine ausführliche Programmdokumentation verhindert werden.
</li>
</ul>
<h3>Die Standard-Ausnahmebehandlung von Java</h3>
<p>Wenn sich der Programmierer nicht um Fehler kümmert, tut Java das automatisch. Die Fehlerbehandlung beschränkt sich dabei allerdings darauf, dass der Typ des Fehlers und die Stelle im Programmtext, an dem er aufgetreten ist, ausgegeben wird. Nicht abgefangene Fehler werden also mit einem Programmabbruch bestraft.</p>
<p><strong>Fehlerbehandlung für das obige Beispiel:</strong></p>
<pre class="brush: java; title: ; notranslate">
class Fehlerbehandlung
{
	public static void main (String[] args)
	{
		try
		{
			int iZahl = Integer.parseInt(args[0]);
			System.out.println(&quot;Übergebene Zahl: &quot;+iZahl);
		}
		catch(NumberFormatException e)
		{
			System.out.println(&quot;Der Parameter hatte ein ungültiges Format&quot;);
		}
		catch(ArrayIndexOutOfBoundsException e)
		{
			System.out.println(&quot;Es muss ein Parameter übergeben werden&quot;);
		}
	}
}
</pre>
<p>Um manuell einen Fehler abzufangen, schreibt man alle kritische Befehle in einen try-Block<br />
Wenn es in diesem Block dann zu einem Fehler kommt, wird der catch-Block ausgeführt. Try-Blöcke können auch ineinander verschachtelt sein. Wenn auf verschiedene Ausnahmen unterschiedlich reagiert werden soll, können hinter einem try-Block mehrere catch-Blöcke stehen. Wird in dem try-Block dann kein Fehler ausgeworfen, werden alle catch-Blöcke übersprungen. Kommt es zu einem Fehler, wird der erste passende catch-Block aufgerufen, die nachfolgenden werden übersprungen. Wird kein passender Exception-Handler (catch-Block) gefunden, wird geprüft, ob es einen äußeren try-Block gibt, an den der Fehler weitergeleitet werden kann. Gibt es keinen äußeren mehr, wird die Standardfehlerbehandlung von Java verwendet.<br />
Das obige Beispiel könnte wie folgt geschachtelt programmiert werden:</p>
<pre class="brush: java; title: ; notranslate">
class Fehlerbehandlung
{
	public static void main (String[] args)
	{
		try
		{
			try
			{
				int iZahl = Integer.parseInt(args[0]);
				System.out.println(&quot;Übergebene Zahl: &quot;+iZahl);
			{
			catch(NumberFormatException e)
			{
				System.out.println(&quot;Der Parameter hatte ein ungültiges Format&quot;);
			}
		}
		catch(ArrayIndexOutOfBoundsException e)
		{
			System.out.println(&quot;Es muss ein Parameter übergeben werden&quot;);
		}
	}
}
</pre>
<p>Statt einem catch-Block oder hinter dem letzten catch-Block kann noch ein &#8220;finally-Block&#8221; stehen, der auf jeden Fall ausgeführt wird, unabhängig davon ob</p>
<ul>
<li>keine Ausnahme ausgeworfen wird</li>
<li>der try-Block durch ein return verlassen wird</li>
<li>eine Ausnahme ausgeworfen wird, die durch ein catch abgefangen wird</li>
<li>eine Ausnahme ausgeworfen wird, die nicht durch ein catch abgefangen wird</li>
</ul>
<h3>Die throws-Klausel</h3>
<p>Wenn in einer Methode oder Funktion ein Fehler auftreten kann, der nicht durch einen try-catch-Algorithmus abgefangen wird, kann der Fehler auch an die Stelle weitergereicht werden, die die Methode oder Funktion aufgerufen hat. Dazu muss in der Deklaration der Methode hinter der Liste der Parameter noch ein &#8220;throws &#8230;&#8221; stehen, wobei das &#8230; eine Liste von Typen ist, die alle Subtypen von &#8220;throwable&#8221; sind. Beispiel:</p>
<pre class="brush: java; title: ; notranslate">
public int Eingabe(String s) throws IOException
{...}
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2Fs10-fehlerbehandlung&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/s10-fehlerbehandlung/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>s09 &#8211; Klassen und Objekte 2 &#8211; Klassenfunktionen, get/set</title>
		<link>http://me-lrt.de/s09-klassen-und-objekte-2-klassenfunktionen-getset</link>
		<comments>http://me-lrt.de/s09-klassen-und-objekte-2-klassenfunktionen-getset#comments</comments>
		<pubDate>Fri, 10 Apr 2009 16:32:52 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=1805</guid>
		<description><![CDATA[Nehmen wir an, Tante Hilde hat eine Bank ausgeraubt und wählt ihr Auto als Fluchtfahrzeug. Um nicht sofort von der Polizei erwischt zu werden, möchte sie das Fahrzeug natürlich umlackieren. Im Programm können wir die Eigenschaften der Klasse einfach ändern, indem wir einen neuen Wert zuweisen. Die Syntax hierfür ist: Beispiel: In einer Klasse können [...]]]></description>
			<content:encoded><![CDATA[<p>Nehmen wir an, Tante Hilde hat eine Bank ausgeraubt und wählt ihr Auto als Fluchtfahrzeug. Um nicht sofort von der Polizei erwischt zu werden, möchte sie das Fahrzeug natürlich umlackieren.</p>
<p>Im Programm können wir die Eigenschaften der Klasse einfach ändern, indem wir einen neuen Wert zuweisen.<br />
Die Syntax hierfür ist:</p>
<pre class="brush: java; title: ; notranslate">
[Objekt].[Eigenschaft] = [neuer Wert]
</pre>
<p>Beispiel:</p>
<pre class="brush: java; title: ; notranslate">
Auto Auto1 = new Auto(1993, 95000, &quot;CE-FR-395&quot;, &quot;blau&quot;, &quot;Tante Hilde&quot;);

// [...] Bank ausrauben [...]

// Farbe ändern:
Auto1.sFarbe = &quot;rot&quot;;
</pre>
<p>In einer Klasse können nicht nur Eigenschaften und der Konstruktor, sondern auch weitere Funktionen und Methoden definiert werden.<br />
Wir wollen nun, um Tante Hilde zu helfen, eine &#8220;AendereAussehen&#8221; Methode definieren, die sowohl das Nummernschild ändert als auch das Auto neu lackiert.</p>
<p>In Java ist das wie folgt möglich:</p>
<pre class="brush: java; title: ; notranslate">
public class Auto
{
	int iBaujahr;
	int iKilometerstand;
	String sKennzeichen;
	String sFarbe;
	String sBesitzer;
	// weitere Eigenschaften

	// alter Konstruktor:
	public Auto(int iBJ, int iKM, String sKZ, String sFB, String sBes)
	{
		iBaujahr = iBJ;
		iKilometerstand = iKM;
		sKennzeichen = sKZ;
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// neuer, vereinfachter Konstruktor:
	public Auto(String sFB, String sBes)
	{
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// Hilfsmethode zum Ändern des Aussehens des Autos:
	public void AendereAussehen(String &quot;sNeuesKennzeichen&quot;, String &quot;sNeueFarbe)
	{
		sKennzeichen = sNeuesKennzeichen;
		sFarbe = sNeueFarbe;
	}
}
</pre>
<p>Das Programm können wir nun wie folgt schreiben:</p>
<pre class="brush: java; title: ; notranslate">
Auto Auto1 = new Auto(1993, 95000, &quot;CE-FR-395&quot;, &quot;blau&quot;, &quot;Tante Hilde&quot;);

// [...] Bank ausrauben [...]

// Aussehen ändern:
Auto1.AendereAussehen(&quot;HH-FA-231&quot;, &quot;grün&quot;);
</pre>
<p>Funktionen in Klassen, public und private</p>
<p>Wir wollen unsere Klasse &#8220;Auto&#8221; nun an einen anderen Programmierer weitergeben.<br />
Wenn dieser die Klasse einfach benutzt, ohne sie sich vorher genau anzuschauen, kann es sein, dass er Variablen falsche Werte zuweist und so verhindert, dass die Klasse richtig funktioniert.</p>
<p>Zum Beispiel könnte der andere Programmierer denken, man müsse der Variable iBaujahr nicht das Baujahr, sondern das Alter in Jahren zuweisen. Er würde dann schreiben:</p>
<pre class="brush: java; title: ; notranslate">
Auto Auto1 = new Auto(1993, 95000, &quot;CE-FR-395&quot;, &quot;blau&quot;, &quot;Tante Hilde&quot;);
Auto1.iBaujahr = 12;
</pre>
<p>Die Klasse kann diesen Irrtum bisher nicht verhindern, da sie keine Kontrolle darüber hat, was für Werte den Variablen zugewiesen werden.<br />
Um dieses Problem zu lösen, verhindern wir einfach, dass den Klassenvariablen direkt Werte zugewiesen werden können. Wir verändern dazu die Deklaration der Variablen wie folgt:</p>
<pre class="brush: java; title: ; notranslate">
public class Auto
{
	private int iBaujahr;
	private int iKilometerstand;
	private String sKennzeichen;
	private String sFarbe;
	private String sBesitzer;
	// weitere Eigenschaften

	// alter Konstruktor:
	public Auto(int iBJ, int iKM, String sKZ, String sFB, String sBes)
	{
		iBaujahr = iBJ;
		iKilometerstand = iKM;
		sKennzeichen = sKZ;
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// neuer, vereinfachter Konstruktor:
	public Auto(String sFB, String sBes)
	{
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// Hilfsmethode zum Ändern des Aussehens des Autos:
	public void AendereAussehen(String &quot;sNeuesKennzeichen&quot;, String &quot;sNeueFarbe)
	{
		sKennzeichen = sNeuesKennzeichen;
		sFarbe = sNeueFarbe;
	}
}
</pre>
<p>Die Variablen sind nun privat, der Befehl</p>
<pre class="brush: java; title: ; notranslate">
Auto1.iBaujahr = 12;
</pre>
<p>führt also zu einem Fehler. Das Problem ist nur, dass nun von außen zwar kein falscher, aber auch kein richtiger Wert mehr zugewiesen werden kann.<br />
Um die Zuweisung eines &#8220;richtigen&#8221; Wertes wieder zu ermöglichen, brauchen wir nun sogenannte &#8220;setter&#8221;-Methoden.</p>
<p>Die Klasse ändert sich mit diesen Methoden wie folgt:</p>
<pre class="brush: java; title: ; notranslate">
public class Auto
{
	private int iBaujahr;
	private int iKilometerstand;
	private String sKennzeichen;
	private String sFarbe;
	private String sBesitzer;
	// weitere Eigenschaften

	// alter Konstruktor:
	public Auto(int iBJ, int iKM, String sKZ, String sFB, String sBes)
	{
		iBaujahr = iBJ;
		iKilometerstand = iKM;
		sKennzeichen = sKZ;
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// neuer, vereinfachter Konstruktor:
	public Auto(String sFB, String sBes)
	{
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// Hilfsmethode zum Ändern des Aussehens des Autos:
	public void AendereAussehen(String &quot;sNeuesKennzeichen&quot;, String &quot;sNeueFarbe)
	{
		sKennzeichen = sNeuesKennzeichen;
		sFarbe = sNeueFarbe;
	}

	public void SetBaujahr(int iBJ)
	{
		iBaujahr = iBJ;
	}

	public void SetKilometerstand(int iKM)
	{
		iKilometerstand = iKM;
	}
	// [...] weitere setter-Methoden [...]
}
</pre>
<p>Um nun das Baujahr des Autos zu ändern, kann man im Programm wie folgt verfahren:</p>
<pre class="brush: java; title: ; notranslate">
Auto1.SetBaujahr(1993);
</pre>
<p>Es stellt sich natürlich die Frage, ob man nicht nun einfach dieser Methode &#8220;SetBaujahr&#8221; genauso den Falschen Wert übergeben könnte wie bei der direkten Zuweisung, denn dann hätte die Methode ja keinen Vorteil.<br />
Dies ist zwar richtig, aber im Gegensatz zu der Wertzuweisung hat die Klasse bei der Zuweisung über die setter-Funktion eine Möglichkeit zur Kontrolle des übergebenen Wertes. Wir können die Methode &#8220;SetBaujahr&#8221; wie folgt anpassen:</p>
<pre class="brush: java; title: ; notranslate">
	public void SetBaujahr(int iBJ)
	{
		if(iBJ &gt; 1800)
			iBaujahr = iBJ;
		else
			iBaujahr = 2009-iBJ;
	}
</pre>
<p>Es ist unwahrscheinlich, dass das Auto vor 1800 gebaut wurde. Wenn also ein Wert übergeben wird, der kleiner ist als 1800, dann wird automatisch der Wert 2009 (aktuelles Jahr)-iBJ zugewiesen. Der andere Programmierer merkt also nicht einmal etwas von seinem Fehler, weil das Programm ihn automatisch berichtigt.</p>
<p>Nun können wir den Variablen des Objektes Auto1 Werte zuweisen. Da die Variablen aber privat sind, können wir danach nicht mehr auf die Variablen zugreifen, wir wissen also nicht mehr, was in den Variablen gespeichert ist.<br />
Zu diesem Zweck brauchen wir &#8220;getter&#8221;-Funktionen. Dies sind Funktionen ohne übergebene Parameter, die den aktuellen Wert der Variable zurückgeben.</p>
<p>In die Klasse eingebaut:</p>
<pre class="brush: java; title: ; notranslate">
public class Auto
{
	private int iBaujahr;
	private int iKilometerstand;
	private String sKennzeichen;
	private String sFarbe;
	private String sBesitzer;
	// weitere Eigenschaften

	// alter Konstruktor:
	public Auto(int iBJ, int iKM, String sKZ, String sFB, String sBes)
	{
		iBaujahr = iBJ;
		iKilometerstand = iKM;
		sKennzeichen = sKZ;
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// neuer, vereinfachter Konstruktor:
	public Auto(String sFB, String sBes)
	{
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// Hilfsmethode zum Ändern des Aussehens des Autos:
	public void AendereAussehen(String &quot;sNeuesKennzeichen&quot;, String &quot;sNeueFarbe)
	{
		sKennzeichen = sNeuesKennzeichen;
		sFarbe = sNeueFarbe;
	}

	public void SetBaujahr(int iBJ)
	{
		if(iBJ &gt; 1800)
			iBaujahr = iBJ;
		else
			iBaujahr = 2009-iBJ;
	}

	public void SetKilometerstand(int iKM)
	{
		iKilometerstand = iKM;
	}
	// [...] weitere setter-Methoden [...]

	public int GetBaujahr()
	{
		return iBaujahr;
	}

	public int GetKilometerstand()
	{
		return iKilometerstand;
	}
	//
}
</pre>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2Fs09-klassen-und-objekte-2-klassenfunktionen-getset&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/s09-klassen-und-objekte-2-klassenfunktionen-getset/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>s08 &#8211; Klassen und Objekte 1 &#8211; Grundlagen und Konstruktoren</title>
		<link>http://me-lrt.de/s08-klassen-und-objekte-1-grundlagen-und-konstruktoren</link>
		<comments>http://me-lrt.de/s08-klassen-und-objekte-1-grundlagen-und-konstruktoren#comments</comments>
		<pubDate>Fri, 10 Apr 2009 10:09:16 +0000</pubDate>
		<dc:creator>admin2</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://me-lrt.de/?p=1802</guid>
		<description><![CDATA[Eine Klasse in Java ist ein Schema oder eine Verallgemeinerung für eine Gruppe von Dingen. Eine derartige Gruppe könnte zum Beispiel die Menge aller Autos sein. Alle Autos haben Gemeinsamkeiten, wie etwa die Fähigkeit zu Fahren. Andere Eigenschaften sind zwar auch bei allen Autos vorhanden, allerdings in unterschiedlichen Ausprägungen, zum Beispiel das Kennzeichen, das Baujahr [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Klasse in Java ist ein Schema oder eine Verallgemeinerung für eine Gruppe von Dingen.<br />
Eine derartige Gruppe könnte zum Beispiel die Menge aller Autos sein.</p>
<p>Alle Autos haben Gemeinsamkeiten, wie etwa die Fähigkeit zu Fahren.<br />
Andere Eigenschaften sind zwar auch bei allen Autos vorhanden, allerdings in unterschiedlichen Ausprägungen, zum Beispiel das Kennzeichen, das Baujahr oder den Kilometerstand.</p>
<p>In Java können Klassen wie folgt definiert werden:</p>
<pre class="brush: java; title: ; notranslate">
public class Auto
{
	int iBaujahr;
	int iKilometerstand;
	String Kennzeichen;
	String Farbe;
	String Besitzer;
	// Weitere Eigenschaften
}
</pre>
<p>Eine Klasse wie &#8220;Auto&#8221; hat natürlich sehr sehr viele Eigenschaften. Daher muss man sich für ein Programm überlegen, welche Eigenschaften wichtig (relevant) sind. Nur diese sollten in der Klassendefinition aufgeführt werden.</p>
<p>Wir wollen nun eine spezielle Ausprägung der Klasse &#8220;Auto&#8221; betrachten, nämlich den alten blauen Opel Agila von Tante Hilde. Wir wollen dieses spezielle Auto &#8220;Auto1&#8243; nennen.<br />
In Java deklarieren wir das Auto1 wie folgt:</p>
<pre class="brush: java; title: ; notranslate">
Auto Auto1;
</pre>
<p>Dies geschieht ganz analog zu der Deklaration einer normalen Variable. Für den Datentyp schreiben wir hier &#8220;Auto&#8221;, für den Namen &#8220;Auto1&#8243;.<br />
Genau wie eine Variable eines Grunddatentypes muss auch das Auto vor der Nutzung noch initialisiert werden.<br />
Bei einer ganzzahligen Variable geschah das mit einer einfachen Wertzuweisung:</p>
<pre class="brush: java; title: ; notranslate">
// Deklaration:
int i1;

// Definition:
i1 = 5;
</pre>
<p>Beim Auto ist das nicht so einfach. Wir können einem Auto nicht einfach den Wert 5 zuweisen. Wofür sollte dieser auch stehen?<br />
Um dieses Problem zu lösen, braucht die Klasse Auto eine spezielle Methode, nämlich den Konstruktor.<br />
Diese Methode &#8220;konstruiert&#8221; das Auto mit den als Argumenten übergebenen Angaben.</p>
<p>Die Klasse muss wie folgt erweitert werden:</p>
<pre class="brush: java; title: ; notranslate">
public class Auto
{
	int iBaujahr;
	int iKilometerstand;
	String sKennzeichen;
	String sFarbe;
	String sBesitzer;
	// weitere Eigenschaften

	// Konstruktor:
	public Auto(int iBJ, int iKM, String sKZ, String sFB, String sBes)
	{
		iBaujahr = iBJ;
		iKilometerstand = iKM;
		sKennzeichen = sKZ;
		sFarbe = sFB;
		sBesitzer = sBes;
	}
}
</pre>
<p>Das Auto von Tante Hilde hat festgelegte Eigenschaften. Diese möchten wir gleich bei der Initialisierung des Objektes &#8220;Auto1&#8243; übergeben werden.</p>
<p>Der Konstruktor wird mit &#8220;new&#8221; aufgerufen. Wir schreiben also:</p>
<pre class="brush: java; title: ; notranslate">
// Deklaration
Auto Auto1;

// Initialisierung
Auto1 = new Auto(1993, 95000, &quot;CE-FR-395&quot;, &quot;blau&quot;, &quot;Tante Hilde&quot;);
</pre>
<p>Analog zu den Variablen können auch Objekte einer Klasse in einem Schritt deklariert und initialisiert werden:</p>
<pre class="brush: java; title: ; notranslate">
Auto Auto1 = new Auto(1993, 95000, &quot;CE-FR-395&quot;, &quot;blau&quot;, &quot;Tante Hilde&quot;);
</pre>
<p>Wenn wir von Tante Hildes Auto1 sprechen, wissen wir aber vielleicht gar nicht, wie viele Kilometer es schon gefahren ist oder wie genau das Kennzeichen lautet.<br />
Wir möchten dann bei der Initialisierung zum Beispiel nur den Besitzer und die Farbe zuweisen.<br />
Unser Konstruktor unterstützt dieses Vorhaben nicht, denn einer Funktion oder Methode kann man nicht einfach weniger Parameter übergeben, als in der Methodendefinition gefordert werden.</p>
<p>Die Lösung ist ein zweiter Konstruktor. Wir erweitern die Klasse Auto wie folgt:</p>
<pre class="brush: java; title: ; notranslate">
public class Auto
{
	int iBaujahr;
	int iKilometerstand;
	String sKennzeichen;
	String sFarbe;
	String sBesitzer;
	// weitere Eigenschaften

	// alter Konstruktor:
	public Auto(int iBJ, int iKM, String sKZ, String sFB, String sBes)
	{
		iBaujahr = iBJ;
		iKilometerstand = iKM;
		sKennzeichen = sKZ;
		sFarbe = sFB;
		sBesitzer = sBes;
	}

	// neuer, vereinfachter Konstruktor:
	public Auto(String sFB, String sBes)
	{
		sFarbe = sFB;
		sBesitzer = sBes;
	}
}
</pre>
<p>Nun können wir ein &#8220;einfachereres&#8221; Auto definieren:</p>
<pre class="brush: java; title: ; notranslate">
Auto Auto1 = new Auto(&quot;blau&quot;, &quot;Tante Hilde&quot;);
</pre>
<p>Anhand der Anzahl der Argumente und deren Typ wählt die Klasse automatisch den richtigen Konstruktor aus. Es können beliebig viele verschiedene Konstruktoren in der Klasse definiert werden.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fme-lrt.de%2Fs08-klassen-und-objekte-1-grundlagen-und-konstruktoren&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://me-lrt.de/s08-klassen-und-objekte-1-grundlagen-und-konstruktoren/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

