Informatik -- Lehrveranstaltung vom 29.05.2024
(EN google-translate)
(PL google-translate)
Themen
|
Geschichtliches zu Java
36_Java
Einfache Datentypen in Java
36_Java/01_GettingStarted
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.
Download des Processing-Projektes Schwinger101.zip.