Der dynamische Datentyp Vector I

 Documents

 78 views
of 18
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Description
Kurs: Programmieren in Java Tag 4 GRUNDLAGEN KI UND SPIELE- PROGRAMMIERUNG GRAFIKKONZEPTE BILDVERARBEITUNG MUSTERERKENNUNG ENTWICKLUNGS- OBJEKTORIENTIERTE…
Share
Transcript
Kurs: Programmieren in Java Tag 4 GRUNDLAGEN KI UND SPIELE- PROGRAMMIERUNG GRAFIKKONZEPTE BILDVERARBEITUNG MUSTERERKENNUNG ENTWICKLUNGS- OBJEKTORIENTIERTE UMGEBUNGEN PROGRAMMIERUNG Marco Block Sommersemester 2009 Praktische Beispiele Inhalt:  Kryptographie  Verschiebung (Caesar)  XOR-Codierung  Verwendung von Zufallszahlen  Dynamischer Datentyp Vector Ratz D., et.al.: „Grundkurs Programmieren in Java“, 4.Auflage, Hanser-Verlag 2007 Block M.: "Java-Intensivkurs - In 14 Tagen lernen Projekte erfolgreich zu realisieren“, Springer-Verlag 2007 Marco Block Sommersemester 2008 Praktische Beispiele Abstrakte Encoder-Klasse Zwei Methoden werden bei der Verschlüsselung benötigt: public abstract class Encoder { // verschlüsselt einen String public abstract String encode(String s); // entschlüsselt einen String public abstract String decode(String s); } Marco Block Sommersemester 2009 Praktische Beispiele Caesar-Codierung I Durch Verschiebung (Schlüssel) der Buchstaben im Alphabet kann ein Text codiert und wieder decodiert werden: public class CAESAR_Codierer extends Encoder{ // geheimer Schlüssel private int key; // Definition des Alphabets public static final int ALPHABETSIZE = 26; public static final char[] alpha = {'A','B','C','D','E','F','G','H','I', 'J','K','L','M', 'N','O','P','Q','R', 'S','T','U','V','W','X','Y','Z'}; // Übersetzungslisten für die Buchstaben protected char[] encrypt = new char[ALPHABETSIZE]; protected char[] decrypt = new char[ALPHABETSIZE]; public CAESAR_Codierer(int key) { this.key = key; computeNewAlphabet(); } private void computeNewAlphabet(){ for (int i=0; i aufrufen."); } Encoder enc = new XOR_Codierer(key); demo(enc, text); } } Marco Block Sommersemester 2009 Praktische Beispiele Zufallszahlen Es gibt verschiedene Möglichkeiten Zufallszahlen zu verwenden. Oft benötigt man sie als Wahrscheinlichkeitsmaß im Intervall [0,1]. In anderen Fällen ist es wünschenswert aus einer Menge A mit n Elementen eines auszuwählen {1, 2, ..., n}. Wir unterscheiden zunächst einmal den Datentyp der Zufallszahl. In jedem Fall verwenden wir die Klasse aus dem Package java.util. import java.util.Random; ... Um eine der Klassenmethoden verwenden zu können, erzeugen wir eine Instanz der Klasse Random: ... Random randomGenerator = new Random(); ... Marco Block Sommersemester 2009 Praktische Beispiele Ganzzahlige Zufallszahlen vom Typ int und long Das kleine Lottoprogramm (6 aus 49) dient als Beispiel für die Erzeugung der Funktion nextInt(n). Es werden Zufallszahlen aus dem Bereich [0, 1, ..., n-1] gewählt. Wenn Zahlen aus dem Bereich long benötigt werden, so kann die Funktion nextLong(n) analog verwendet werden. import java.util.*; public class Lotto { public static void main(String[] args) { Random rg = new Random(); int[] zuf = new int[6]; System.out.print("Lottotipp (6 aus 49): "); int wert, i=0; aussen: while(i<6){ wert = rg.nextInt(49) + 1; // +1 da nicht 0,...,48 sondern 1,...,49 // schon vorhanden? for (int j=0; j < i; j++) if (zuf[j]==wert) continue aussen; zuf[i] = wert; i++; System.out.print(wert + " "); } } } Marco Block Sommersemester 2009 Praktische Beispiele Ganzzahlige Zufallszahlen vom Typ float und double Für die Erzeugung einer Zufallszahl aus dem Intervall [0,1] gibt es eine kürzere Schreibweise. In der Klasse Math im Package java.lang gibt es eine statische Funktion random, die eine Instanz der Klasse Random erzeugt, die Funktion nextDouble aufruft und den erzeugten Wert zurückliefert. Wir schreiben lediglich die folgende Zeile: double zuffi = Math.random(); Bei der Initialisierung der Klasse Random gibt es zwei Varianten. Die erste mit dem parameterlosen Konstruktor initialisiert sich in Abhängigkeit zur Systemzeit und erzeugt bei jedem Start neue Zufallszahlen. Für Programme, bei denen beispielsweise zeitkritische Abschnitte getestet werden, die aber abhängig von der jeweiligen Zufallszahl sind oder Experimente, bei denen die gleichen Stichproben verwendet werden sollen, ist der Konstruktor mit einem long als Parameter gedacht. Wir können beispielsweise einen long mit dem Wert 0 immer als Startwert nehmen und erhalten anschließend immer dieselben Zufallszahlen: long initwert = 0; Random randomGenerator = new Random(initwert); Marco Block Sommersemester 2009 Praktische Beispiele Der dynamische Datentyp Vector I Im Gegensatz zu einem Array, bei dem die Anzahl der Elemente bei der Initialisierung festgelegt wird, verhält sich der von Java angebotene Datentyp Vector dynamisch. Wenn wir also vor der Verwendung einer Liste die Anzahl der Elemente nicht kennen, können wir diesen Datentyp nehmen. Ein kleines Beispiel dazu: import java.util.Vector; public class VectorTest{ public static void main(String[] args){ Vector v = new Vector(); for (int i=0; i<4; i++) // füge nacheinander Elemente in den Vector ein v.addElement(new Integer(i)); System.out.println("Vector size = "+v.size()); // Anzahl der Elemente im Vector v // Auslesen der aktuellen Inhalts for (int i=0; ijavac Jama/Matrix.java Note: Jama\Matrix.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.J Jetzt wurde das Package erfolgreich compilert. Marco Block Sommersemester 2009 Praktische Beispiele Eine eigene Bibliothek bauen I Die Erzeugung eines eigenen Packages unter Java ist sehr einfach. Wichtig ist das Zusammenspiel aus Klassennamen und Verzeichnisstruktur. Angenommen wir wollen eine Klasse MeinMax in einem Package meinMathe anbieten. Dann legen wir ein Verzeichnis meinMathe an und speichern dort z.B. die folgende Klasse: package meinMathe; public class MeinMax{ public static int maxi(int a, int b){ if (a
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks