Informatik -- Lehrveranstaltung vom 29.05.2024
(EN google-translate)
(PL google-translate)
Themen
|
Geschichtliches zu Java

Einfache Datentypen in Java

Arrays in Java
int[] arr; //nur Deklaration, noch kein Speicher reserviert. int[] arr=new int[10]; //Definition, 10 Array-Elemente erzeugt und mit Null belegt. int[] arr={2,5,3,8,1}; //Definition, 5 Array-Elemente mit speziellen Werten. new int[] {1,2,3}; //Array als anonymes Objekt: es hat keine Referenz, unter der es angesprochen werden kann. //Macht Sinn bei unmittelbarer Übergabe an eine Funktion. int[][] mat; //Array von einem Integer-Array deklariert. int[][] mat=new int[2][]; //Erste Dimension hat zwei Elemente, deren Speicherbereich aber noch nicht reserviert ist. mat[0] = new int[10]; //Erzeugen der Unter-Arrays. mat[1] = new int[] {1,2,3};
Code 0-1: Varianten zur Erzeugung.
public void setup() { int x = 10; println("Hallo"); int[] arr = new int[10]; for(int i=0;i<arr.length;i++) arr[i] = (i+1)*(i+1); for(int i=0;i<arr.length;i++) println("arr["+i+"]="+arr[i]); } public void draw() { }
Code 0-2: Beispiele zum Exportieren eines Sketches als Java-Code und Verwendung eindimensionaler Arrays.
int[][] mat; int[][] mat2 = {{1,2},{3,4}};//hier geht das ohne new int[][] mat3; public void setup() { mat = new int[2][2]; // mat2 = {{1,2},{3,4}}; mat3 = new int[][] {{1,2},{3,4}}; mat3 = new int[][] {{3,4},{5,5}}; mat[0][0]=1; mat[0][1]=2; mat[1][0]=3; mat[1][1]=4; /* |1 2| |3 4| */ int[][] mat4=new int[2][]; mat4[0] = new int[] {1,2,3,4,5}; mat4[1] = new int[] {4,5}; } public void draw() { }
Code 0-3: Beispiele zu zweidimensionalen Arrays aus dem Unterricht.
Übergabe von Arrays in Java und C/C++
|
public void show(String name, int[] x) { println("Array "+name+": "); for(int i=0;i<x.length;i++) println(name+"["+i+"]="+x[i]); x[0]=10000; name="huhu"; } public void setup() { String n="arr"; int[] arr = {1,2}; show(n,arr); show(n,arr); println("n="+n); } public void draw() { }
Code 0-4: Beispiel: name wird als "Call by Value" übergeben, x als "Call by Reference".
public void show(String name, int[] xx) { int[] x = xx.clone(); println("Array "+name+": "); for(int i=0;i<x.length;i++) println(name+"["+i+"]="+x[i]); x[0]=10000; name="huhu"; } public void setup() { String n="arr"; int[] arr = {1,2}; show(n,arr); show(n,arr); println("n="+n); } public void draw() { }
Code 0-5: Kopie eines Arrays in Funktion mit .clone() erzeugen, um Korrumpieren der Daten zu vermeiden.
#include <iostream> using namespace std; void show(const char name[], int x[], int anzahl) { cout<<"Array "<<name<<": "<<endl; for(int i=0;i<anzahl;i++) cout<<name<<"["<<i<<"]="<<x[i]<<endl; x[0]=10000; name="huhu"; } int main(void) { cout<<endl<<"Hello world!"<<endl<<endl; int arr[] = {2,4,8,16}; int anz = sizeof(arr)/sizeof(int); show("arr",arr,anz); show("arr",arr,anz); return 0; }
Code 0-6: Pendent in C/C++ zu obigem Java-Programm.
Polymorphismus
public void show(String name, int[] x) { println("Array "+name+": "); for(int i=0;i<x.length;i++) println(name+"["+i+"]="+x[i]); x[0]=10000; name="huhu"; } public void show(String name, int[] x, int koordx, int koordy) { String s = "Array "+name+": "; for(int i=0;i<x.length;i++) s+=name+"["+i+"]="+x[i]+" "; text(s,koordx,koordy); } public void setup() { String n="arr"; int[] arr = {1,2}; show(n,arr); show(n,arr); println("n="+n); size(640,480); fill(255,0,0); background(0); textSize(80); show(n,arr,100,100); } public void draw() { }
Code 0-7: Beispiel zu Polymorphismus: zwei unterschiedlich arbeitende show-Methoden.
|
Sichtbarkeit von Variablen und Überlagerung
{ int x=3; int z=9; //y hier nicht sichtbar { //x hier sichtbar! int y=4; int z=10; //Das z mit der Belegung 9 wurde hier durch die Neudefinition verborgen. } //y hier nicht sichtbar }
Code 0-8: Sichtbarkeit.
Räuber-Beute-Modell simulieren
$ \left[\begin{array}{cc}\dot B \\ \dot R\end{array}\right]=\left[\begin{array}{cc}B-0.01 \cdot B \cdot R \\ -R+0.01 \cdot B \cdot R\end{array}\right] $
Formel 0-1: Räuber-Beute-Modell mit konkreten Parametern.
Anfangsbedingungen werden gewählt zu: B0=100, R0=10 mit Teitschrittweite dt=0.01Jahre.
Integrator integrator; public void setup() { size(640,480); frameRate(50); integrator = new Integrator(new Modell()); } double x=1.0; double v=0.0; double dt=0.02; double[] y = new double[] {x,v}; public void draw() { background(255); double[] yneu = integrator.step(y,dt); fill(255,0,0); ellipse(width/2,height/2.0f+(float)yneu[0]*200.0f,50,50); y[0]=yneu[0]; y[1]=yneu[1]; }
Code 0-9: Hauptprogramm.
public class Modell { public double[] berechneSteigung(double[] y) { double x = y[0]; double v = y[1]; double steigung_x = v; double steigung_v = -x-0.3*v; double[] steigung = {steigung_x, steigung_v}; return steigung; } }
Code 0-10: Klasse Modell.
public class Integrator { Modell modell; public Integrator(Modell modell) { this.modell = modell; } public double[] step(double[] y, double dt) { double[] steigung = modell.berechneSteigung(y); double[] yneu = new double[steigung.length]; for(int i=0;i<yneu.length;i++) yneu[i] = y[i] + steigung[i]*dt; return yneu; } }
Code 0-11: Klasse Integrator.
