17.01.2014 Aufrufe

Eindimensionale Arrays

Eindimensionale Arrays

Eindimensionale Arrays

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Problemorientierte Programmiersprachen - Java I SS 2000<br />

<strong>Eindimensionale</strong> <strong>Arrays</strong><br />

Erzeugen (2 Möglichkeiten):<br />

• Erzeugung durch new-Operator:<br />

float v[] = new float[4];<br />

Problemorientierte Programmiersprachen - Java I SS 2000<br />

• Erzeugung durch einen Initialisierer:<br />

int lt[] = {1,2,4,8,16,32,64,128};<br />

Diese Syntax erzeugt auf dynamische Weise einen Array und initialisiert seine<br />

Elemente mit den angebenen Werten.<br />

lt:<br />

1 2 4 8 16 32 64 128<br />

v:<br />

0.0f 0.0f 0.0f 0.0f<br />

lt[0] lt[3] lt[7]<br />

v[0]<br />

v[3]<br />

• <strong>Arrays</strong> sind Objekte.<br />

• Sie werden dynamisch erzeugt<br />

• Sie werden automatisch vom Garbage Collector entfernt .<br />

• Aber kein Konstruktor, sondern new-Operator.<br />

• Anzahl der Komponenten des <strong>Arrays</strong> muß bei der Definition<br />

angegeben werden.<br />

• Die Länge des <strong>Arrays</strong> erhält man durch das length-Attribut des<br />

<strong>Arrays</strong> (v.length ist in unserem Beispiel gleich 4).<br />

• Die Indizes der Komponenten müssen ganzzahlig sein.<br />

• Die Komponenten selbst werden mit 0 beginnend numeriert.<br />

• Der größte zulässige Index ist immer um 1 kleiner ist als die<br />

Anzahl der Komponenten (length-1).<br />

• Negative Indizes und Indizes größer oder gleich der Länge length<br />

sind nicht zugelassen (z.B. [v.length] führt zum Fehler).<br />

• Die Elemente eines auf diese Weise erzeugten <strong>Arrays</strong> werden mit<br />

dem für diesen Typ üblichen Standardwert initialisiert. (Bei unserem<br />

Array v beispielweise mit 0.0f.)<br />

• Direkter Zugriff auf jede Komponente (z.B. v[1] = 1.2).<br />

Beispiel: (Ausgabe des <strong>Arrays</strong> lt)<br />

public class lt {<br />

public static void main(String[] args) {<br />

int lt[] = {1,2,4,8,16,32,64,128};<br />

for(int i = 0; i < lt.length; i++)<br />

System.out.println(lt[i]);<br />

}<br />

}<br />

Beispiel: (Summe des <strong>Arrays</strong> lt)<br />

public class lt {<br />

public static void main(String[] args) {<br />

int lt[] = {1,2,4,8,16,32,64,128};<br />

int summe =0;<br />

for(int i = 0; i < lt.length; i++)<br />

summe = summe + lt[i];<br />

System.out.println("Summe: " +summe);<br />

}<br />

}<br />

A. Schmidt, W. Süß 1 19.10.2000<br />

A. Schmidt, W. Süß 2 19.10.2000


Problemorientierte Programmiersprachen - Java I SS 2000<br />

Problemorientierte Programmiersprachen - Java I SS 2000<br />

Beispiel: (Erzeugen eines Feldes mit Zufallszahlen als Inhalt)<br />

public class MyArray {<br />

public static void main(String[] args) {<br />

double nums[] = new double[10];<br />

for(int i = 0; i < nums.length; i++)<br />

nums[i] = Math.random() * 100;<br />

Deklaration eines <strong>Arrays</strong>:<br />

public class MyArray1 {<br />

public static void main(String[] args) {<br />

int a1[]= {1,2,3,4,5}; // Definition von a1<br />

int a2[]; // Deklaration von a2;<br />

}<br />

}<br />

for(int i = 0; i < nums.length; i++)<br />

System.out.println(nums[i]);<br />

for(int i = 0; i < a1.length; i++)<br />

System.out.println(a1[i]);<br />

for(int i = 0; i < a2.length; i++)<br />

System.out.println(a2[i]); }<br />

}<br />

