Schlagwort-Archiv: Java

Memory für Eclipse: Out of Memory Exception

Für Performance-Messungen beim Abfüllen, Durchsuchen oder Löschen von Listen, Trees oder Maps habe ich ein kleines Java-Programm geschrieben, welches alle Aktionen misst und ausgibt. Eigentlich nichts grosses, doch bei den 10 Millionen Instanzen, welche ich für ein aussagekräftiges Resultat brauche, kommt meine Maschine schnell ans Limit und Reklamiert mit einem Runtime-Error in Form einer “Out of Memory Exception”. Das liegt daran, dass Eclipse einem Programm nur sehr begrenzt Memory zur Verfügung stellt (ich glaube gerade mal 256 MB) und dies bei 10 Millionen Instanzen nicht ganz ausreicht.

Also muss ich auf meinem Mac das Programm mit mehr Memory starten, und das geht ganz einfach und unkompliziert über Eclipse. Einfach unter Run > Run Configurations folgende Werte eintragen:

memory

Nun, nochmals ausführen und schon läuft alles durch. Das Programm werde ich samt Ergebnis vielleicht auch noch kurz veröffentlichen, mal schauen, was rauskommt.

Schiffe versenken in Java

Als Prüfungsvorbereitung kämpfe ich mich zur Zeit ein kleinwenig mit Java ab. Zum Glück noch nichts mit GUI, etc, einfach Java Basics, wie in den letzten zwei Büchern, die ich vorgestellt hatte. Im Zuge dieser Vorbereitung ist ein Programm entstanden, dass ich euch nicht vorenthalten möchte, vielleicht gibt es ja die eine oder andere Verbesserung oder Kritik, oder es hilft sonst jemandem auf seinem Weg.

Das Projekt besteht aus drei Klassen: Game, für die Hauptklasse, Schiffe, für die Schiffe und Feld, für die einzelnen Felder.
Die Schiffe-Klasse beinhaltet einen Namen und da Arrays immer so viel Vorplanung voraussetzen, eine Arraylist:

import java.util.ArrayList;

public class Schiffe {
	int name;
	ArrayList<Feld> position = new ArrayList<Feld>();
}

Auch die Feld-Klasse ist ganz schlicht, nur mit einem zusätzlichen Konstruktor:

public class Feld {
	int x;
	int y;
	int orientation;
	
	public Feld(int x, int y) {
		this.x = x;
		this.y = y;
	}
}

Interessant wird es in der Game-Klasse. Es gibt eine Methode positioning(), welche die Schiffe setzt. Darin werden auch gleich doppelt belegte Felder geprüft. Weiter gibt es eine Methode play(), welche für die Spieler 1 und 2 nacheinander die Methode shoot() aufruft, und darin gleich die Referenzen auf die Feld- und zum Schluss auch noch auf die Schiff-Objekte löscht. Ist ein Schiff versenkt, so wird die Methode win() aufgerufen, welche checkt, ob jemand gewonnen hat und bei bedarf, das Spiel unterbricht. Gar nicht so kompliziert oder? ;)

Weiterlesen

android

Android App – Entwicklungsumgebung

Artikelserie: Android App – Entwicklungsumgebung

Vor kurzem habe ich mir das neue Samsung Galaxy Tab mit Android 2.2 zugelegt und wollte mich nun mal ein bisschen schlau machen betreffend App-Programmierung für Android.
Ich habe mir vorgenommen in einer Artikelserie über meine Fortschritte und ersten Apps zu berichten.

Somit fange ich hier mal an über die Installation der Entwicklungsumgebung und erste Informationsquellen zu berichten.

Die Installation ist auf der Google-Seite sehr gut beschrieben, jedoch ausschliesslich in englischer Sprache.
Jedoch ist alles sehr einfach gehalten, weshalb ich mir nicht mehr die Mühe mache, alles noch zu übersetzen.

Im Gegensatz zur Apple-App-Entwicklung (Achtung flame ;) ) gefällt mir hier sehr gut, dass auf Windows, Mac und Linux entwickelt werden kann und man sich nicht zuerst noch einkaufen muss…

Nachdem nun die Entwicklungsumgebung eingerichtet ist, müssen mehr Informationen her!
Zum Einstieg halte ich mich an das Buch Android von Arno Becker und Marcus Pant, welches als eBook hier gratis heruntergeladen werden kann.
Zwar behandelt dieses Buch noch die alte 1.5er Version von Android, jedoch für den Einstieg wird es seinen Zweck erfüllen. Und da ich kein besseres Buch kenne zur Zeit, muss das reichen…

Somit wäre der erste Meilenstein zur eigenen Android App gelegt, was mir nun noch fehlt, ist eine gute Idee… Vorschläge? :)

Das Sieb des Eratosthenes

Wenn man den Titel so liest, werden sich wahrscheinlich die wenigstens etwas darunter vorstellen können…

Mir ging es genauso! Zuerst habe ich an Mathematik wie Satz des Pythagoras u.ä. gedacht, doch damit hat dies nun nicht viel zu tun, obwohl es um Mathematik, wenn auch einfache, geht!

Nun was ist dieses Sieb nun:

Das Sieb des Eratosthenes beschreibt ein Vorgang um aus einer Zahlenkette alle Primzahlen herauszulesen.

Eine Primzahl ist eine natürliche Zahl mit genau zwei natürlichen Zahlen als Teiler, nämlich der Zahl 1 und sich selbst

sponsored by Wikipedia

Eratosthenes macht sich dabei das Wissen zunutze, dass jede Nicht-Primzahl ein Vielfaches einer Primzahl ist. So wird jede zahl genommen und mit allen x-Reihen (2er-Reihe, 3er-Reihe, …, 1234er-Reihe) verglichen.

Gibt eine Zahl dann ein Positives Feedback, sprich sie ist ein Vielfaches einer andern, ist es keine Primzahl mehr und kann ausgeschlossen werden.

So kann man, wenn man genügend Rechenleistung hat, Primzahlen mit mehreren Millionen Stellen generieren lassen.

Der Code zum ganzen, habe ich in Java geschrieben. Er ist sicherlicht nicht gerade der kürzeste und beste, doch ich hoffe ihr verzeiht mir, wenn ich euch sage, dass ich gerade eben erst angefangen habe Java zu programmieren.

Ach ja: Programmiert wurde das ganze in Eclips unter Ubuntu 8.04 :)

  • Lösungsbeispiel – TXT
  • Lösungsbeispiel – Java