klassen2:constructors:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
klassen2:constructors:start [2020/07/08 17:53] – [Aufgabe: Die Klasse Bruch] Martin Pabst | klassen2:constructors:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Konstruktoren ====== | ====== Konstruktoren ====== | ||
+ | |||
+ | {{youtube> | ||
+ | |||
Wir haben inzwischen schon viele Objekte instanziert, | Wir haben inzwischen schon viele Objekte instanziert, | ||
< | < | ||
Zeile 18: | Zeile 21: | ||
Wir lernen in diesem Kapitel, wie wir die Konstruktoren unserer Klassen selbst schreiben können. | Wir lernen in diesem Kapitel, wie wir die Konstruktoren unserer Klassen selbst schreiben können. | ||
- | ===== Beispiel 1: Buntstift | + | ===== Beispiel 1: Würfel |
+ | Programmiere eine Klasse '' | ||
+ | <code MyJava> | ||
+ | Würfel w6 = new Würfel(6); | ||
+ | Würfel w20 = new Würfel(20); | ||
+ | println(w6.würfle()); | ||
+ | println(w20.würfle()); | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Würfel w6 = new Würfel(6); | ||
+ | Würfel w20 = new Würfel(20); | ||
+ | println(w6.würfle()); | ||
+ | println(w20.würfle()); | ||
+ | |||
+ | class Würfel{ | ||
+ | int seitenzahl; | ||
+ | |||
+ | // Das ist die Konstruktor-Methode ("der Konstruktor" | ||
+ | // dass sie den Bezeichner der Klasse (" | ||
+ | | ||
+ | seitenzahl = s; | ||
+ | } | ||
+ | |||
+ | int würfle(){ | ||
+ | return Math.floor(Math.random()*seitenzahl) + 1; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Beispiel 2: Buntstift ===== | ||
+ | Schau' Dir das folgende Beispielprogramm an und überlege Dir, an welchen Stellen des Programms der Konstruktor '' | ||
< | < | ||
Zeile 28: | Zeile 69: | ||
Buntstift rotstift = new Buntstift(Color.red); | Buntstift rotstift = new Buntstift(Color.red); | ||
rotstift.schreibe(" | rotstift.schreibe(" | ||
+ | |||
Buntstift grünstift = new Buntstift(Color.lime); | Buntstift grünstift = new Buntstift(Color.lime); | ||
grünstift.schreibe(" | grünstift.schreibe(" | ||
Zeile 36: | Zeile 78: | ||
Color farbe; | Color farbe; | ||
- | public | + | // Das ist die Konstruktor-Methode ("der Konstruktor" |
+ | // dass sie den Bezeichner der Klasse (" | ||
+ | Buntstift(Color farbe1) { | ||
farbe = farbe1; | farbe = farbe1; | ||
} | } | ||
- | public | + | void schreibe(String text) { |
println(text, | println(text, | ||
} | } | ||
Zeile 48: | Zeile 92: | ||
</ | </ | ||
</ | </ | ||
- | |||
===== Aufgabe ===== | ===== Aufgabe ===== | ||
Führe das Programm Schrittweise mit "step into ({{: | Führe das Programm Schrittweise mit "step into ({{: | ||
Zeile 136: | Zeile 179: | ||
</ | </ | ||
- | ===== Beispiel | + | ===== Beispiel |
+ | Die Klasse '' | ||
< | < | ||
Zeile 142: | Zeile 187: | ||
<script type=" | <script type=" | ||
- | PolynomZweitenGrades p = new PolynomZweitenGrades(1, | + | PolynomZweitenGrades p = new PolynomZweitenGrades(1, |
println(" | println(" | ||
println(" | println(" | ||
Zeile 165: | Zeile 210: | ||
</ | </ | ||
- | Die Klasse '' | ||
- | ===== Aufgabe: Die Klasse Bruch ===== | + | ===== Aufgabe |
- | Ein Objekt der Klasse | + | Im vorhergehenden Kapitel haben wir eine [[[klassen2: |
- | < | + | < |
- | Bruch b1 = new Bruch(4, 3); | + | Bruch b1 = new Bruch(); |
- | Bruch b2 = new Bruch(1, 2); | + | b1.zähler = 3; |
- | b1.ausgabeUnecht(); | + | b1.nenner = 4; |
- | b1.ausgabeEcht(); | + | |
- | b1.mal(b2); | + | |
- | b1.ausgabeUnecht(); | + | |
</ | </ | ||
- | Dieses Programm soll folgendes ausgeben: | + | einfach schreiben kann |
- | < | + | < |
- | 4/3 | + | Bruch b1 = new Bruch(3,4); |
- | 1 1/3 | + | |
- | 4/6 | + | |
</ | </ | ||
- | |||
- | <WRAP center round alert 60%> | ||
- | An meine Schüler/ | ||
- | Die Tipps im Eingabebereich unten könnt Ihr Euch aber natürlich ansehen! | ||
- | </ | ||
- | |||
- | <WRAP center round todo 60%> | ||
- | Für die Guten und Interessierten unter Euch: \\ | ||
- | Ihr könntet die Klasse '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | </ | ||
- | |||
< | < | ||
Zeile 203: | Zeile 228: | ||
<script type=" | <script type=" | ||
- | // Füge die Klasse Bruch unterhalb ein, so dass die Fehler in den | ||
- | // folgenden Zeilen verschwinden. | ||
Bruch b1 = new Bruch(4, 3); | Bruch b1 = new Bruch(4, 3); | ||
Zeile 215: | Zeile 238: | ||
class Bruch { | class Bruch { | ||
+ | int z; | ||
+ | int n; | ||
+ | |||
+ | // Hier fehlt der Konstruktor! | ||
+ | |||
+ | | ||
+ | println(z + "/" | ||
+ | } | ||
+ | |||
+ | | ||
+ | |||
+ | int a1 = z; | ||
+ | |||
+ | if(Math.abs(z) >= n) { | ||
+ | int ganzerAnteil = z / n; | ||
+ | a1 = z - ganzerAnteil * n; | ||
+ | if(a1 < 0) { | ||
+ | a1 = -a1; | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | | ||
+ | println(a1 + "/" | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | z = z * b2.z; | ||
+ | n = n * b2.n; | ||
+ | |||
+ | kürze(); | ||
+ | |||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | z = z * b2.n; | ||
+ | n = n * b2.z; | ||
+ | |||
+ | kürze(); | ||
+ | |||
+ | } | ||
+ | |||
+ | | ||
+ | |||
+ | // a/b + c/d = (a*d)/(b*d) + (c*b)/(d*b) = (a*d + c*b)/(b*d) | ||
+ | |||
+ | z =(z * b2.n + b2.z * n); | ||
+ | n = n * b2.n; | ||
+ | |||
+ | kürze(); | ||
+ | |||
+ | } | ||
+ | |||
+ | | ||
+ | |||
+ | // a/b - c/d = (a*d)/(b*d) - (c*b)/(d*b) = (a*d - c*b)/(b*d) | ||
+ | |||
+ | z =(z * b2.n - b2.z * n); | ||
+ | n = n * b2.n; | ||
+ | |||
+ | kürze(); | ||
+ | |||
+ | } | ||
+ | |||
+ | | ||
+ | | ||
+ | for(int i = 2; i <= Math.sqrt(Math.abs(z)); | ||
+ | |||
+ | if(z % i == 0 && n % i == 0) { | ||
+ | z = z / i; | ||
+ | n = n / i; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
} | } | ||
+ | |||
</ | </ | ||
- | <script type="text/plain" | + | |
- | ## Tipp 1 | + | </div> |
- | Die Klasse Bruch benötigt zwei Attribute ``a`` und ``b`` vom Typ ``int`` um Zähler bzw. Nenner zu speichern. Zudem benötigt sie einen Konstruktor, mit dem die Werte von ``a`` und ``b`` gesetzt werden: | + | </ |
- | ``` | + | [[.loesung: |
- | class Bruch { | + | |
- | int a; | + | ===== Aufgabe 2: Die Klasse Tier ===== |
- | | + | Füge der [[klassen2: |
+ | <code myJava> | ||
+ | Tier p = new Tier(" | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Tier p = new Tier(" | ||
+ | p.vorstellen(); | ||
+ | |||
+ | class Tier { | ||
+ | String art; | ||
+ | | ||
+ | | ||
+ | |||
+ | // Hier fehlt der Konstruktor! | ||
+ | |||
+ | void vorstellen(){ | ||
+ | println(" | ||
- | | ||
- | this.a = a; | ||
- | this.b = b; | ||
} | } | ||
+ | |||
} | } | ||
- | ``` | ||
- | </ | ||
- | <script type=" | ||
- | ## Tipp 2 | ||
- | Wisst Ihr noch, wie man eine Methode deklariert? Die Methode ``mal`` nimmmt als Parameter ein ``Bruch``-Objekt entgegen und gibt nichts (``void``) zurück. Sie verändert nur den Zustand des Bruches. Beachtet: innerhalb der Methode ist ``a`` der Zähler des Bruch-Objekts, | ||
- | ``` | ||
- | class Bruch { | ||
- | | ||
- | // Hier weiterprogrammieren! | ||
- | } | ||
- | } | ||
- | ``` | ||
</ | </ | ||
+ | |||
</ | </ | ||
</ | </ | ||
- | [[.loesung:aufgabe1:start|Hier geht's zur Lösung!]] | + | [[.loesung:aufgabe2:start|Hier geht's zur Lösung!]] |
klassen2/constructors/start.1594223611.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)