Ergibt einen Fehler, da a2 nicht initialisiert wurde.<br />

Beispiel: (Suchen des größten Wertes im Array)<br />

public class ArrayGreat {<br />

public static void main(String[] args) {<br />

double[] nums = new double[10]; //Klammern<br />

//koennen auch hier stehen<br />

for(int i = 0; i < nums.length; i++)<br />

nums[i] = Math.random() * 100;<br />

Zuweisung von <strong>Arrays</strong>:<br />

public class MyArray1 {<br />

public static void main(String[] args) {<br />

int a1[]= {1,2,3,4,5}; // Definition von a1<br />

int a2[]; // Deklaration von a2;<br />

}<br />

}<br />

int max=0;<br />

//Index des groessten Elementes<br />

for(int i = 1; i < nums.length; i++)<br />

if (nums[max]


Problemorientierte Programmiersprachen - Java I SS 2000<br />

Problemorientierte Programmiersprachen - Java I SS 2000<br />

Kopieren von <strong>Arrays</strong> (by reference):<br />

public class ArrayCopy {<br />

public static void main(String[] args) {<br />

int[] a = {1,2,4,8,16};<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print (a[i]+" ");<br />

System.out.println();<br />

int[] b = {32,64,128,256,512,1024};<br />

System.out.print("b: ");<br />

for(int i = 0; i < b.length; i++)<br />

System.out.print(b[i]+" ");<br />

System.out.println();<br />

a=b;<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print(a[i]+" ");<br />

System.out.println();<br />

a[0]=33;<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print (a[i]+" ");<br />

System.out.println();<br />

System.out.print("b: ");<br />

for(int i = 0; i < b.length; i++)<br />

System.out.print(b[i]+" ");<br />

System.out.println();<br />

}<br />

}<br />

Ausgabe:<br />

a: 1 2 4 8 16<br />

b: 32 64 128 256 512 1024<br />

a: 32 64 128 256 512 1024<br />

a: 33 64 128 256 512 1024<br />

b: 33 64 128 256 512 1024<br />

Referenzdatentypen<br />

• Die komplexeren Datentypen von Java sind Objekte und <strong>Arrays</strong>. Sie<br />

werden als „Referenztypen“ bezeichnet, weil sie „per Referenz“ (by<br />

reference) verarbeitet werden.<br />

• Im Gegensatz dazu werden die einfachen Datentypen by value, also<br />

„per Wert“ verarbeitet.<br />

Kopieren von Variablen (by value):<br />

public class VarCopy {<br />

public static void main(String[] args) {<br />

int a = 1;<br />

System.out.println("a: "+a);<br />

int b = 2;<br />

System.out.println("b: "+b);<br />

a=b;<br />

System.out.println("a: "+a);<br />

System.out.println("b: "+b);<br />

a=3;<br />

System.out.println("a: "+a);<br />

System.out.println("b: "+b);<br />

}<br />

}<br />

Ausgabe: a: 1<br />

b: 2<br />

a: 2<br />

b: 2<br />

a: 3<br />

b: 2<br />

A. Schmidt, W. Süß 5 19.10.2000<br />

A. Schmidt, W. Süß 6 19.10.2000


Problemorientierte Programmiersprachen - Java I SS 2000<br />

Problemorientierte Programmiersprachen - Java I SS 2000<br />

Kopieren von Objekten (by reference):<br />

public class Circle {<br />

public double x,y,r; // Instanzvariablen<br />

// Die Konstruktormethoden<br />

public Circle(double x, double y, double r)<br />

{ this.x = x; this.y = y; this.r = r;<br />

}<br />

public Circle(double r) {this(0.0,0.0,r);}<br />

public Circle(Circle c) {this (c.x,c.y,c.r);}<br />

public Circle(){this(0.0,0.0,1.0);}<br />

public double circumference()<br />

{ return 2 * 3.14159 * r; }<br />

public double area() {return 3.14159 * r*r; }<br />

public static void main(String[] args) {<br />

Circle c1 = new Circle();<br />

Circle c2 = new Circle(2,2,4);<br />

System.out.println("Area c1: " + c1.area());<br />

System.out.println("Area c2: " + c2.area());<br />

c2=c1;<br />

System.out.println("Area c1: " + c1.area());<br />

System.out.println("Area c2: " + c2.area());<br />

c1.r=2;<br />

System.out.println("Area c1: " + c1.area());<br />

System.out.println("Area c2: " + c2.area());<br />

}<br />

}<br />

Ausgabe: Area c1: 3.14159<br />

Area c2: 50.26544<br />

Area c1: 3.14159<br />

Area c2: 3.14159<br />

Area c1: 12.56636<br />

Area c2: 12.56636<br />

A. Schmidt, W. Süß 7 19.10.2000<br />

Kopieren von <strong>Arrays</strong> (by value):<br />

public class ArrayCopy {<br />

public static void main(String[] args) {<br />

int[] a = {1,2,4,8,16};<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print (a[i]+" ");<br />

System.out.println();<br />

int[] b = {32,64,128,256,512,1024};<br />

System.out.print("b: ");<br />

for(int i = 0; i < b.length; i++)<br />

System.out.print(b[i]+" ");<br />

System.out.println();<br />

System.arraycopy(a,0,b,0,a.length);<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print(a[i]+" ");<br />

System.out.println();<br />

System.out.print("b: ");<br />

for(int i = 0; i < b.length; i++)<br />

System.out.print(b[i]+" ");<br />

System.out.println();<br />

a[0]=33;<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print (a[i]+" ");<br />

System.out.println();<br />

System.out.print("b: ");<br />

for(int i = 0; i < b.length; i++)<br />

System.out.print(b[i]+" ");<br />

System.out.println();<br />

Ausgabe:<br />

}<br />

}<br />

a: 1 2 4 8 16<br />

b: 32 64 128 256 512 1024<br />

a: 1 2 4 8 16<br />

b: 1 2 4 8 16 1024<br />

a: 33 2 4 8 16<br />

b: 1 2 4 8 16 1024<br />

A. Schmidt, W. Süß 8 19.10.2000


Problemorientierte Programmiersprachen - Java I SS 2000<br />

Problemorientierte Programmiersprachen - Java I SS 2000<br />

Vorsicht vor Überschreitung der Arraygrenzen:<br />

public class ArrayCopy {<br />

public static void main(String[] args) {<br />

int[] a = {1,2,4,8,16};<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print (a[i]+" ");<br />

System.out.println();<br />

int[] b = {32,64,128,256,512,1024};<br />

System.out.print("b: ");<br />

for(int i = 0; i < b.length; i++)<br />

System.out.print(b[i]+" ");<br />

System.out.println();<br />

System.arraycopy(a,0,b,b.length,a.length);<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print(a[i]+" ");<br />

System.out.println();<br />

System.out.print("b: ");<br />

for(int i = 0; i < b.length; i++)<br />

System.out.print(b[i]+" ");<br />

System.out.println();<br />

a[0]=33;<br />

System.out.print("a: ");<br />

for(int i = 0; i < a.length; i++)<br />

System.out.print (a[i]+" ");<br />

System.out.println();<br />

}<br />

}<br />

System.out.print("b: ");<br />

for(int i = 0; i < b.length; i++)<br />

System.out.print(b[i]+" ");<br />

System.out.println();<br />

Keine Erweiterung eines bestehenden <strong>Arrays</strong> möglich! Lösung:<br />

int c[] = new int [a.length + b.length]<br />

System.arraycopy(a,0,c,0,a.length);<br />

System.arraycopy(b,0,c,a.length,b.length);<br />

Beispiel: (Sortieren eines Feldes)<br />

public class ArraySortOwn {<br />

/**Primitve Moeglichkeit des Sortierens eines <strong>Arrays</strong><br />

**/<br />

public static void sort(double[] nums) {<br />

//Schleife durch das Array<br />

//Suchen des kleinsten Elementes im Feld<br />

//Kleinstes Element an erste unsortierte Stelle<br />

for(int i = 0; i < nums.length; i++) {<br />

int min = i; //Suchen des kleinsten Elementes<br />

//zwischen i und dem Ende des <strong>Arrays</strong>.<br />

for(int j = i; j < nums.length; j++)<br />

if (nums[j] < nums[min]) min = j;<br />

// Tauschen des kleinsten Elementes mit i<br />

double tmp;<br />

tmp = nums[i];<br />

nums[i] = nums[min];<br />

nums[min] = tmp;<br />

}<br />

}<br />

public static void main(String[] args) {<br />

double[] nums = new double[10]; //Arrayerzeugung<br />

for(int i = 0; i < nums.length; i++) //Zufallszahlen<br />

nums[i] = Math.random() * 100; //generieren<br />

sort(nums); //Aufruf der Instanzmethode sort<br />

for(int i = 0; i < nums.length; i++) //Ausdruck<br />

System.out.println(nums[i]);<br />

}<br />

}<br />

A. Schmidt, W. Süß 9 19.10.2000<br />

A. Schmidt, W. Süß 10 19.10.2000


Problemorientierte Programmiersprachen - Java I SS 2000<br />

Mehrdimensionale <strong>Arrays</strong> (Felder)<br />

byte ZweiDimArray[][];<br />

• Deklaration der Variablen ZweiDimArray mit Typ byte[][] (Array-von-<br />

Array-aus-byte).<br />

byte ZweiDimArray[][] = new Byte [256][];<br />

• Dynamische Bereitstellung eines <strong>Arrays</strong> mit 256 Elementen. Jedes Element<br />

dieses neuen <strong>Arrays</strong> ist vom Typ byte[] - einem eindimensionalen<br />

Array von bytes.<br />

byte ZweiDimArray[][] = new Byte [256][16];<br />

• Dynamische Bereitstellung eines 256Bytes-<strong>Arrays</strong>, von denen jeder 16<br />

Bytes aufnehmen kann. Gleichzeitig wird eine Referenz dieser 16 byte-<br />

<strong>Arrays</strong> in den 256 Elementen des „äußeren“ <strong>Arrays</strong> gespeichert. Die 16<br />

Bytes dieser 256 <strong>Arrays</strong> werden mit dem Standardwert 0 initialisiert.<br />

Nicht Erlaubt:<br />

byte ZweiDimArray[][] = new Byte [][16];<br />

Erlaubt:<br />

• Beliebige Dimension eines mehrdimensionalen <strong>Arrays</strong>:<br />

int[][][][][] FuenfDim=new int[3][4][5][6][7];<br />

• Nicht rechteckige Form von <strong>Arrays</strong>:<br />

int ZweiDim[][]= {{1,2},{3,4,5}, {5,6,7,8}};<br />

Beispiel: (Generieren einer Matrix und Ausgabe der Matrix)<br />

public class Matrix {<br />

public static void main(String[] args) {<br />

int matrix[][]=new int[4][5];<br />

//Ausgabe der Matrix<br />

for(int i = 0; i < matrix.length; i++) {<br />

for (int j=0;j


Problemorientierte Programmiersprachen - Java I SS 2000<br />

Beispiel: (Nicht rechteckige Form eines mehrdimensionalen <strong>Arrays</strong>)<br />

public class Array2 {<br />

public static void main(String[] args) {<br />

short triangle[][]=new short[10][];<br />

for (int i=0; i < triangle.length;i++) {<br />

triangle[i] = new short[i+1];<br />

for (int j=0;j

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!