<?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>Das JAVA-Hilfe Blog</title>
	<atom:link href="http://www.professional-webworkx.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.professional-webworkx.de</link>
	<description>JAVA programmieren. Lernen. Helfen. Anleiten. Erklären</description>
	<lastBuildDate>Sun, 06 May 2012 16:19:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Könnten Sie eine Ausnahme machen?</title>
		<link>http://www.professional-webworkx.de/konnten-sie-eine-ausnahme-machen/</link>
		<comments>http://www.professional-webworkx.de/konnten-sie-eine-ausnahme-machen/#comments</comments>
		<pubDate>Sun, 06 May 2012 16:17:26 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[Objektorientierte Programmierung]]></category>
		<category><![CDATA[Exception]]></category>
		<category><![CDATA[Exceptionhandling]]></category>
		<category><![CDATA[Fehlerbehandlung]]></category>
		<category><![CDATA[try-catch-finally]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=136</guid>
		<description><![CDATA[Vielleicht könnte ich ja doch ausnahmsweise statt der geforderten Integer-Zahl eine Fließkommazahl an das System übergeben? Oder statt einem Objekt vom Typ Person gebe ich meiner Methode, die den Namen und das Alter des Person-Objekts zurück liefern soll, ein Objekt &#8230; <a href="http://www.professional-webworkx.de/konnten-sie-eine-ausnahme-machen/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vielleicht könnte ich ja doch ausnahmsweise statt der geforderten Integer-Zahl eine Fließkommazahl an das System übergeben? Oder statt einem Objekt vom Typ Person gebe ich meiner Methode, die den Namen und das Alter des Person-Objekts zurück liefern soll, ein Objekt vom Typ &#8220;Auto&#8221;. Ausnahmsweise?!</p>
<p>Es gibt immer mal wieder Stellen, an denen es passieren kann, das Ausnahmen, unvorhergesehene Ereignisse also, eintreten können. Und die sollte behandelt werden, wenigstens insofern, das eine Meldung generiert wird, die den Nutzer darüber informiert, das etwas schief gelaufen ist.</p>
<p>Grundsätzlich lässt sich aber sagen, das ist meine persönliche Empfindung, das Fehler, also Error im Programmablauf nicht behandelt werden sollten, da sie den Programmablauf derart stören und negativ beeinflussen, das die JVM die Ausführung des Programm abbricht und mit der Ausgabe des StackTrace reagiert.</p>
<p>Treten dahin gegen Exceptions auf, also ein Programm erwartet Integer-Werte und der Benutzer tippt aber Fließkomma-Zahlen ein, dann kann man eine Abfolge erstellen, wie darauf reagiert werden soll, diese verhält sich nach dem Prinzip<br />
<strong>try-catch-finally</strong>.</p>
<pre class="wp-code-highlight prettyprint">

// ...

try
{
    System.out.println(&quot;Zahl eingeben: &quot;);
    int i = Integer.parseInt(br.readLine());
}
catch(IOException ioEx)
{
    System.out.println(&quot;Es ist ein I/O-Fehler aufgetreten!&quot;);
}
catch(NumberFormatException nfEx)
{
    System.out.println(&quot;Fehlerhafte Eingabe! Nur Ganzzahl-Werte eingeben!&quot;);
    try
    {
           System.out.println(&quot;Zahl eingeben: &quot;);
           int i = Integer.parseInt(br.readLine());
    }
    catch(NumberFormatException nfEx2)
    {
           System.out.println(&quot;2x der gleiche Fehler! Programm wird beendet!&quot;);
           System.exit(0);
    }
}
finally
{
    System.out.println(&quot;Bitte den finally-Block nicht vergessen!&quot;);
}
</pre>
<p>Im obigen Beispiel wird eine ganze Zahl vom Benutzer erwartet, stimmt bei der Eingabe etwas nicht, kann entweder eine IOException geworfen (thrown) werden oder eine NumberFormatException, die hier exemplarisch behandelt wird, indem darauf hingewiesen wird, das nur ganze Zahlen verarbeitet werden können. Anschließend darf der Benutzer erneut eine Eingabe machen, schlägt diese wieder fehlt beendet sich das Programm mit System.exit(0); </p>
<p>Am Ende fällt noch der finally Block ins Auge, dieser spielt in diesem Beispiel noch keine Rolle, doch sollte man sich z.B. mit Netzwerkprogrammierung o.ä. Dingen beschäftigen, dann spielt er eine entscheidende Rolle, denn tritt eine Verbindungsexception auf, dann wird diese behandelt und kann vorzeitig zum Abbruch oder Verlassen des try-catch Blockes führen und das Programm beenden, doch die Verbindung zur Datenbank oder zum Server wäre nach wie vor geöffnet, um das zu vermeiden, schließt man die Verbindung innerhalb des finally Blocks, denn der wird immer ausgeführt, egal wie oder wo die Fehlerbehandlung beendet oder verlassen wird.</p>
<p>Somit haben wir ein Grundtemplate zur Fehlerbehandlung erstellt und es kann mit eigenen Versuchen mit Leben gefüllt werden.</p>
<p>Viel Spaß und einen schönen Sonntag!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/konnten-sie-eine-ausnahme-machen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scanner Eingabe-Fehler behandeln</title>
		<link>http://www.professional-webworkx.de/scanner-eingabe-fehler-behandeln/</link>
		<comments>http://www.professional-webworkx.de/scanner-eingabe-fehler-behandeln/#comments</comments>
		<pubDate>Fri, 04 May 2012 20:52:45 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[Objektorientierte Programmierung]]></category>
		<category><![CDATA[Exception]]></category>
		<category><![CDATA[Exceptionhandling]]></category>
		<category><![CDATA[Fehler abfangen]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=133</guid>
		<description><![CDATA[Wer kennt es nicht, man holt sich eine Instanz des Scanners um Daten über die Konsole vom User anzufordern, doch es kann immer mal passieren, dass die Eingaben nicht dem entsprechen, was man als Entwickler bzw. als Stück Code erwartet. &#8230; <a href="http://www.professional-webworkx.de/scanner-eingabe-fehler-behandeln/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Wer kennt es nicht, man holt sich eine Instanz des Scanners um Daten über die Konsole vom User anzufordern, doch es kann immer mal passieren, dass die Eingaben nicht dem entsprechen, was man als Entwickler bzw. als Stück Code erwartet.</p>
<p>Was passiert? Klar, das Programm wird beendet, mit jeder Menge Text auf der Konsole. Für den User / Kunden äußerst nervig.</p>
<p>Was könnten wir dagegen tun?<br />
Den Fehler behandeln. Das klappt recht leicht und ist einfach zu implementieren.</p>
<p>Bleiben wir beim Scanner, dieser könnte uns eine InputMismatchException werfen, behandelt wird das Ganze so:</p>
<pre class="wp-code-highlight prettyprint">
import java.util.*;

public class ScannerException
{
  public static void main(String[] args)
  {
     Scanner sc = new Scanner();
     try
     {
       double zahl = Doubler.parsDouble(sc.nextDouble());
     }
     catch(InputMismatchException imEx)
     {
       System.out.println(imEx.getMessage());
     }
  }
}
</pre>
<p>Somit sei gezeigt, wie der Fehler erst einmal gefangen und behandelt werden kann. Diese Lösung zeigt erst einmal das Grundprinzip, welches natürlich noch ausbaufähig ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/scanner-eingabe-fehler-behandeln/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>einfache lineare Liste in Java</title>
		<link>http://www.professional-webworkx.de/einfache-lineare-liste-in-java/</link>
		<comments>http://www.professional-webworkx.de/einfache-lineare-liste-in-java/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 10:36:00 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[Objektorientierte Programmierung]]></category>
		<category><![CDATA[FIFO]]></category>
		<category><![CDATA[lineare Liste]]></category>
		<category><![CDATA[Stack]]></category>
		<category><![CDATA[Stapel]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=131</guid>
		<description><![CDATA[Eine Liste, die nach dem LIFO Prinzip (Last In &#8211; First Out) funktioniert implementiert in Java: package linearLists; public class linearList { class Node { Object element; Node next; public Node() { element = null; next = null; } public &#8230; <a href="http://www.professional-webworkx.de/einfache-lineare-liste-in-java/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Eine Liste, die nach dem LIFO Prinzip (Last In &#8211; First Out) funktioniert implementiert in Java:</p>
<pre class="wp-code-highlight prettyprint">
package linearLists;

public class linearList {

	class Node {

		Object element;
		Node next;

		public Node() {
			element = null;
			next 	= null;
		}
		public Node(Object o, Node n){
			element = o;
			next	= n;
		}
		public Object getElement(){
			return element;
		}
		public void setElement(Object o){
			element = o;
		}
		public void setNext(Node n){
			next = n;
		}
		public Node getNext(){
			return next;
		}
	}

	private Node head;

	public linearList(){
		head = new Node();
	}

	public void addElement(Object o, Node n){
		Node p = new Node(o, n);
		p.setNext(head.getNext());
		head.setNext(p);
	}
	public void addFirst(Object o){
		Node p = new Node();
		p = head;
		while(p.getNext() != null)
			p = p.getNext();
		addElement(o, p);
	}
	public String toString(){
		String rc = &quot;&quot;;
		Node p = head;
		while(p.getNext() != null){
			rc += &quot;Object = &quot; + p.getElement() + &quot; next Node = &quot; + p.getNext().getElement() + &quot;\n&quot;;
			p = p.getNext();
		}
		return rc;
	}

	public static final void main(String[] args){

		linearList ll = new linearList();
		ll.addFirst(&quot;Ich bin das erste Element&quot;);
		ll.addFirst(&quot;Ich bin das zweite Element&quot;);
		ll.addFirst(&quot;Ich bin das dritte Element&quot;);
		ll.addFirst(4711);

		System.out.println(ll);
	}
}
</pre>
<p>Viel Spaß damit.<br />
Kritik oder Verbesserungsvorschläge sehr gern per Kommentar oder Mail.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/einfache-lineare-liste-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The towers of hanoi &#8211; recursive solution in Java</title>
		<link>http://www.professional-webworkx.de/the-towers-of-hanoi-recursive-solution-in-java/</link>
		<comments>http://www.professional-webworkx.de/the-towers-of-hanoi-recursive-solution-in-java/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 09:47:44 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[prozedurale Programmierung]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Rekursion]]></category>
		<category><![CDATA[towers of hanoi]]></category>
		<category><![CDATA[Türme von Hanoi]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=128</guid>
		<description><![CDATA[The problem of the towers of hanoi solved in Java. Try it with 128 or 256 slices, your computer will work for a long time&#8230; package TürmeVonHanoi; public class ToH { static int counter = 0; public static void move(int &#8230; <a href="http://www.professional-webworkx.de/the-towers-of-hanoi-recursive-solution-in-java/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The problem of the towers of hanoi solved in Java.<br />
Try it with 128 or 256 slices, your computer will work for a long time&#8230;</p>
<pre class="wp-code-highlight prettyprint">
package TürmeVonHanoi;

public class ToH {

	static int counter = 0;
	public static void move(int n, String a, String b, String c){

		if ( n == 1){
			System.out.println(&quot;moved slice &quot; + n + &quot; from &quot; + a + &quot; to &quot; + c);
		}
		else
		{
			move(n-1, a, c, b);
			System.out.println(&quot;moved slice &quot; + n + &quot; from &quot; + a + &quot; to &quot; + c);
			move(n-1, b, c, a);
			++counter;
		}
	}

	public static final void main(String[] args){

		int slices = 128;
		String a = &quot;Source&quot;, b = &quot;Help&quot;, c = &quot;Target&quot;;
		move(slices, a, b, c);
		System.out.println(&quot;After &quot; + counter + &quot; movements all slices are moved from &quot; + a + &quot; to &quot; + c);
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/the-towers-of-hanoi-recursive-solution-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Türme von Hanoi</title>
		<link>http://www.professional-webworkx.de/die-turme-von-hanoi/</link>
		<comments>http://www.professional-webworkx.de/die-turme-von-hanoi/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 09:39:34 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[prozedurale Programmierung]]></category>
		<category><![CDATA[Rekursion]]></category>
		<category><![CDATA[Türme]]></category>
		<category><![CDATA[Türme von Hanoi]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=125</guid>
		<description><![CDATA[Ein immer wieder auftretendes Problem, das in Java mittels eines rekursiven Methodenaufrufs wie folgt gelöst werden kann: package TürmeVonHanoi; public class TürmeVonHanoi { static long zähler = 0; public static void move(int n, String a, String b, String c){ if(n &#8230; <a href="http://www.professional-webworkx.de/die-turme-von-hanoi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ein immer wieder auftretendes Problem, das in Java mittels eines rekursiven Methodenaufrufs wie folgt gelöst werden kann:</p>
<pre class="wp-code-highlight prettyprint">
package TürmeVonHanoi;

public class TürmeVonHanoi {

	static long zähler = 0;
	public static void move(int n, String a, String b, String c){

		if(n == 1){

			System.out.println(&quot;moved Part &quot; + n + &quot; from &quot; + a + &quot; to &quot; + c);
		}
		else
		{
			move(n-1, a, c, b);
			System.out.println(&quot;moved Part &quot; + n + &quot; from &quot; + a + &quot; to &quot; + c);
			move(n-1, b, a, c);
			++zähler;
		}

	}
	public static final void main(String[] args){

		int n = 7;
		String a = &quot;Quelle&quot;, b = &quot;Hilfsstab&quot;, c = &quot;Ziel&quot;;
		move(n, a, b, c);

		System.out.println(zähler);
	}
}
</pre>
<p>Die vereinbarte Variable n in der Main-Methode gibt an, wie viele Scheiben zu Beginn auf dem ersten Stab liegen und im Laufe des Programms auf den Stab c verschoben werden müssen.<br />
Ziel ist es, dass immer nur 1 Scheibe verschoben wird, niemals eine größere auf einer kleineren Scheibe liegen darf und am Ende der gesamte Turm, in der richtigen Reihenfolge, auf dem Stab c (Ziel) liegt. Der Stab b darf als Hilfe zum Ablegen von Scheiben genutzt werden. Zu jedem Zeitpunkt darf auf jedem Stab ein Turm aus Scheiben liegen, wichtig ist nur, das die oben genannte Regel eingehalten wird (keine größere auf einer kleineren Scheibe!)</p>
<p>Viel Spaß beim Ausprobieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/die-turme-von-hanoi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>einfaches Lottospiel</title>
		<link>http://www.professional-webworkx.de/einfaches-lottospiel/</link>
		<comments>http://www.professional-webworkx.de/einfaches-lottospiel/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 15:11:25 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[prozedurale Programmierung]]></category>
		<category><![CDATA[6aus49]]></category>
		<category><![CDATA[Lotto]]></category>
		<category><![CDATA[Spiel 77]]></category>
		<category><![CDATA[Super6]]></category>
		<category><![CDATA[Zusatzzahl]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=119</guid>
		<description><![CDATA[Wer gern Zufallszahlen am PC würfeln und die dann tippen möchte, kann das kleine Programm gern verwenden. Über eine Gewinnbeteiligung freue ich mich dann natürlich auch public class Lotto { public static int zufallsZahl(){ return (int) (1+(Math.random()*9)); } public static &#8230; <a href="http://www.professional-webworkx.de/einfaches-lottospiel/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Wer gern Zufallszahlen am PC würfeln und die dann tippen möchte, kann das kleine Programm gern verwenden. Über eine Gewinnbeteiligung freue ich mich dann natürlich auch <img src='http://www.professional-webworkx.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<pre class="wp-code-highlight prettyprint">
public class Lotto {

	public static int zufallsZahl(){

		return (int) (1+(Math.random()*9));
	}
	public static int[] sechsAus49(){

		int[] lottoPool = new int[49];
		int[] ziehung = new int[7];

		for(int i = 1; i &lt; lottoPool.length; ++i){
			lottoPool[i] = i;
		}

		for(int i = 0; i &lt; 7; ++i){

			// 6 aus 49 ziehen
			for(int j = 0; j &lt; ziehung.length-1; ++j){
				int los = (int) (1+(Math.random()*49));
				if (ziehung[j] != los){
					ziehung[i] = los;
				}
			}

		}
		return ziehung;
	}
	public static final void main(String[] args){

		int[] sechsAus49 = new int[7];
		sechsAus49 = sechsAus49();
		int n = 0;
		System.out.print(&quot;6 aus 49: &quot;);
		for(int i: sechsAus49){
			if(++n &lt; 7){
			System.out.print(i + &quot;, &quot;);
			}
			else
				System.out.print(&quot;Zusatzzahl: &quot; + i);
		}
		System.out.println();
		System.out.println(&quot;Superzahl: &quot; + zufallsZahl());
		System.out.print(&quot;Spiel 77: &quot;);
                int[] spiel77 = new int[7];
		for(int i = 0; i &lt; 7; ++i){
                        int zahl = zufallsZahl();
                        if(zahl != spiel77[i]{
                           spiel77[i] = zahl;
                        }
		}
                for(int i : spiel77)
                   System.out.print(i + &quot;, &quot;);
		System.out.println();
		System.out.print(&quot;Super 6: &quot;);
                int[] super6 = new int[6];
		for(int i = 0; i &lt; 6; ++i) {
                    int zahl = zufallsZahl();
                        if(zahl != super6[i]{
                           super6[i] = zahl;
                        }
		}
                for(int i : super6)
                   System.out.print(i + &quot;, &quot;);

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/einfaches-lottospiel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementierung eines Stack Speichers in Java</title>
		<link>http://www.professional-webworkx.de/implementierung-eines-stack-speichers-in-java/</link>
		<comments>http://www.professional-webworkx.de/implementierung-eines-stack-speichers-in-java/#comments</comments>
		<pubDate>Sat, 07 Apr 2012 10:26:03 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[Objektorientierte Programmierung]]></category>
		<category><![CDATA[Datenstruckturen]]></category>
		<category><![CDATA[Integer]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[Stack]]></category>
		<category><![CDATA[Stackspeicher]]></category>
		<category><![CDATA[Stapel]]></category>
		<category><![CDATA[Wrapper]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=115</guid>
		<description><![CDATA[Die Stapelverarbeitung ist innerhalb eines Computers nicht weg zu denken. Warum? Ohne solch einen Stapel- oder Stackspeicher wäre es nicht möglich innerhalb von Programmen verschiedene Prozeduren &#8220;anzuspringen&#8221;, diese abzuarbeiten und dann wieder zurück zum eigentlichen roten Faden im Programm zu &#8230; <a href="http://www.professional-webworkx.de/implementierung-eines-stack-speichers-in-java/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Die Stapelverarbeitung ist innerhalb eines Computers nicht weg zu denken. Warum?<br />
Ohne solch einen Stapel- oder Stackspeicher wäre es nicht möglich innerhalb von Programmen verschiedene Prozeduren &#8220;anzuspringen&#8221;, diese abzuarbeiten und dann wieder zurück zum eigentlichen roten Faden im Programm zu gehen und mit der weiteren Verarbeitung des Programms fortzufahren.</p>
<p>Ich habe versucht einen Stackspeicher in Java abzubilden.<br />
Aus dieser Aufgabenstellung sind folgende Klassen und Interface(s) entstanden:</p>
<p>Das Interface IStack, das dafür sorgt, dass eben nicht nur Daten eines Typs im Stack abgelegt werden können, sondern Objecte. Hinweis: Sollen primitive Datentypen, z.B. Integerwerte abgelegt werden, muss man sich der Wrapper Klasse Integer bedienen und ein Integer Objekt seiner abzulegenden Zahl erzeugen, damit das Interface und auch der Stack selbst damit umgehen können.</p>
<pre class="wp-code-highlight prettyprint">
package Stack;

public interface IStack {

	void push(Object o) throws StackException;
	Object get() throws StackException;
	Object top() throws StackException;
	boolean isEmpty();
}
</pre>
<p>Die Klasse StackArray, die die Speicherdatenstruktur zur Verfügung stellt und mittels zweier Konstruktoren die Initialisierung eines Stacks ermöglicht.</p>
<pre class="wp-code-highlight prettyprint">
package Stack;

public class StackArray implements IStack {

	Object[] stack = null;
	int zeiger = 0;
	int l = 0;

	// Konstruktoren
	public StackArray(int anzahl){
		this.stack = new Object[anzahl];
		this.l = stack.length;
	}

	public StackArray(){
		this.stack = new Object[100];
		this.l = stack.length;
	}

	@Override
	public void push(Object o) throws StackException {
		if(zeiger &lt;= l){
			stack[zeiger] = o;
			++zeiger;
		}
		else
		{
			throw new StackException(&quot;Fehler! Stack ist voll&quot;);
		}
	}

	@Override
	public Object get() throws StackException {
		Object s = stack[zeiger];
		if(!isEmpty()){
			s = stack[zeiger-1];
			stack[zeiger-1] = null;
			zeiger--;
		}
		else
		{
			throw new StackException(&quot;Fehler! Element konnte nicht gefunden werden&quot;);
		}
			return s;
	}

	@Override
	public Object top() throws StackException {

		return stack[zeiger];
	}

	@Override
	public boolean isEmpty() {
		if(zeiger == 0)
			return true;
		else
			return false;
	}
}
</pre>
<p>und last but not least natürlich die Applikationsklasse Stack.<br />
Es wird ein Object vom Typ IStack erzeugt und eine Referenz auf StackArray angelegt. Unser Stack soll in diesem Beispiel 50 Speicherplätze bereitstellen.<br />
Anschließend werden ein paar Objekte auf den Stapel gelegt und später, in der while Schleife wieder in umgekehrter Reihenfolge abgerufen, was das LIFO (Last in First out) Prinzip verdeutlichen soll.</p>
<pre class="wp-code-highlight prettyprint">
package Stack;

public class Stack {

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

		IStack stack = new StackArray(50);

		try{
			stack.push(new Integer(12));
			stack.push(new Integer(24));
			stack.push(&quot;Powerfuel&quot;);
			stack.push(new Integer(1));
			stack.push(&quot;sieben&quot;);
			stack.push(new Integer(54567));
			stack.push(new Integer(3567));
			stack.push(new Integer(66543567));
			stack.push(new Integer(56347));
			stack.push(new Integer(5467));
			stack.push(new Integer(564357));
			stack.push(&quot;anderes Object lässt sich sicher auch einfügen&quot;);

		}catch(StackException exc){
			System.out.println(exc);
		}

		while(!stack.isEmpty()){
			try{
				Object i =  stack.get();
				System.out.println(i);
			}catch(StackException exc){
				System.out.println(exc);
			}
		}

	}

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/implementierung-eines-stack-speichers-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ein Registermaschine implementiert in Java</title>
		<link>http://www.professional-webworkx.de/ein-registermaschine-implementiert-in-java/</link>
		<comments>http://www.professional-webworkx.de/ein-registermaschine-implementiert-in-java/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 13:36:19 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[Objektorientierte Programmierung]]></category>
		<category><![CDATA[Algorithmen]]></category>
		<category><![CDATA[Datenstrukturen]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Registermaschine]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=113</guid>
		<description><![CDATA[Ein schönes Beispiel für eine Registermaschine habe ich im Buch Algorithmen und Datenstrukturen entdeckt und möchte ich euch gern als vollständig implementierte Version hier im Blog vorstellen: Die Klasse Configuration, sie erstellt uns unsere Register, initialisiert sie am Anfang mit &#8230; <a href="http://www.professional-webworkx.de/ein-registermaschine-implementiert-in-java/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ein schönes Beispiel für eine Registermaschine habe ich im Buch <a title="Algorithmen und Datenstrukturen" href="http://www.amazon.de/Algorithmen-Datenstrukturen-Eine-Einf%C3%BChrung-Java/dp/3898646637/ref=sr_1_1?ie=UTF8&amp;qid=1333113660&amp;sr=8-1" target="_blank">Algorithmen und Datenstrukturen</a> entdeckt und möchte ich euch gern als vollständig implementierte Version hier im Blog vorstellen:</p>
<p>Die Klasse Configuration, sie erstellt uns unsere Register, initialisiert sie am Anfang mit 0 und ist im späteren Programmverlauf dafür zuständig unter zu Hilfenahme des Interface Instruction, Daten in Form von Integerwerten aus den jeweiligen Registern zu lesen und zu speichern.</p>
<pre class="wp-code-highlight prettyprint">
package Registermaschine;

public class Configuration {
	public final static int NUM_REGISTERS = 20;
	int ic;	// Befehlszähler
	int registers[] = new int[NUM_REGISTERS]; // Register
                                                  // registers[0] = Akkumulator

	public Configuration(){
		init();
	}

	public void init(){
		ic = 0;
		for(int i = 0; i &lt; registers.length; i++){
			registers[i] = 0;
		}
	}

	public int getICounter() {
		return ic;
	}
	public void setICounter(int nic){
		ic = nic;
	}
	public void incICounter() {
		ic++;
	}

	public int getRegister(int i){
		return registers[i];
	}

	public void setRegister(int i, int value){
		registers[i] = value;
	}

	public String toString(){
		StringBuffer sb = new StringBuffer();
		sb.append(&quot;icounter = &quot; + (ic + 1));
		for(int i = 0; i &lt; registers.length; i++)
		sb.append(&quot;, c[&quot; + i + &quot;] = &quot; + registers[i]);
		return sb.toString();
	}
}
</pre>
<p>Das Interface Instruction ist schnell erklärt, es stellt die Methode eval bereit, über die im Programmverlauf nachher die eigentliche Verarbeitung in den implementierenden Klassen ablaufen wird.</p>
<pre class="wp-code-highlight prettyprint">
package Registermaschine;

public interface Instruction {

	void eval(Configuration config);
}
</pre>
<p>Als nächstes folgen die einzelnen Klassen Load, Mult, Sub, Div, Store und End, die die entsprechenden Operationen, wonach sich ihr Name so anhört, ausführen.<br />
Ich habe mich dazu entschieden jeweils im Akkumulator zu arbeiten, d.h. als erstes wird ein Load Befehl aufgerufen, der aus einem Register einen Wert lädt und ihn in den Akkumulator schreibt, was auch die gängige Praxis auf von-Neumann Architekturen ist.<br />
Rechenoperationen werden nun so ausgeführt, dass der Wert des Akkumulators eingelesen wird und dann z.B. der Wert aus Register 2 davon abgezogen wird und schließlich wird das Ergebnis wieder in den Akkumulator zurück geschrieben. (Der Akkumulator ist ein sehr schnelles Register im L1 Cache, der Prozessor kann mit voller Geschwindigkeit darauf lesen und schreiben)<br />
Folgt im Programmablauf ein Store Befehl, so wird der aktuell im Akkumulator befindliche Wert geladen und in das im Speichern-Befehl angegebene Register geschrieben. </p>
<pre class="wp-code-highlight prettyprint">
package Registermaschine;

class Div implements Instruction {

	private int reg;

	public Div(int i){
		reg = i;
	}

	@Override
	public void eval(Configuration config) {
		config.setRegister(0, (config.getRegister(0)/config.getRegister(reg)));
		config.incICounter();
	}

	public String toString(){
		return &quot;DIV &quot; + reg;
	}

}

class Mult implements Instruction {

	private int reg;

	public Mult(int i){
		reg = i;
	}

	@Override
	public void eval(Configuration config) {

		config.setRegister(0, config.getRegister(0)*config.getRegister(reg));
		config.incICounter();
	}

	public String toString(){
		return &quot;Mult &quot; + reg;
	}
}

class Sub implements Instruction {

	private int reg;

	public Sub(int i){
		reg = i;
	}

	@Override
	public void eval(Configuration config) {
		config.setRegister(0, config.getRegister(0)-config.getRegister(reg));
		config.incICounter();
	}

	public String toString(){
		return &quot;SUB &quot; + reg;
	}
}

class Store implements Instruction {
	private int reg;

	public Store(int i){
		reg = i;
	}

	@Override
	public void eval(Configuration config) {
		config.setRegister(reg, config.getRegister(0));
		config.incICounter();
	}

	public String toString(){
		return &quot;Store &quot; + reg;
	}
}

class End implements Instruction {

	@Override
	public void eval(Configuration config) {
		// TODO Auto-generated method stub

	}
	public String toString(){
		return &quot;END&quot;;
	}
}
class Load implements Instruction {

	private int reg; // Register

	public Load(int i){
		reg = i;
	}
	@Override
	public void eval(Configuration config) {
		// Wert in den Akkumulator laden
		config.setRegister(0, config.getRegister(reg));
		config.incICounter();
	}

	public String toString(){
		return &quot;LOAD &quot; + reg;
	}

}
</pre>
<p>Last but not least brauchen wir noch die Maschinenimplementierung:</p>
<pre class="wp-code-highlight prettyprint">
package Registermaschine;

public class Machine {

	private Configuration config 	= null;
	private Instruction[] programm	= null;

	public Machine() {
		config = new Configuration();
	}

	public void setProgram(Instruction[] prog){
		programm = new Instruction[prog.length];
		System.arraycopy(prog, 0, programm, 0, prog.length);
	}

	public void run(){
		while( !programm[config.getICounter()].toString().equals (&quot;END&quot;))
		{
			programm[config.getICounter()].eval(config);
		}
	}

	public void printConfiguration(){
		System.out.println(config);
	}

	public Configuration getConfiguration(){
		return config;
	}

	public static void main(String[] args) {

		Instruction[] prog = {
				new Load (1), new Div (2), new Mult (2),
				new Store (3), new Load (1), new Sub (3),
				new Store (3), new End()
		};

		Machine machine = new Machine();
		machine.setProgram(prog);
		machine.getConfiguration().init();
		machine.getConfiguration().setRegister(1, 32);
		machine.getConfiguration().setRegister(2, 5);

		machine.run();
		machine.printConfiguration();

	}

}
</pre>
<p>Register 1 und 2 wurden mit Werten vorbelegt, die Methode run() startet die Maschine und arbeitet das Programm ab. Zum Schluss wird die aktuelle Konfiguration ausgegeben und die berechneten Werte auf der Konsole ausgegeben. </p>
<p>Für Verbesserungsvorschläge und/oder Kritiken bin ich offen.</p>
<p>Originalquelle: Algorithmen und Datenstrukturen, Gunter Saake und Kai-Uwe Sattler</p>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/ein-registermaschine-implementiert-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Business Studio von TIBCO</title>
		<link>http://www.professional-webworkx.de/business-studio-von-tibco/</link>
		<comments>http://www.professional-webworkx.de/business-studio-von-tibco/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 12:12:51 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Business Studio]]></category>
		<category><![CDATA[Geschäftsprozessmanagement]]></category>
		<category><![CDATA[GPM]]></category>
		<category><![CDATA[TIBCO]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=110</guid>
		<description><![CDATA[TIBCO gehört zu den führenden Unternehmen im Zusammenhang mit Geschäftsprozessmanagement und Prozessmodellierung und wird damit, uns, also den Kunden, einen 2-Sekunden Vorteil verschaffen zu können und so Krisen im Unternehmen frühzeitig zu erkennen und abzuwenden (Wer etwas tut, wenn er &#8230; <a href="http://www.professional-webworkx.de/business-studio-von-tibco/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>TIBCO gehört zu den führenden Unternehmen im Zusammenhang mit Geschäftsprozessmanagement und Prozessmodellierung und wird damit, uns, also den Kunden, einen 2-Sekunden Vorteil verschaffen zu können und so Krisen im Unternehmen frühzeitig zu erkennen und abzuwenden (Wer etwas tut, wenn er es erkannt hat).</p>
<p>Das kostenlos angebotene Tool zur Prozessmodellierung, <strong>Business Studio</strong>, schaue ich mir gerade etwas genauer an und werde in Kürze über meine Erfahrungen im Umgang damit berichten.</p>
<p>Wer sich über TIBCO näher informieren möchte, dem sei die <a title="TIBCO Homepage" href="http://www.tibco.de" target="_blank">Homepage</a> ans Herz gelegt!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/business-studio-von-tibco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seiten- und Podcastempfehlung</title>
		<link>http://www.professional-webworkx.de/seiten-und-podcastempfehlung/</link>
		<comments>http://www.professional-webworkx.de/seiten-und-podcastempfehlung/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 18:22:29 +0000</pubDate>
		<dc:creator>PatrickO</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[MP3]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[SE-Radio]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.professional-webworkx.de/?p=108</guid>
		<description><![CDATA[Wer von euch gern mit seinem MP3 Player unterwegs ist und spannende Themen in Bezug auf Softwareentwicklung hört, dem sei die Website SE-Radio ans Herz gelegt! Tolle Themen in jeder Menge Podcats verpackt!]]></description>
			<content:encoded><![CDATA[<p>Wer von euch gern mit seinem MP3 Player unterwegs ist und spannende Themen in Bezug auf Softwareentwicklung hört, dem sei die Website<br />
<a href="http://www.se-radio.net" title="SE-Radio" target="_blank">SE-Radio</a> ans Herz gelegt! Tolle Themen in jeder Menge Podcats verpackt!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.professional-webworkx.de/seiten-und-podcastempfehlung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

