Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
schule:klassen:2017:10b:kap8 [2018/01/04 12:50] – martin | schule:klassen:2017:10b:kap8 [2021/12/29 10:40] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Kapitel 8: Felder (Arrays) ====== | ||
+ | <WRAP center round info 60%> | ||
+ | **Merke** \\ | ||
+ | Ein Feld (englisch: array) ist ein Speicherbereich, | ||
+ | </ | ||
+ | {{ : | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Vorsicht: Felder werden von 0 an durchnummeriert. Bei obigem Beispiel enthält das Feld also die vier Variablen '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | public ArrayTest(){ | ||
+ | |||
+ | // Array deklarieren und Speicherplatz reservieren: | ||
+ | int[] noten = new int[6]; | ||
+ | |||
+ | // Werte der Elemente im Array setzen: | ||
+ | noten[0] = 1; | ||
+ | noten[1] = 2; | ||
+ | noten[2] = 4; | ||
+ | noten[3] = 3; | ||
+ | noten[4] = 6; | ||
+ | noten[5] = 5; | ||
+ | |||
+ | // Ausgabe des 3. Elements: | ||
+ | System.out.println(noten[2]); | ||
+ | |||
+ | // Ändern des 3. Elements | ||
+ | noten[2] = 3; | ||
+ | |||
+ | System.out.println(noten[2]); | ||
+ | |||
+ | // Ausgabe der Anzahl der Elemente: | ||
+ | System.out.println(noten.length); | ||
+ | |||
+ | // Berechne den Mittelwert aller Noten | ||
+ | int i = 0; | ||
+ | double summe = 0; | ||
+ | |||
+ | while(i < noten.length){ | ||
+ | |||
+ | summe = summe + noten[i]; | ||
+ | |||
+ | i++; | ||
+ | } | ||
+ | |||
+ | double mittelwert = summe/ | ||
+ | |||
+ | System.out.println(" | ||
+ | |||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | =====Aufgaben===== | ||
+ | - Lagere die Mittelwertberechnung in eine eigene Methode aus! | ||
+ | - Schreibe eine Methode, die die beste Note im Feld '' | ||
+ | ===== Lösung ===== | ||
+ | <code java> | ||
+ | private double mittelwert(int[] notenliste){ | ||
+ | int i = 0; | ||
+ | double summe = 0; | ||
+ | |||
+ | while(i < notenliste.length){ | ||
+ | summe = summe + notenliste[i]; | ||
+ | i++; | ||
+ | } | ||
+ | |||
+ | return summe/ | ||
+ | |||
+ | } | ||
+ | |||
+ | private double besteNote(int[] notenliste){ | ||
+ | |||
+ | int beste = 6; | ||
+ | |||
+ | for(int i = 0; i < notenliste.length; | ||
+ | if(notenliste[i] < beste){ | ||
+ | beste = notenliste[i]; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return beste; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Anwendung: Einfache Particle Engine ===== | ||
+ | {{ : | ||
+ | |||
+ | Hier die Klasse für die Partikel: | ||
+ | < | ||
+ | import sge.Kreis; | ||
+ | |||
+ | public class Particle { | ||
+ | |||
+ | private Kreis k; | ||
+ | private double vx, vy; // Geschwindigkeit in x- bzw. y-Richtung | ||
+ | |||
+ | public Particle(double x, double y, double vx, double vy){ | ||
+ | this.vx = vx; | ||
+ | this.vy = vy; | ||
+ | |||
+ | k = new Kreis(x, y, 7); | ||
+ | k.setFuellfarbe(" | ||
+ | k.setFuellfarbeAlpha(200); | ||
+ | } | ||
+ | |||
+ | public void zeitschritt(){ | ||
+ | k.verschieben(vx, | ||
+ | vy += 0.04; | ||
+ | if(vy > 0){ | ||
+ | k.setFuellfarbe(" | ||
+ | k.setFuellfarbeAlpha(128); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | public boolean istAußerhalbDesFensters(){ | ||
+ | return k.istAußerhalbDesFensters(); | ||
+ | } | ||
+ | |||
+ | public void vernichten() { | ||
+ | k.vernichten(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Die Partikel werden von der Klasse '' | ||
+ | |||
+ | <code java> | ||
+ | import sge.Fenster; | ||
+ | import sge.Timer; | ||
+ | import sge.TimerListener; | ||
+ | |||
+ | public class ParticleEmitter implements TimerListener { | ||
+ | |||
+ | // Wir speichern alle Partikel in einem Feld, damit wir | ||
+ | // später alle 10 ms die Positionen aller Partikel neu berechnen | ||
+ | // und überflüssige Partikel entfernen können: | ||
+ | private Particle[] particles = new Particle[200]; | ||
+ | | ||
+ | // Objektreferenz aufs Fenster, damit wir dessen Größe ermitteln können | ||
+ | private Fenster f; | ||
+ | |||
+ | public ParticleEmitter(){ | ||
+ | |||
+ | f = new Fenster(); // Fenster öffnen | ||
+ | |||
+ | // Der Timer sorgt dafür, dass timerSignalVerarbeiten alle 10 ms aufgerufen wird: | ||
+ | Timer timer = new Timer(this, 10); | ||
+ | timer.start(); | ||
+ | |||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void timerSignalVerarbeiten() { | ||
+ | | ||
+ | // Falls es im Feld particles eine Leerstelle (Wert == null) gibt, erzeuge einen neuen | ||
+ | // Partikel und lege seine Objektreferenz dort ab. | ||
+ | for(int i = 0; i < particles.length; | ||
+ | if(particles[i] == null){ | ||
+ | Particle particle = new Particle(f.getBreite()/ | ||
+ | Math.random()*10.0 - 5, -5 - Math.random() * 5); | ||
+ | particles[i] = particle; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | // Für alle Partikel im Feld particles: Ändere die Position und | ||
+ | // entferne den Partikel, falls er sich aus dem Fenster herausbewegt hat: | ||
+ | for(int i = 0; i < particles.length; | ||
+ | |||
+ | if(particles[i] != null) { | ||
+ | | ||
+ | particles[i].zeitschritt(); | ||
+ | | ||
+ | if(particles[i].istAußerhalbDesFensters()){ | ||
+ | particles[i].vernichten(); | ||
+ | particles[i] = null; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Hier noch der Code der Starterklasse: | ||
+ | < | ||
+ | public class ParticleEmitterStarter { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | new ParticleEmitter(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||