<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://zumunterrichten.idea-sketch.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ernst+Schreier</id>
	<title>ZUM-Unterrichten - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://zumunterrichten.idea-sketch.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ernst+Schreier"/>
	<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/wiki/Spezial:Beitr%C3%A4ge/Ernst_Schreier"/>
	<updated>2026-05-15T08:17:30Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.15</generator>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/testbereich&amp;diff=110800</id>
		<title>Benutzer:Ernst Schreier/testbereich</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/testbereich&amp;diff=110800"/>
		<updated>2020-01-09T00:37:27Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== gelöschte Kapitel ==&lt;br /&gt;
&lt;br /&gt;
=== Versteckspiel ===&lt;br /&gt;
{{Idee|&lt;br /&gt;
Mit Hilfe des folgenden Beispiels lässt sich die while-Schleife einführen. Besser ist allerdings, wenn man es mit einer [[#for-Schleife|for-Schleife]] realisiert. D.h. falls man es nutzt, sollte man dieses Beispiel vor der for-Schleife behandeln.&lt;br /&gt;
&lt;br /&gt;
;Versteckspiel: Als Suchender muss man zunächst bis 100 zählen, dann laut „Ich komme...“ rufen.  Erst dann darf man zum Suchen aufbrechen.&lt;br /&gt;
&lt;br /&gt;
Dieses simple Spiel ist ein einfacher Algorithmus:&lt;br /&gt;
 VERSTECKSPIELZÄHLUNG&lt;br /&gt;
 Die erste Zahl ist 1.&lt;br /&gt;
 Prüfe, ob die 100 erreicht wurde&lt;br /&gt;
 Wenn das noch nicht erfüllt ist, sage die Zahl und erhöhe die Zahl um eins.&lt;br /&gt;
 Wenn doch, dann rufe „Ich komme“&lt;br /&gt;
&lt;br /&gt;
Mit while (engl. solange) lassen sich Programmabläufe abhängig von einer Bedingung wiederholen. Die Bedingung wird vor Ausführung der Anweisung abgefragt (&amp;quot;prechecked loop&amp;quot;,  &amp;quot;kopfgesteuerte Schleife&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Solange &amp;lt;Bedingung erfüllt&amp;gt; führe &amp;lt;Anweisung&amp;gt; aus.&lt;br /&gt;
;Java-Syntax:         &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   while (Bedingung) &lt;br /&gt;
   {&lt;br /&gt;
      Anweisungsblock (was soll wiederholt werden?)&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sähe das Verstecken-Beispiel als Methode der Klasse Verstecken aus. Der Computer schreibt die Zahlen von 1 bis zahl in die Konsole.&lt;br /&gt;
&lt;br /&gt;
;Hinweis: Wenn die oberen Zahlen nicht mehr zu sehen sind, liegt das an der Konsole, die nur begrenzt viele Zeilen zulässt. Das Problem kann man umgehen, indem man statt println ein print einsetzt. Dann wird nicht bei jeder Zahl eine neue Zeile begonnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Verstecken&lt;br /&gt;
{&lt;br /&gt;
      public void zaehleBisZahlundRufe(int zahl)&lt;br /&gt;
      {&lt;br /&gt;
        int x;                            // Eine Zählvariable x&lt;br /&gt;
        x=1;                              // Anfangswert für x&lt;br /&gt;
        while (x &amp;lt;= zahl) {   &lt;br /&gt;
            System.out.println (x);       // schreibe x auf die Konsole&lt;br /&gt;
            x++;                          // erhöhe x um 1&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println (&amp;quot;Ich komme...!&amp;quot;); &lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung| &lt;br /&gt;
# Analysieren Sie die Methode zaehleBisZahlundRufe (int zahl), indem Sie folgende Dinge zunächst durchdenken und dann testen:&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf 1 als zahl übergeben.&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf negative Zahlen eingeben.&lt;br /&gt;
#* Was verändert sich, wenn die Zeile mit x++ über der System.out Zeile steht?&lt;br /&gt;
#* Wie können Sie in Zweierschritten zählen?&lt;br /&gt;
#* Warum wird „Ich komme“ nur ein mal ausgegeben?&lt;br /&gt;
# Verändern Sie die Methode so, dass ein Coutntdown heruntergezählt wird.&lt;br /&gt;
# Lassen Sie neben zahl auch die Variable schwrittweite übergeben. Sie soll bestimmen, in wie großen Schritten heraufgezählt werden soll (z.B. Schrittwete 3 ergibt: 1, 4, 7, 10...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Turtle-Grafik|vorherlink=Java/Turtle-Grafik|&lt;br /&gt;
weiter=GUI|weiterlink=Java/GUI|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel eignet sich, um eine verschachtelte [[Java/Algorithmik#Bedingte Anweisung|if..else-Verzweigung]] einzuführen. &amp;lt;!---Die folgende Klasse ist das Endergebnis der beim Bild­schirmfilm vorgestellten Klasse, die die pq-Formel be­rechnet.---&amp;gt;   Neben   „if..else“   benötigen   Sie   Kenntnisse   im Umgang mit [[Java/Erste Schritte#Konsolenausgabe|System.out.println]] und der Klasse Math, die in Java standardmäßig vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Die Klasse &#039;&#039;&#039;Math&#039;&#039;&#039; ist das Matheobjekt mit allen Operationen für einfache numerische Berech­nungen.(...) Der Ergebnistyp fast aller Operationen ist &amp;lt;code&amp;gt;double&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sqrt&amp;lt;/code&amp;gt;: Wurzelziehen &lt;br /&gt;
* &amp;lt;code&amp;gt;pow&amp;lt;/code&amp;gt;: Potenzen&lt;br /&gt;
&lt;br /&gt;
 double x = Math.sqrt( 2 ); doulbe y = Math.pow( 2,10 );  // 2^10 = 1024&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Formelberechner&lt;br /&gt;
{&lt;br /&gt;
public String berechnePQFormel(double pP, double pQ){&lt;br /&gt;
    double diskriminante;&lt;br /&gt;
    diskriminante = (pP/2) * (pP/2) - pQ;&lt;br /&gt;
    if (diskriminante &amp;gt;= 0) {&lt;br /&gt;
      double x1,x2;&lt;br /&gt;
      x1 = -(pP/2) + Math.sqrt (diskriminante);&lt;br /&gt;
      x2 = -(pP/2) - Math.sqrt (diskriminante);&lt;br /&gt;
      if (x1==x2){&lt;br /&gt;
        return &amp;quot;Das Ergebnis ist L={&amp;quot;+x2+&amp;quot;}&amp;quot;;    &lt;br /&gt;
      }&lt;br /&gt;
      else {&lt;br /&gt;
        return &amp;quot;Die Ergebnisse sind L={&amp;quot;+x1+&amp;quot;;&amp;quot;+x2+&amp;quot;}&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      return &amp;quot;Keine Lösung, die Diskriminate ist &amp;quot;+diskriminante;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Arbeitshinweise|&lt;br /&gt;
&amp;lt;!---Schauen Sie sich zunächst den Bildschirmfilm zu dieser Klasse an.---&amp;gt;Beschreiben Sie, weshalb bei &amp;lt;code&amp;gt;berechnePQFormel()&amp;lt;/code&amp;gt; innerhalb des ersten if-Anweisungs­blocks noch ein zweiter, verschachtelter if-Block auftritt. Erläutern Sie dabei die Klammersetzung der geschweiften Klammern.&lt;br /&gt;
# &amp;lt;code&amp;gt;bestimmeBetrag()&amp;lt;/code&amp;gt; gibt den Betrag einer Zahl zurück (eine negative Zahl wird zu einer positiven. Analysieren Sie die Funktionsweise dieser Methode.&lt;br /&gt;
# Vergleichen Sie die beiden Varianten der quadrieren-Methoden. Beide führen zu demselben Ergebnis. Welche würden Sie bevorzugen?&lt;br /&gt;
# Implementieren Sie eine Methode &amp;lt;code&amp;gt;zieheWurzel(double pZahl)&amp;lt;/code&amp;gt;, die entweder die Wurzelvon &amp;lt;code&amp;gt;pZahl&amp;lt;/code&amp;gt; zurückgibt oder -1, falls &amp;lt;code&amp;gt;pZahl&amp;lt;/code&amp;gt; negativ ist.(Hinweis: -1 ist natürlich mathematisch nicht richtig, aber so müssen Sie die Zahl, die Sie zurückgeben, nicht in einen String umwandeln.)}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Turtle-Grafik|vorherlink=Java/Turtle-Grafik|&lt;br /&gt;
weiter=GUI|weiterlink=Java/GUI|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== verbesserte Version ==&lt;br /&gt;
Hallo zusammen,&lt;br /&gt;
&lt;br /&gt;
ich habe selbst ein solches Beispiel gebraucht und das aktive etwas umgebaut (Trennung von Berechnung und Texterstellung, Verwendung von StringBuilder zur Erstellung der Ergebnistexte). Die verschachtelte if Bedingung ist nun in der Funktion ergebnisText(...). Sieht noch jemand einen Fehler?&lt;br /&gt;
Danke und Gruss&lt;br /&gt;
--[[Benutzer:Axel g|Axel Gruenhagen]] 10:55, 30. Aug. 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class FormelberechnerNeu {&lt;br /&gt;
&lt;br /&gt;
    public String berechnePQFormel(double pP, double pQ) {&lt;br /&gt;
        double pPhalbe = pP / 2;        &lt;br /&gt;
        double diskriminante = Math.pow(pPhalbe,2) - pQ;&lt;br /&gt;
        double x1 = 0;&lt;br /&gt;
        double x2 = 0;&lt;br /&gt;
        if (diskriminante &amp;gt;= 0) {&lt;br /&gt;
            double sqrtDiskriminante = Math.sqrt(diskriminante);&lt;br /&gt;
            x1 = -(pPhalbe) + sqrtDiskriminante;&lt;br /&gt;
            x2 = -(pPhalbe) - sqrtDiskriminante;&lt;br /&gt;
        }&lt;br /&gt;
        return ergebnisText(x1, x2, diskriminante);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private String ergebnisText(double x1, double x2, double diskriminante) {&lt;br /&gt;
        StringBuilder ergebnisText = new StringBuilder();&lt;br /&gt;
&lt;br /&gt;
        if (diskriminante &amp;gt;= 0) {&lt;br /&gt;
            if (x1 == x2) {&lt;br /&gt;
                ergebnisText.append(&amp;quot;Das Ergebnis ist L={&amp;quot;);&lt;br /&gt;
                ergebnisText.append(x2);                &lt;br /&gt;
&lt;br /&gt;
            } else {&lt;br /&gt;
                ergebnisText.append(&amp;quot;Die Ergebnisse sind L={&amp;quot;);&lt;br /&gt;
                ergebnisText.append(x1);&lt;br /&gt;
                ergebnisText.append(&amp;quot;;&amp;quot;);&lt;br /&gt;
                ergebnisText.append(x2);&lt;br /&gt;
            }&lt;br /&gt;
            ergebnisText.append(&amp;quot;}&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
            ergebnisText.append(&amp;quot;Keine Lösung, die Diskriminante ist &amp;quot;);&lt;br /&gt;
            ergebnisText.append(diskriminante);&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        return ergebnisText.toString();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[PQ-Formel]]&lt;br /&gt;
* Mathematischer Hintergrund: [[Quadratische Funktionen]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Quadratische Funktionen]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110799</id>
		<title>Benutzer:Ernst Schreier</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110799"/>
		<updated>2020-01-09T00:12:48Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{webmo staff&lt;br /&gt;
|username=Ernst Schreier&lt;br /&gt;
|vorname=Ernst&lt;br /&gt;
|nachname=Schreier&lt;br /&gt;
|ueber_mich=* Ich bin Lehrer für Mathe, Physik, Info &amp;amp; NwT am Droste-Hülshoff-Gymnasium (https://www.dhg-freiburg.de),&lt;br /&gt;
* dort für das Unterrichtsnetz zuständig und deshalb bekennendes Mitglied bei https://www.linuxmuster.net!&lt;br /&gt;
== Eigene Projekte ==&lt;br /&gt;
Überarbeitung des [[https://unterrichten.zum.de/wiki/Java Lernpfads Java]]&lt;br /&gt;
=== Testbereich ===&lt;br /&gt;
[[/testbereich/]]&lt;br /&gt;
=== Formatierungen ===&lt;br /&gt;
[[/Formatierungen/]]&lt;br /&gt;
|wiki db id=107&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110798</id>
		<title>Benutzer:Ernst Schreier/Formatierungen</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110798"/>
		<updated>2020-01-08T23:55:59Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Header/Footer als Umblätter-Vorlage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Formatierungen ==&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Thema vorher|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Thema danach|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Zur Übersicht|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Thema vorher|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Thema danach|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Zur Übersicht|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Grafiken ===&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|left|200px]]&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|center|200px]]&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|left|200px]]&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|center|200px]]&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strukturierungsboxen ===&lt;br /&gt;
{{Aufgabe|Aufgabe ohne Box ohne Absatz}}&lt;br /&gt;
{{Box|Merke (Definition)|Box:Merksatz|Merksatz}}&lt;br /&gt;
{{Box|Zusammenfassung/Merksatz|Box:Zusammenfassung|Hervorhebung2}}&lt;br /&gt;
{{Box|Idee|Box:Unterrichtsidee|Unterrichtsidee}}&lt;br /&gt;
{{Box|Info|Box:Info|Info}}&lt;br /&gt;
{{Box|Frage|Box:Frage|Frage}}&lt;br /&gt;
mehr gibt&#039;s hier: [[Hilfe:Box]]&lt;br /&gt;
&lt;br /&gt;
=== Java-Quellcode ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Wikitable ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Methodenkopf!!Übergabetyp!!Ergebnistyp&lt;br /&gt;
|-&lt;br /&gt;
|public void horizontalBewegen (int entfernung)|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void loeschen()|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void groesseAendern(int Hoehe, int Breite)|| ||&lt;br /&gt;
|}&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110797</id>
		<title>Benutzer:Ernst Schreier/Formatierungen</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110797"/>
		<updated>2020-01-08T23:52:13Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Grafiken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Formatierungen ==&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
=== Grafiken ===&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|left|200px]]&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|center|200px]]&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|left|200px]]&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|center|200px]]&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strukturierungsboxen ===&lt;br /&gt;
{{Aufgabe|Aufgabe ohne Box ohne Absatz}}&lt;br /&gt;
{{Box|Merke (Definition)|Box:Merksatz|Merksatz}}&lt;br /&gt;
{{Box|Zusammenfassung/Merksatz|Box:Zusammenfassung|Hervorhebung2}}&lt;br /&gt;
{{Box|Idee|Box:Unterrichtsidee|Unterrichtsidee}}&lt;br /&gt;
{{Box|Info|Box:Info|Info}}&lt;br /&gt;
{{Box|Frage|Box:Frage|Frage}}&lt;br /&gt;
mehr gibt&#039;s hier: [[Hilfe:Box]]&lt;br /&gt;
&lt;br /&gt;
=== Java-Quellcode ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Wikitable ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Methodenkopf!!Übergabetyp!!Ergebnistyp&lt;br /&gt;
|-&lt;br /&gt;
|public void horizontalBewegen (int entfernung)|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void loeschen()|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void groesseAendern(int Hoehe, int Breite)|| ||&lt;br /&gt;
|}&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110796</id>
		<title>Benutzer:Ernst Schreier/Formatierungen</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110796"/>
		<updated>2020-01-08T23:50:43Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Grafiken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Formatierungen ==&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
=== Grafiken ===&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strukturierungsboxen ===&lt;br /&gt;
{{Aufgabe|Aufgabe ohne Box ohne Absatz}}&lt;br /&gt;
{{Box|Merke (Definition)|Box:Merksatz|Merksatz}}&lt;br /&gt;
{{Box|Zusammenfassung/Merksatz|Box:Zusammenfassung|Hervorhebung2}}&lt;br /&gt;
{{Box|Idee|Box:Unterrichtsidee|Unterrichtsidee}}&lt;br /&gt;
{{Box|Info|Box:Info|Info}}&lt;br /&gt;
{{Box|Frage|Box:Frage|Frage}}&lt;br /&gt;
mehr gibt&#039;s hier: [[Hilfe:Box]]&lt;br /&gt;
&lt;br /&gt;
=== Java-Quellcode ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Wikitable ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Methodenkopf!!Übergabetyp!!Ergebnistyp&lt;br /&gt;
|-&lt;br /&gt;
|public void horizontalBewegen (int entfernung)|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void loeschen()|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void groesseAendern(int Hoehe, int Breite)|| ||&lt;br /&gt;
|}&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110795</id>
		<title>Benutzer:Ernst Schreier/Formatierungen</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110795"/>
		<updated>2020-01-08T23:49:40Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Strukturierungsboxen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Formatierungen ==&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
=== Grafiken ===&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Strukturierungsboxen ===&lt;br /&gt;
{{Aufgabe|Aufgabe ohne Box ohne Absatz}}&lt;br /&gt;
{{Box|Merke (Definition)|Box:Merksatz|Merksatz}}&lt;br /&gt;
{{Box|Zusammenfassung/Merksatz|Box:Zusammenfassung|Hervorhebung2}}&lt;br /&gt;
{{Box|Idee|Box:Unterrichtsidee|Unterrichtsidee}}&lt;br /&gt;
{{Box|Info|Box:Info|Info}}&lt;br /&gt;
{{Box|Frage|Box:Frage|Frage}}&lt;br /&gt;
mehr gibt&#039;s hier: [[Hilfe:Box]]&lt;br /&gt;
&lt;br /&gt;
=== Java-Quellcode ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Wikitable ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Methodenkopf!!Übergabetyp!!Ergebnistyp&lt;br /&gt;
|-&lt;br /&gt;
|public void horizontalBewegen (int entfernung)|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void loeschen()|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void groesseAendern(int Hoehe, int Breite)|| ||&lt;br /&gt;
|}&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110794</id>
		<title>Benutzer:Ernst Schreier/Formatierungen</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110794"/>
		<updated>2020-01-08T23:42:28Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Strukturierungsboxen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Formatierungen ==&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
=== Grafiken ===&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Strukturierungsboxen ===&lt;br /&gt;
{{Übung|Übung ohne Box und Absatz danach}}&lt;br /&gt;
{{Aufgabe|Aufgabe ohne Box ohne Absatz}}&lt;br /&gt;
{{Definition|Definition ohne Box und Absatz danach}}&lt;br /&gt;
{{Box|Zusammenfassung/Merksatz|Box:Zusammenfassung|Hervorhebung2}}&lt;br /&gt;
{{Box|Idee|Box:Idee|Unterrichtsidee}}&lt;br /&gt;
{{Box|Info|Box:Info|Info}}&lt;br /&gt;
{{Box|Frage|Box:Frage|Frage}}&lt;br /&gt;
&lt;br /&gt;
=== Java-Quellcode ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Wikitable ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Methodenkopf!!Übergabetyp!!Ergebnistyp&lt;br /&gt;
|-&lt;br /&gt;
|public void horizontalBewegen (int entfernung)|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void loeschen()|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void groesseAendern(int Hoehe, int Breite)|| ||&lt;br /&gt;
|}&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110793</id>
		<title>Benutzer:Ernst Schreier/Formatierungen</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/Formatierungen&amp;diff=110793"/>
		<updated>2020-01-08T23:41:31Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Strukturierungsboxen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Formatierungen ==&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
=== Grafiken ===&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]]&lt;br /&gt;
&lt;br /&gt;
=== Strukturierungsboxen ===&lt;br /&gt;
{{Übung|Übung ohne Box}}&lt;br /&gt;
{{Aufgabe|Aufgabe ohne Box}}&lt;br /&gt;
{{Definition|Definition ohne Box und Absatz danach}}&lt;br /&gt;
{{Box|Zusammenfassung/Merksatz|Box:Zusammenfassung|Hervorhebung2}}&lt;br /&gt;
{{Box|Idee|Box:Idee|Unterrichtsidee}}&lt;br /&gt;
{{Box|Info|Box:Info|Info}}&lt;br /&gt;
{{Box|Frage|Box:Frage|Frage}}&lt;br /&gt;
&lt;br /&gt;
=== Java-Quellcode ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Wikitable ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Methodenkopf!!Übergabetyp!!Ergebnistyp&lt;br /&gt;
|-&lt;br /&gt;
|public void horizontalBewegen (int entfernung)|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void loeschen()|| ||&lt;br /&gt;
|-&lt;br /&gt;
|public void groesseAendern(int Hoehe, int Breite)|| ||&lt;br /&gt;
|}&lt;br /&gt;
=== Header/Footer als Umblätter-Vorlage ===&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Installation|vorherlink=Java/Installation|&lt;br /&gt;
weiter=Einstieg in die OOP&amp;lt;br&amp;gt;(Figurenbeispiel)|weiterlink=Java/Einstieg in die OOP|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/testbereich&amp;diff=110792</id>
		<title>Benutzer:Ernst Schreier/testbereich</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/testbereich&amp;diff=110792"/>
		<updated>2020-01-08T19:47:46Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== gelöschte Kapitel ==&lt;br /&gt;
&lt;br /&gt;
=== Versteckspiel ===&lt;br /&gt;
{{Idee|&lt;br /&gt;
Mit Hilfe des folgenden Beispiels lässt sich die while-Schleife einführen. Besser ist allerdings, wenn man es mit einer [[#for-Schleife|for-Schleife]] realisiert. D.h. falls man es nutzt, sollte man dieses Beispiel vor der for-Schleife behandeln.&lt;br /&gt;
&lt;br /&gt;
;Versteckspiel: Als Suchender muss man zunächst bis 100 zählen, dann laut „Ich komme...“ rufen.  Erst dann darf man zum Suchen aufbrechen.&lt;br /&gt;
&lt;br /&gt;
Dieses simple Spiel ist ein einfacher Algorithmus:&lt;br /&gt;
 VERSTECKSPIELZÄHLUNG&lt;br /&gt;
 Die erste Zahl ist 1.&lt;br /&gt;
 Prüfe, ob die 100 erreicht wurde&lt;br /&gt;
 Wenn das noch nicht erfüllt ist, sage die Zahl und erhöhe die Zahl um eins.&lt;br /&gt;
 Wenn doch, dann rufe „Ich komme“&lt;br /&gt;
&lt;br /&gt;
Mit while (engl. solange) lassen sich Programmabläufe abhängig von einer Bedingung wiederholen. Die Bedingung wird vor Ausführung der Anweisung abgefragt (&amp;quot;prechecked loop&amp;quot;,  &amp;quot;kopfgesteuerte Schleife&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Solange &amp;lt;Bedingung erfüllt&amp;gt; führe &amp;lt;Anweisung&amp;gt; aus.&lt;br /&gt;
;Java-Syntax:         &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   while (Bedingung) &lt;br /&gt;
   {&lt;br /&gt;
      Anweisungsblock (was soll wiederholt werden?)&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sähe das Verstecken-Beispiel als Methode der Klasse Verstecken aus. Der Computer schreibt die Zahlen von 1 bis zahl in die Konsole.&lt;br /&gt;
&lt;br /&gt;
;Hinweis: Wenn die oberen Zahlen nicht mehr zu sehen sind, liegt das an der Konsole, die nur begrenzt viele Zeilen zulässt. Das Problem kann man umgehen, indem man statt println ein print einsetzt. Dann wird nicht bei jeder Zahl eine neue Zeile begonnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Verstecken&lt;br /&gt;
{&lt;br /&gt;
      public void zaehleBisZahlundRufe(int zahl)&lt;br /&gt;
      {&lt;br /&gt;
        int x;                            // Eine Zählvariable x&lt;br /&gt;
        x=1;                              // Anfangswert für x&lt;br /&gt;
        while (x &amp;lt;= zahl) {   &lt;br /&gt;
            System.out.println (x);       // schreibe x auf die Konsole&lt;br /&gt;
            x++;                          // erhöhe x um 1&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println (&amp;quot;Ich komme...!&amp;quot;); &lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung| &lt;br /&gt;
# Analysieren Sie die Methode zaehleBisZahlundRufe (int zahl), indem Sie folgende Dinge zunächst durchdenken und dann testen:&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf 1 als zahl übergeben.&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf negative Zahlen eingeben.&lt;br /&gt;
#* Was verändert sich, wenn die Zeile mit x++ über der System.out Zeile steht?&lt;br /&gt;
#* Wie können Sie in Zweierschritten zählen?&lt;br /&gt;
#* Warum wird „Ich komme“ nur ein mal ausgegeben?&lt;br /&gt;
# Verändern Sie die Methode so, dass ein Coutntdown heruntergezählt wird.&lt;br /&gt;
# Lassen Sie neben zahl auch die Variable schwrittweite übergeben. Sie soll bestimmen, in wie großen Schritten heraufgezählt werden soll (z.B. Schrittwete 3 ergibt: 1, 4, 7, 10...&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Turtle-Grafik&amp;diff=110791</id>
		<title>Java/Turtle-Grafik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Turtle-Grafik&amp;diff=110791"/>
		<updated>2020-01-08T19:41:45Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=if ... else mit PQ-Formel|weiterlink=Java/PQ-Formel|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Die folgenden Beispiele basieren auf der in Java geschriebenen [[Turtle-Grafik]]-Engine [http://studsemjuel.nw.lo-net2.de/if/basiskurs/Materialien/Libary.zip (Download)] von Alfred Hermes, die sich in [[BlueJ]] einbinden lässt (Werkzeuge &amp;gt; Einstellungen &amp;gt; Bibliotheken).&lt;br /&gt;
&lt;br /&gt;
==Elementare Methoden==&lt;br /&gt;
[[Bild:TurtleUML.png|right]]&lt;br /&gt;
* zumStart (x,y) - setzt die Turtle nach (x|y)&lt;br /&gt;
* vor (länge) - geht um „länge“-Punkte vorwärts&lt;br /&gt;
* drehe (winkel) - dreht bei positiven Zahlen rechts, bei negativen links herum.&lt;br /&gt;
* schreibe (text) - schreibt einen String text an die aktuelle Position&lt;br /&gt;
* hebeStift() - zeichnet nicht beim Bewegen&lt;br /&gt;
* senkeStift() - zeichnet beim Bewegen&lt;br /&gt;
* setzeFarbe(Turtle.rot) - Farben: .schwarz, .grün, .blau, .gelb, .rot, .grau, .hellgrau, .orange, .weiß;&lt;br /&gt;
&lt;br /&gt;
==Erstes Beispiel==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Figuren&lt;br /&gt;
{&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Turtle t;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Figuren() &lt;br /&gt;
    {&lt;br /&gt;
       double x,y;&lt;br /&gt;
       t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
       x = t.liesMaxX(); y = t.liesMaxX(); // Maximale x-und y-Werte&lt;br /&gt;
       t.zumStart(x/2,y/2); // Setzt die Anfangsposition auf die Mitte &lt;br /&gt;
       t.setzeFarbe(Turtle.blau); // legt Farbe fest &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void zeichneQuadrat(int pLänge){&lt;br /&gt;
        zeichneRechtenWinkel(pLänge); &lt;br /&gt;
        zeichneRechtenWinkel(pLänge);   &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichneRechtenWinkel(int pLänge) &lt;br /&gt;
    { &lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.drehe(90);&lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.drehe(90);&lt;br /&gt;
    }&lt;br /&gt;
    // ... hier weitere Methoden einfügen&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Tippen Sie die Klasse Figuren ab. &lt;br /&gt;
* Ergänzen Sie die Klasse Figuren um folgende Methoden:&lt;br /&gt;
** zeichneGrößerwerdendeQuadrate(...)&lt;br /&gt;
** zeichneRechteck(int pLänge, int pBreite)&lt;br /&gt;
** zeichneSchweizerFahne( )&lt;br /&gt;
** zeichneGleichseitigesDreieck(int pLänge)&lt;br /&gt;
** zeichne5Eck(int pLänge)&lt;br /&gt;
** zeichneStern (...)&lt;br /&gt;
** zeichneMittelquadrat(...)&lt;br /&gt;
** zeichneFünfeck(...)&lt;br /&gt;
&lt;br /&gt;
* Zeichnen Sie das Haus vom Nikolaus. Denken Sie daran, dass Sie für die Berechnung der Länge der Diagonalen und des Dachs den Satz den Pythagoras benutzen können. Hinweis: Befehl für Wurzel aus x: Math.sqrt(x)&lt;br /&gt;
&lt;br /&gt;
* Lassen Sie eine Uhr mit Zeigern zeichnen: zeichneUhr(int Stunden, int Minuten)&lt;br /&gt;
* Überprüfen Sie vor der Zeichnung, ob die Werte zulässig sind (Stunden 0-23, Minuten 0-59). &lt;br /&gt;
* Profis: Schauen Sie sich das Klassendiagramm der Klasse TestTurtle an . Es enthält alle Methoden, die benutzt werden können. Probieren Sie Methoden aus, die Ihnen praktisch vorkommen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Nach Einführung der for-Schleife==&lt;br /&gt;
===Zweites Beispiel: Ein Zahlenstrahl===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   public void zeichneZahlenstrahl (int pErsteZahl, int pLetzteZahl) {&lt;br /&gt;
        for (int i=pErsteZahl; i&amp;lt;=pLetzteZahl; i++) {&lt;br /&gt;
            t.vor(20);&lt;br /&gt;
            t.schreibe(&amp;quot;&amp;quot;+i); // Trick! Einfache Typumwandlung zu String&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Analysieren Sie die Methode zum n-Eck.&lt;br /&gt;
* Wie kann ich einen Kreis zeichnen?&lt;br /&gt;
* Lassen Sie eine „Perlenschnur“ zeichnen. Hinweis: t.fülleKreis(double radius)&lt;br /&gt;
* Lassen Sie ein „Standardkoordinatensystem“ zeichnen, das auf beiden Achsen von -5 bis 5 geht. Vergessen Sie die Achsenbeschriftung (x und y) und die Pfeilspitzen nicht.&lt;br /&gt;
* Lassen Sie mit Hilfe einer Schleife Muster wie die folgenden erstellen. Klären Sie dazu auch die Frage, wie man größer werdende Quadrate zeichnen lassen kann (siehe Quadratschnecke).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Eventsteuerung==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.*;&lt;br /&gt;
public class Figuren extends Turtle&lt;br /&gt;
{&lt;br /&gt;
(...)&lt;br /&gt;
    public void mouseClicked(java.awt.event.MouseEvent me){&lt;br /&gt;
        if (me.isMetaDown()) { t.drehe(10); } // Rechte Maustaste?&lt;br /&gt;
        else {&lt;br /&gt;
            if (me.getClickCount()==2) { // Doppelklick?&lt;br /&gt;
               t.drehe(180); // Falls Doppelklick&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
               t.vor(10); // Falls einfacher Mausklick&lt;br /&gt;
            }&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// Alternativ: &lt;br /&gt;
    public void mouseClicked(java.awt.event.MouseEvent me){&lt;br /&gt;
       	if (me.isMetaDown()) { // rechte Maustaste gedrückt?&lt;br /&gt;
		t.drehe(10);&lt;br /&gt;
	}&lt;br /&gt;
        	else {&lt;br /&gt;
		t.vor(10);&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Überlegen Sie sich Varianten zu diesen Malprogrammen.&lt;br /&gt;
* Realisieren Sie ein Hindernisrennen. Leider kann die Turtle nur schlecht abfragen, ob ein Hindernis gerammt wurde ({{wpde|Kollisionserkennung (Algorithmische Geometrie)|Kollisionserkennung}}). Das müssen Sie selbst realisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Threads==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Ergänzen Sie den Konstruktor von Figuren um folgende Zeilen:&lt;br /&gt;
    (...)&lt;br /&gt;
       t.zeige();// ab hier neu:&lt;br /&gt;
       TurtleThread turtleThread;&lt;br /&gt;
       turtleThread = new TurtleThread(t);&lt;br /&gt;
       turtleThread.start();&lt;br /&gt;
    }&lt;br /&gt;
Legen Sie eine neue Klasse TurtleThread an&lt;br /&gt;
&lt;br /&gt;
public class TurtleThread extends Thread&lt;br /&gt;
{&lt;br /&gt;
Turtle t;&lt;br /&gt;
&lt;br /&gt;
    public TurtleThread(Turtle pT)&lt;br /&gt;
    {&lt;br /&gt;
        t = pT;&lt;br /&gt;
    }&lt;br /&gt;
    public void run() {&lt;br /&gt;
      for(int i = 0; i &amp;lt; 30; i++) {&lt;br /&gt;
        try {&lt;br /&gt;
          t.vor(10);  &lt;br /&gt;
          sleep(1000);&lt;br /&gt;
        }&lt;br /&gt;
        catch(InterruptedException e) {        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
} // Ende von TurtleThread&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Realisieren Sie ein Hindernisrennspiel, bei dem der Benutzer mit der linken Maustaste nach links und der rechten nach rechts dreht. Vorwärts geht die Turtle automatisch.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Perlenkette==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Perlenkette&lt;br /&gt;
{&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Turtle t;&lt;br /&gt;
 &lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Perlenkette() &lt;br /&gt;
    {&lt;br /&gt;
       t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void zeichneLutscher(double pLänge, double pRadius){&lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.setzeFarbe(Turtle.gelb);&lt;br /&gt;
        t.fülleKreis(pRadius);&lt;br /&gt;
        t.setzeFarbe(Turtle.blau);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichnePerlenschnur(int pAnzahl) &lt;br /&gt;
    { &lt;br /&gt;
        t.zumStart(200,20); // Startposition oben mittig&lt;br /&gt;
        for (int k=1; k&amp;lt;=pAnzahl; k++) {&lt;br /&gt;
            t.drehe(360/(pAnzahl*2));&lt;br /&gt;
            zeichneLutscher(30, k*2);       &lt;br /&gt;
        }&lt;br /&gt;
        for (int k=pAnzahl-1; k&amp;gt;=1; k--) {&lt;br /&gt;
            t.drehe(360/(pAnzahl*2));&lt;br /&gt;
            zeichneLutscher(30, k*2);&lt;br /&gt;
        }&lt;br /&gt;
        t.drehe(360/(pAnzahl*2));&lt;br /&gt;
        t.vor(30);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Rudimentärer Funktionsplotter==&lt;br /&gt;
[[Bild:Fktplotterturtle.gif|thumb|Beispielfunktion y=(x*x*x*x-10*x*x+12);]]&lt;br /&gt;
Es folgt der Quelltext eines einfachen Funktionsplotters. &amp;lt;br&amp;gt;&lt;br /&gt;
Schade ist, dass Java keinen &amp;quot;eval&amp;quot; Befehl kennt, wie er z.B. in [[JavaScript]] vorliegt. Daher muss man hier die Funktion, die angezeigt werden soll, direkt im Quelltext angeben (es sei denn, man fügt einen Mathe-Parser hinzu).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Ein rudimentärer Funktionsplotter&lt;br /&gt;
&lt;br /&gt;
public class Figuren&lt;br /&gt;
{&lt;br /&gt;
// Eigenschaften&lt;br /&gt;
Turtle t;&lt;br /&gt;
&lt;br /&gt;
// Konstruktor&lt;br /&gt;
&lt;br /&gt;
public Figuren()&lt;br /&gt;
{&lt;br /&gt;
    double x,y;&lt;br /&gt;
    t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
    t.setzeFarbe(Turtle.blau); // legt Farbe fest&lt;br /&gt;
    t.zeige();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void zeichneKoordinatensystem(){&lt;br /&gt;
    double pLaenge=15;&lt;br /&gt;
    t.setzeFarbe(Turtle.blau);&lt;br /&gt;
    setzeTurtleInDieMitte();&lt;br /&gt;
    t.vor(-10*pLaenge);&lt;br /&gt;
    zeichneStrahl(-10,10,pLaenge);&lt;br /&gt;
    t.vor(10*pLaenge);&lt;br /&gt;
    t.drehe(-90);&lt;br /&gt;
    t.vor(-10*pLaenge);&lt;br /&gt;
    zeichneStrahl(-10,10,pLaenge);&lt;br /&gt;
    t.drehe(90);&lt;br /&gt;
    setzeTurtleInDieMitte();    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void zeichneFunktion(){&lt;br /&gt;
    t.setzeFarbe(Turtle.rot);&lt;br /&gt;
    double pLaenge=15;&lt;br /&gt;
    double y;&lt;br /&gt;
    boolean w=false;&lt;br /&gt;
    for (double x=-10;x&amp;lt;=10;x=x+0.1){&lt;br /&gt;
        y=(x*x-3);&lt;br /&gt;
        if (!w) {&lt;br /&gt;
            t.zumStart(x*pLaenge+t.liesMaxX()/2,-y*pLaenge+t.liesMaxX()/2);&lt;br /&gt;
            w=true;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
        t.geheNach(x*pLaenge+t.liesMaxX()/2,-y*pLaenge+t.liesMaxX()/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void setzeTurtleInDieMitte(){&lt;br /&gt;
    double x,y;&lt;br /&gt;
    x = t.liesMaxX(); y = t.liesMaxX(); // Maximale x-und y-Werte&lt;br /&gt;
    t.zumStart(x/2,y/2); // Setzt die Anfangsposition auf die Mitte&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void zeichneStrahl(int pSkalenMin, int pSkalenMax, double pLaenge){&lt;br /&gt;
    t.schreibe(&amp;quot;&amp;quot;+pSkalenMin);&lt;br /&gt;
    for (int i=pSkalenMin+1; i&amp;lt;=pSkalenMax; i++){&lt;br /&gt;
        t.vor(pLaenge);&lt;br /&gt;
        t.schreibe(&amp;quot;&amp;quot;+i); &lt;br /&gt;
    }&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    zeichnePfeil(20);&lt;br /&gt;
    t.vor(-pLaenge*(pSkalenMax-pSkalenMin+1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void zeichnePfeil(double pLaenge){&lt;br /&gt;
    t.drehe(-90);&lt;br /&gt;
    t.vor(pLaenge/2);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge/2);&lt;br /&gt;
    t.drehe(90);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verfolgende Schildkröten==&lt;br /&gt;
Eine Turtle verfolgt eine andere auf kürzestem Weg. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Zufallsturtle&lt;br /&gt;
{&lt;br /&gt;
// Eigenschaften&lt;br /&gt;
private Turtle t,q;&lt;br /&gt;
private int qx, qy;&lt;br /&gt;
&lt;br /&gt;
// Konstruktor&lt;br /&gt;
    public Zufallsturtle()&lt;br /&gt;
    {&lt;br /&gt;
        t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
        t.zeige();&lt;br /&gt;
        t.setzeFarbe(4);&lt;br /&gt;
        q=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;q&amp;quot; an.&lt;br /&gt;
        q.zeige(); // zufällige Startposition        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// Methoden&lt;br /&gt;
    public void starte(){ &lt;br /&gt;
        boolean ende=false;&lt;br /&gt;
        &lt;br /&gt;
        qy=gibZufallszahl(400);&lt;br /&gt;
        qy=gibZufallszahl(400);&lt;br /&gt;
        q.zumStart(qx,qy);&lt;br /&gt;
        &lt;br /&gt;
        while (!ende) {&lt;br /&gt;
            laufeZufaellig(2, 2, 50);&lt;br /&gt;
            verfolge(1);&lt;br /&gt;
            if (qx==(int) t.liesX()){&lt;br /&gt;
                if (qy==(int) t.liesY()){&lt;br /&gt;
                    ende=true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        t.schreibe(&amp;quot;Gefangen&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public void laufeZufaellig(int pSchrittweite, int pSchrittzahl, int pPause)&lt;br /&gt;
    {&lt;br /&gt;
       int zufallszahl;&lt;br /&gt;
       for (int k=1;k&amp;lt;=pSchrittzahl;k++) {&lt;br /&gt;
           zufallszahl=gibZufallszahl(3);&lt;br /&gt;
           if (zufallszahl==1) {&lt;br /&gt;
               t.vor(pSchrittweite);&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                if (zufallszahl==2) {&lt;br /&gt;
                    t.drehe(10);&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    t.drehe(-5);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            t.ruhe(pPause);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void verfolge(int pSchrittweite)&lt;br /&gt;
    {&lt;br /&gt;
        int tx = (int) t.liesX();&lt;br /&gt;
        int ty = (int) t.liesY();&lt;br /&gt;
        if (qx&amp;lt;tx) {&lt;br /&gt;
            qx+=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            qx-=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        if (qy&amp;lt;ty) {&lt;br /&gt;
            qy+=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            qy-=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        q.zumStart(qx,qy);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // gibt eine Zufallszahl zwischen 1 und pMaximum zurück&lt;br /&gt;
    public int gibZufallszahl(int pMaximum) {&lt;br /&gt;
        return  (int) ((Math.random()*pMaximum)+1);&lt;br /&gt;
    }&lt;br /&gt;
} // Ende von Zufallsturtle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Uhr ==&lt;br /&gt;
[[Bild:ScreenshotUhr.gif|thumb|Screenshot]]&lt;br /&gt;
{{Box|Hinweis|&lt;br /&gt;
Leider verschwinden nicht alle schwarzen Striche. Ich nehme an, das sind Rechenungenauigkeiten (Rundungsfehler) der Turtlemethode.&lt;br /&gt;
; Benötigt:&lt;br /&gt;
* if, for, Turtlegrafik, int, double&lt;br /&gt;
* BlueJ, daher keine main-Mathode&lt;br /&gt;
|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Uhr&lt;br /&gt;
{&lt;br /&gt;
    private int minute;&lt;br /&gt;
    private int stunde;&lt;br /&gt;
    private Turtle t;&lt;br /&gt;
    &lt;br /&gt;
    public Uhr(int pStunde, int pMinute)&lt;br /&gt;
    {&lt;br /&gt;
        if (stunde==0) {&lt;br /&gt;
            stunde=12;&lt;br /&gt;
        }&lt;br /&gt;
        minute=pMinute;&lt;br /&gt;
        stunde=pStunde;&lt;br /&gt;
        t=new Turtle();&lt;br /&gt;
        t.drehe(-90);&lt;br /&gt;
        t.zeige();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void laufe15Sekunden(){&lt;br /&gt;
        for (int k=1;k&amp;lt;=15;k++){&lt;br /&gt;
            zeichneUhr(100,8);&lt;br /&gt;
            stelleWeiter();&lt;br /&gt;
            zeichneUhr(100,0);&lt;br /&gt;
            t.ruhe(1000);&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void stelleWeiter()&lt;br /&gt;
    {&lt;br /&gt;
        minute++;&lt;br /&gt;
        if (minute&amp;gt;59) {&lt;br /&gt;
            minute=0; &lt;br /&gt;
            stunde++;&lt;br /&gt;
            if (stunde&amp;gt;12) {&lt;br /&gt;
                stunde=1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichneUhr(double pZeigerlaenge, int pFarbe){&lt;br /&gt;
        t.setzeFarbe(pFarbe);&lt;br /&gt;
        t.drehe(minute*360/60);&lt;br /&gt;
        t.vor(pZeigerlaenge);&lt;br /&gt;
        t.vor(-pZeigerlaenge);&lt;br /&gt;
        t.drehe(-minute*360/60);&lt;br /&gt;
        t.drehe(stunde*360/12);&lt;br /&gt;
        t.vor(pZeigerlaenge*0.8);&lt;br /&gt;
        t.vor(-pZeigerlaenge*0.8);&lt;br /&gt;
        t.drehe(-stunde*360/12);        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public int gibVergangeneMinutenSeitMitternacht() {&lt;br /&gt;
        int zwischenspeicher;&lt;br /&gt;
        zwischenspeicher = minute + stunde * 60;&lt;br /&gt;
        return zwischenspeicher;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
Analysieren Sie die Klasse Uhr. &lt;br /&gt;
# Klären Sie am Beispiel der Uhr folgende Begriffe:&lt;br /&gt;
#*Klasse, Methode, Datentyp, Parameter, Schleife (for), Bedingte Ausführung (if)&lt;br /&gt;
# Zeichnen Sie das Klassendiagramm zur Klasse Uhr.&lt;br /&gt;
# Implementieren Sie die Methode &amp;lt;code&amp;gt;stelleUhr(int pStunde, int pMinute)&amp;lt;/code&amp;gt;, die die Uhrzeit auf die angegebenen Parameter verstellt. Das soll aber nur dann geschehen, wenn eine gültige Uhrzeit übergeben wurde (Stunden bis max. 12 und Minuten bis 59). Falls als Stunde 0 angegeben wurde, soll der Wert auf 12 gestellt werden.&lt;br /&gt;
# Implementieren Sie die Methode &amp;lt;code&amp;gt;stelleUmXMinutenVor(int x)&amp;lt;/code&amp;gt;, die die Uhrzeit um x-Minuten verstellt. (Hinweis: es gibt zumindest 2 völlig verschiedene Lösungswege!)&lt;br /&gt;
# Ergänzen Sie die Uhr um eine Datumsangabe mit Tag und Monat. Implementieren Sie dazu auch &amp;lt;code&amp;gt;stelleDatumWeiter()&amp;lt;/code&amp;gt;, die das Datum um einen Tag vorstellt. (Zur Vereinfachung vernachlässigen wir die Schaltjahre).&lt;br /&gt;
# Zusatzaufgabe: Ergänzen Sie eine Alarmfunktion. &lt;br /&gt;
# Zusatzaufgabe (Übungen zur Turtlegrafik):&lt;br /&gt;
#*Lassen Sie ein Ziffernblatt zeichnen.&lt;br /&gt;
#*Wahrscheinlich werden Sie die folgenden Befehle benötigen:&lt;br /&gt;
#* &amp;lt;code&amp;gt;fuelleKreis(double radius)&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;schreibe(String text)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=if ... else mit PQ-Formel|weiterlink=Java/PQ-Formel|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
;Andere Turtlelibraries:&lt;br /&gt;
* [http://www.oberstufeninformatik.de/info11/turtle/turtle.html Einstieg in Java mit Turtle.java] Hier wird eine Unterrichtssequenz zur Graphikprogrammierung mit einer Turtle in Java dokumentiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Turtle-Grafik]]&lt;br /&gt;
* [[Java]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Turtle-Grafik&amp;diff=110790</id>
		<title>Java/Turtle-Grafik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Turtle-Grafik&amp;diff=110790"/>
		<updated>2020-01-08T19:39:24Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die folgenden Beispiele basieren auf der in Java geschriebenen [[Turtle-Grafik]]-Engine [http://studsemjuel.nw.lo-net2.de/if/basiskurs/Materialien/Libary.zip (Download)] von Alfred Hermes, die sich in [[BlueJ]] einbinden lässt (Werkzeuge &amp;gt; Einstellungen &amp;gt; Bibliotheken).&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=if ... else mit PQ-Formel|weiterlink=Java/PQ-Formel|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Elementare Methoden==&lt;br /&gt;
[[Bild:TurtleUML.png|right]]&lt;br /&gt;
* zumStart (x,y) - setzt die Turtle nach (x|y)&lt;br /&gt;
* vor (länge) - geht um „länge“-Punkte vorwärts&lt;br /&gt;
* drehe (winkel) - dreht bei positiven Zahlen rechts, bei negativen links herum.&lt;br /&gt;
* schreibe (text) - schreibt einen String text an die aktuelle Position&lt;br /&gt;
* hebeStift() - zeichnet nicht beim Bewegen&lt;br /&gt;
* senkeStift() - zeichnet beim Bewegen&lt;br /&gt;
* setzeFarbe(Turtle.rot) - Farben: .schwarz, .grün, .blau, .gelb, .rot, .grau, .hellgrau, .orange, .weiß;&lt;br /&gt;
&lt;br /&gt;
==Erstes Beispiel==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Figuren&lt;br /&gt;
{&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Turtle t;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Figuren() &lt;br /&gt;
    {&lt;br /&gt;
       double x,y;&lt;br /&gt;
       t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
       x = t.liesMaxX(); y = t.liesMaxX(); // Maximale x-und y-Werte&lt;br /&gt;
       t.zumStart(x/2,y/2); // Setzt die Anfangsposition auf die Mitte &lt;br /&gt;
       t.setzeFarbe(Turtle.blau); // legt Farbe fest &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void zeichneQuadrat(int pLänge){&lt;br /&gt;
        zeichneRechtenWinkel(pLänge); &lt;br /&gt;
        zeichneRechtenWinkel(pLänge);   &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichneRechtenWinkel(int pLänge) &lt;br /&gt;
    { &lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.drehe(90);&lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.drehe(90);&lt;br /&gt;
    }&lt;br /&gt;
    // ... hier weitere Methoden einfügen&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Tippen Sie die Klasse Figuren ab. &lt;br /&gt;
* Ergänzen Sie die Klasse Figuren um folgende Methoden:&lt;br /&gt;
** zeichneGrößerwerdendeQuadrate(...)&lt;br /&gt;
** zeichneRechteck(int pLänge, int pBreite)&lt;br /&gt;
** zeichneSchweizerFahne( )&lt;br /&gt;
** zeichneGleichseitigesDreieck(int pLänge)&lt;br /&gt;
** zeichne5Eck(int pLänge)&lt;br /&gt;
** zeichneStern (...)&lt;br /&gt;
** zeichneMittelquadrat(...)&lt;br /&gt;
** zeichneFünfeck(...)&lt;br /&gt;
&lt;br /&gt;
* Zeichnen Sie das Haus vom Nikolaus. Denken Sie daran, dass Sie für die Berechnung der Länge der Diagonalen und des Dachs den Satz den Pythagoras benutzen können. Hinweis: Befehl für Wurzel aus x: Math.sqrt(x)&lt;br /&gt;
&lt;br /&gt;
* Lassen Sie eine Uhr mit Zeigern zeichnen: zeichneUhr(int Stunden, int Minuten)&lt;br /&gt;
* Überprüfen Sie vor der Zeichnung, ob die Werte zulässig sind (Stunden 0-23, Minuten 0-59). &lt;br /&gt;
* Profis: Schauen Sie sich das Klassendiagramm der Klasse TestTurtle an . Es enthält alle Methoden, die benutzt werden können. Probieren Sie Methoden aus, die Ihnen praktisch vorkommen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Nach Einführung der for-Schleife==&lt;br /&gt;
===Zweites Beispiel: Ein Zahlenstrahl===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   public void zeichneZahlenstrahl (int pErsteZahl, int pLetzteZahl) {&lt;br /&gt;
        for (int i=pErsteZahl; i&amp;lt;=pLetzteZahl; i++) {&lt;br /&gt;
            t.vor(20);&lt;br /&gt;
            t.schreibe(&amp;quot;&amp;quot;+i); // Trick! Einfache Typumwandlung zu String&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Analysieren Sie die Methode zum n-Eck.&lt;br /&gt;
* Wie kann ich einen Kreis zeichnen?&lt;br /&gt;
* Lassen Sie eine „Perlenschnur“ zeichnen. Hinweis: t.fülleKreis(double radius)&lt;br /&gt;
* Lassen Sie ein „Standardkoordinatensystem“ zeichnen, das auf beiden Achsen von -5 bis 5 geht. Vergessen Sie die Achsenbeschriftung (x und y) und die Pfeilspitzen nicht.&lt;br /&gt;
* Lassen Sie mit Hilfe einer Schleife Muster wie die folgenden erstellen. Klären Sie dazu auch die Frage, wie man größer werdende Quadrate zeichnen lassen kann (siehe Quadratschnecke).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Eventsteuerung==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.*;&lt;br /&gt;
public class Figuren extends Turtle&lt;br /&gt;
{&lt;br /&gt;
(...)&lt;br /&gt;
    public void mouseClicked(java.awt.event.MouseEvent me){&lt;br /&gt;
        if (me.isMetaDown()) { t.drehe(10); } // Rechte Maustaste?&lt;br /&gt;
        else {&lt;br /&gt;
            if (me.getClickCount()==2) { // Doppelklick?&lt;br /&gt;
               t.drehe(180); // Falls Doppelklick&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
               t.vor(10); // Falls einfacher Mausklick&lt;br /&gt;
            }&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// Alternativ: &lt;br /&gt;
    public void mouseClicked(java.awt.event.MouseEvent me){&lt;br /&gt;
       	if (me.isMetaDown()) { // rechte Maustaste gedrückt?&lt;br /&gt;
		t.drehe(10);&lt;br /&gt;
	}&lt;br /&gt;
        	else {&lt;br /&gt;
		t.vor(10);&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Überlegen Sie sich Varianten zu diesen Malprogrammen.&lt;br /&gt;
* Realisieren Sie ein Hindernisrennen. Leider kann die Turtle nur schlecht abfragen, ob ein Hindernis gerammt wurde ({{wpde|Kollisionserkennung (Algorithmische Geometrie)|Kollisionserkennung}}). Das müssen Sie selbst realisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Threads==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Ergänzen Sie den Konstruktor von Figuren um folgende Zeilen:&lt;br /&gt;
    (...)&lt;br /&gt;
       t.zeige();// ab hier neu:&lt;br /&gt;
       TurtleThread turtleThread;&lt;br /&gt;
       turtleThread = new TurtleThread(t);&lt;br /&gt;
       turtleThread.start();&lt;br /&gt;
    }&lt;br /&gt;
Legen Sie eine neue Klasse TurtleThread an&lt;br /&gt;
&lt;br /&gt;
public class TurtleThread extends Thread&lt;br /&gt;
{&lt;br /&gt;
Turtle t;&lt;br /&gt;
&lt;br /&gt;
    public TurtleThread(Turtle pT)&lt;br /&gt;
    {&lt;br /&gt;
        t = pT;&lt;br /&gt;
    }&lt;br /&gt;
    public void run() {&lt;br /&gt;
      for(int i = 0; i &amp;lt; 30; i++) {&lt;br /&gt;
        try {&lt;br /&gt;
          t.vor(10);  &lt;br /&gt;
          sleep(1000);&lt;br /&gt;
        }&lt;br /&gt;
        catch(InterruptedException e) {        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
} // Ende von TurtleThread&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Realisieren Sie ein Hindernisrennspiel, bei dem der Benutzer mit der linken Maustaste nach links und der rechten nach rechts dreht. Vorwärts geht die Turtle automatisch.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Perlenkette==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Perlenkette&lt;br /&gt;
{&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Turtle t;&lt;br /&gt;
 &lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Perlenkette() &lt;br /&gt;
    {&lt;br /&gt;
       t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void zeichneLutscher(double pLänge, double pRadius){&lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.setzeFarbe(Turtle.gelb);&lt;br /&gt;
        t.fülleKreis(pRadius);&lt;br /&gt;
        t.setzeFarbe(Turtle.blau);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichnePerlenschnur(int pAnzahl) &lt;br /&gt;
    { &lt;br /&gt;
        t.zumStart(200,20); // Startposition oben mittig&lt;br /&gt;
        for (int k=1; k&amp;lt;=pAnzahl; k++) {&lt;br /&gt;
            t.drehe(360/(pAnzahl*2));&lt;br /&gt;
            zeichneLutscher(30, k*2);       &lt;br /&gt;
        }&lt;br /&gt;
        for (int k=pAnzahl-1; k&amp;gt;=1; k--) {&lt;br /&gt;
            t.drehe(360/(pAnzahl*2));&lt;br /&gt;
            zeichneLutscher(30, k*2);&lt;br /&gt;
        }&lt;br /&gt;
        t.drehe(360/(pAnzahl*2));&lt;br /&gt;
        t.vor(30);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Rudimentärer Funktionsplotter==&lt;br /&gt;
[[Bild:Fktplotterturtle.gif|thumb|Beispielfunktion y=(x*x*x*x-10*x*x+12);]]&lt;br /&gt;
Es folgt der Quelltext eines einfachen Funktionsplotters. &amp;lt;br&amp;gt;&lt;br /&gt;
Schade ist, dass Java keinen &amp;quot;eval&amp;quot; Befehl kennt, wie er z.B. in [[JavaScript]] vorliegt. Daher muss man hier die Funktion, die angezeigt werden soll, direkt im Quelltext angeben (es sei denn, man fügt einen Mathe-Parser hinzu).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Ein rudimentärer Funktionsplotter&lt;br /&gt;
&lt;br /&gt;
public class Figuren&lt;br /&gt;
{&lt;br /&gt;
// Eigenschaften&lt;br /&gt;
Turtle t;&lt;br /&gt;
&lt;br /&gt;
// Konstruktor&lt;br /&gt;
&lt;br /&gt;
public Figuren()&lt;br /&gt;
{&lt;br /&gt;
    double x,y;&lt;br /&gt;
    t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
    t.setzeFarbe(Turtle.blau); // legt Farbe fest&lt;br /&gt;
    t.zeige();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void zeichneKoordinatensystem(){&lt;br /&gt;
    double pLaenge=15;&lt;br /&gt;
    t.setzeFarbe(Turtle.blau);&lt;br /&gt;
    setzeTurtleInDieMitte();&lt;br /&gt;
    t.vor(-10*pLaenge);&lt;br /&gt;
    zeichneStrahl(-10,10,pLaenge);&lt;br /&gt;
    t.vor(10*pLaenge);&lt;br /&gt;
    t.drehe(-90);&lt;br /&gt;
    t.vor(-10*pLaenge);&lt;br /&gt;
    zeichneStrahl(-10,10,pLaenge);&lt;br /&gt;
    t.drehe(90);&lt;br /&gt;
    setzeTurtleInDieMitte();    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void zeichneFunktion(){&lt;br /&gt;
    t.setzeFarbe(Turtle.rot);&lt;br /&gt;
    double pLaenge=15;&lt;br /&gt;
    double y;&lt;br /&gt;
    boolean w=false;&lt;br /&gt;
    for (double x=-10;x&amp;lt;=10;x=x+0.1){&lt;br /&gt;
        y=(x*x-3);&lt;br /&gt;
        if (!w) {&lt;br /&gt;
            t.zumStart(x*pLaenge+t.liesMaxX()/2,-y*pLaenge+t.liesMaxX()/2);&lt;br /&gt;
            w=true;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
        t.geheNach(x*pLaenge+t.liesMaxX()/2,-y*pLaenge+t.liesMaxX()/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void setzeTurtleInDieMitte(){&lt;br /&gt;
    double x,y;&lt;br /&gt;
    x = t.liesMaxX(); y = t.liesMaxX(); // Maximale x-und y-Werte&lt;br /&gt;
    t.zumStart(x/2,y/2); // Setzt die Anfangsposition auf die Mitte&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void zeichneStrahl(int pSkalenMin, int pSkalenMax, double pLaenge){&lt;br /&gt;
    t.schreibe(&amp;quot;&amp;quot;+pSkalenMin);&lt;br /&gt;
    for (int i=pSkalenMin+1; i&amp;lt;=pSkalenMax; i++){&lt;br /&gt;
        t.vor(pLaenge);&lt;br /&gt;
        t.schreibe(&amp;quot;&amp;quot;+i); &lt;br /&gt;
    }&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    zeichnePfeil(20);&lt;br /&gt;
    t.vor(-pLaenge*(pSkalenMax-pSkalenMin+1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void zeichnePfeil(double pLaenge){&lt;br /&gt;
    t.drehe(-90);&lt;br /&gt;
    t.vor(pLaenge/2);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge/2);&lt;br /&gt;
    t.drehe(90);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verfolgende Schildkröten==&lt;br /&gt;
Eine Turtle verfolgt eine andere auf kürzestem Weg. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Zufallsturtle&lt;br /&gt;
{&lt;br /&gt;
// Eigenschaften&lt;br /&gt;
private Turtle t,q;&lt;br /&gt;
private int qx, qy;&lt;br /&gt;
&lt;br /&gt;
// Konstruktor&lt;br /&gt;
    public Zufallsturtle()&lt;br /&gt;
    {&lt;br /&gt;
        t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
        t.zeige();&lt;br /&gt;
        t.setzeFarbe(4);&lt;br /&gt;
        q=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;q&amp;quot; an.&lt;br /&gt;
        q.zeige(); // zufällige Startposition        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// Methoden&lt;br /&gt;
    public void starte(){ &lt;br /&gt;
        boolean ende=false;&lt;br /&gt;
        &lt;br /&gt;
        qy=gibZufallszahl(400);&lt;br /&gt;
        qy=gibZufallszahl(400);&lt;br /&gt;
        q.zumStart(qx,qy);&lt;br /&gt;
        &lt;br /&gt;
        while (!ende) {&lt;br /&gt;
            laufeZufaellig(2, 2, 50);&lt;br /&gt;
            verfolge(1);&lt;br /&gt;
            if (qx==(int) t.liesX()){&lt;br /&gt;
                if (qy==(int) t.liesY()){&lt;br /&gt;
                    ende=true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        t.schreibe(&amp;quot;Gefangen&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public void laufeZufaellig(int pSchrittweite, int pSchrittzahl, int pPause)&lt;br /&gt;
    {&lt;br /&gt;
       int zufallszahl;&lt;br /&gt;
       for (int k=1;k&amp;lt;=pSchrittzahl;k++) {&lt;br /&gt;
           zufallszahl=gibZufallszahl(3);&lt;br /&gt;
           if (zufallszahl==1) {&lt;br /&gt;
               t.vor(pSchrittweite);&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                if (zufallszahl==2) {&lt;br /&gt;
                    t.drehe(10);&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    t.drehe(-5);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            t.ruhe(pPause);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void verfolge(int pSchrittweite)&lt;br /&gt;
    {&lt;br /&gt;
        int tx = (int) t.liesX();&lt;br /&gt;
        int ty = (int) t.liesY();&lt;br /&gt;
        if (qx&amp;lt;tx) {&lt;br /&gt;
            qx+=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            qx-=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        if (qy&amp;lt;ty) {&lt;br /&gt;
            qy+=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            qy-=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        q.zumStart(qx,qy);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // gibt eine Zufallszahl zwischen 1 und pMaximum zurück&lt;br /&gt;
    public int gibZufallszahl(int pMaximum) {&lt;br /&gt;
        return  (int) ((Math.random()*pMaximum)+1);&lt;br /&gt;
    }&lt;br /&gt;
} // Ende von Zufallsturtle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Uhr ==&lt;br /&gt;
[[Bild:ScreenshotUhr.gif|thumb|Screenshot]]&lt;br /&gt;
{{Box|Hinweis|&lt;br /&gt;
Leider verschwinden nicht alle schwarzen Striche. Ich nehme an, das sind Rechenungenauigkeiten (Rundungsfehler) der Turtlemethode.&lt;br /&gt;
; Benötigt:&lt;br /&gt;
* if, for, Turtlegrafik, int, double&lt;br /&gt;
* BlueJ, daher keine main-Mathode&lt;br /&gt;
|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Uhr&lt;br /&gt;
{&lt;br /&gt;
    private int minute;&lt;br /&gt;
    private int stunde;&lt;br /&gt;
    private Turtle t;&lt;br /&gt;
    &lt;br /&gt;
    public Uhr(int pStunde, int pMinute)&lt;br /&gt;
    {&lt;br /&gt;
        if (stunde==0) {&lt;br /&gt;
            stunde=12;&lt;br /&gt;
        }&lt;br /&gt;
        minute=pMinute;&lt;br /&gt;
        stunde=pStunde;&lt;br /&gt;
        t=new Turtle();&lt;br /&gt;
        t.drehe(-90);&lt;br /&gt;
        t.zeige();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void laufe15Sekunden(){&lt;br /&gt;
        for (int k=1;k&amp;lt;=15;k++){&lt;br /&gt;
            zeichneUhr(100,8);&lt;br /&gt;
            stelleWeiter();&lt;br /&gt;
            zeichneUhr(100,0);&lt;br /&gt;
            t.ruhe(1000);&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void stelleWeiter()&lt;br /&gt;
    {&lt;br /&gt;
        minute++;&lt;br /&gt;
        if (minute&amp;gt;59) {&lt;br /&gt;
            minute=0; &lt;br /&gt;
            stunde++;&lt;br /&gt;
            if (stunde&amp;gt;12) {&lt;br /&gt;
                stunde=1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichneUhr(double pZeigerlaenge, int pFarbe){&lt;br /&gt;
        t.setzeFarbe(pFarbe);&lt;br /&gt;
        t.drehe(minute*360/60);&lt;br /&gt;
        t.vor(pZeigerlaenge);&lt;br /&gt;
        t.vor(-pZeigerlaenge);&lt;br /&gt;
        t.drehe(-minute*360/60);&lt;br /&gt;
        t.drehe(stunde*360/12);&lt;br /&gt;
        t.vor(pZeigerlaenge*0.8);&lt;br /&gt;
        t.vor(-pZeigerlaenge*0.8);&lt;br /&gt;
        t.drehe(-stunde*360/12);        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public int gibVergangeneMinutenSeitMitternacht() {&lt;br /&gt;
        int zwischenspeicher;&lt;br /&gt;
        zwischenspeicher = minute + stunde * 60;&lt;br /&gt;
        return zwischenspeicher;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
Analysieren Sie die Klasse Uhr. &lt;br /&gt;
# Klären Sie am Beispiel der Uhr folgende Begriffe:&lt;br /&gt;
#*Klasse, Methode, Datentyp, Parameter, Schleife (for), Bedingte Ausführung (if)&lt;br /&gt;
# Zeichnen Sie das Klassendiagramm zur Klasse Uhr.&lt;br /&gt;
# Implementieren Sie die Methode &amp;lt;code&amp;gt;stelleUhr(int pStunde, int pMinute)&amp;lt;/code&amp;gt;, die die Uhrzeit auf die angegebenen Parameter verstellt. Das soll aber nur dann geschehen, wenn eine gültige Uhrzeit übergeben wurde (Stunden bis max. 12 und Minuten bis 59). Falls als Stunde 0 angegeben wurde, soll der Wert auf 12 gestellt werden.&lt;br /&gt;
# Implementieren Sie die Methode &amp;lt;code&amp;gt;stelleUmXMinutenVor(int x)&amp;lt;/code&amp;gt;, die die Uhrzeit um x-Minuten verstellt. (Hinweis: es gibt zumindest 2 völlig verschiedene Lösungswege!)&lt;br /&gt;
# Ergänzen Sie die Uhr um eine Datumsangabe mit Tag und Monat. Implementieren Sie dazu auch &amp;lt;code&amp;gt;stelleDatumWeiter()&amp;lt;/code&amp;gt;, die das Datum um einen Tag vorstellt. (Zur Vereinfachung vernachlässigen wir die Schaltjahre).&lt;br /&gt;
# Zusatzaufgabe: Ergänzen Sie eine Alarmfunktion. &lt;br /&gt;
# Zusatzaufgabe (Übungen zur Turtlegrafik):&lt;br /&gt;
#*Lassen Sie ein Ziffernblatt zeichnen.&lt;br /&gt;
#*Wahrscheinlich werden Sie die folgenden Befehle benötigen:&lt;br /&gt;
#* &amp;lt;code&amp;gt;fuelleKreis(double radius)&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;schreibe(String text)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=if ... else mit PQ-Formel|weiterlink=Java/PQ-Formel|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
;Andere Turtlelibraries:&lt;br /&gt;
* [http://www.oberstufeninformatik.de/info11/turtle/turtle.html Einstieg in Java mit Turtle.java] Hier wird eine Unterrichtssequenz zur Graphikprogrammierung mit einer Turtle in Java dokumentiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Turtle-Grafik]]&lt;br /&gt;
* [[Java]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Turtle-Grafik&amp;diff=110789</id>
		<title>Java/Turtle-Grafik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Turtle-Grafik&amp;diff=110789"/>
		<updated>2020-01-08T19:37:37Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die folgenden Beispiele basieren auf der in Java geschriebenen [[Turtle-Grafik]]-Engine [[http://studsemjuel.nw.lo-net2.de/if/basiskurs/Materialien/Libary.zip (Download)]] von Alfred Hermes, die sich in [[BlueJ]] einbinden lässt (Werkzeuge &amp;gt; Einstellungen &amp;gt; Bibliotheken).&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=if ... else mit PQ-Formel|weiterlink=Java/PQ-Formel|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Elementare Methoden==&lt;br /&gt;
[[Bild:TurtleUML.png|right]]&lt;br /&gt;
* zumStart (x,y) - setzt die Turtle nach (x|y)&lt;br /&gt;
* vor (länge) - geht um „länge“-Punkte vorwärts&lt;br /&gt;
* drehe (winkel) - dreht bei positiven Zahlen rechts, bei negativen links herum.&lt;br /&gt;
* schreibe (text) - schreibt einen String text an die aktuelle Position&lt;br /&gt;
* hebeStift() - zeichnet nicht beim Bewegen&lt;br /&gt;
* senkeStift() - zeichnet beim Bewegen&lt;br /&gt;
* setzeFarbe(Turtle.rot) - Farben: .schwarz, .grün, .blau, .gelb, .rot, .grau, .hellgrau, .orange, .weiß;&lt;br /&gt;
&lt;br /&gt;
==Erstes Beispiel==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Figuren&lt;br /&gt;
{&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Turtle t;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Figuren() &lt;br /&gt;
    {&lt;br /&gt;
       double x,y;&lt;br /&gt;
       t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
       x = t.liesMaxX(); y = t.liesMaxX(); // Maximale x-und y-Werte&lt;br /&gt;
       t.zumStart(x/2,y/2); // Setzt die Anfangsposition auf die Mitte &lt;br /&gt;
       t.setzeFarbe(Turtle.blau); // legt Farbe fest &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void zeichneQuadrat(int pLänge){&lt;br /&gt;
        zeichneRechtenWinkel(pLänge); &lt;br /&gt;
        zeichneRechtenWinkel(pLänge);   &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichneRechtenWinkel(int pLänge) &lt;br /&gt;
    { &lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.drehe(90);&lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.drehe(90);&lt;br /&gt;
    }&lt;br /&gt;
    // ... hier weitere Methoden einfügen&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Tippen Sie die Klasse Figuren ab. &lt;br /&gt;
* Ergänzen Sie die Klasse Figuren um folgende Methoden:&lt;br /&gt;
** zeichneGrößerwerdendeQuadrate(...)&lt;br /&gt;
** zeichneRechteck(int pLänge, int pBreite)&lt;br /&gt;
** zeichneSchweizerFahne( )&lt;br /&gt;
** zeichneGleichseitigesDreieck(int pLänge)&lt;br /&gt;
** zeichne5Eck(int pLänge)&lt;br /&gt;
** zeichneStern (...)&lt;br /&gt;
** zeichneMittelquadrat(...)&lt;br /&gt;
** zeichneFünfeck(...)&lt;br /&gt;
&lt;br /&gt;
* Zeichnen Sie das Haus vom Nikolaus. Denken Sie daran, dass Sie für die Berechnung der Länge der Diagonalen und des Dachs den Satz den Pythagoras benutzen können. Hinweis: Befehl für Wurzel aus x: Math.sqrt(x)&lt;br /&gt;
&lt;br /&gt;
* Lassen Sie eine Uhr mit Zeigern zeichnen: zeichneUhr(int Stunden, int Minuten)&lt;br /&gt;
* Überprüfen Sie vor der Zeichnung, ob die Werte zulässig sind (Stunden 0-23, Minuten 0-59). &lt;br /&gt;
* Profis: Schauen Sie sich das Klassendiagramm der Klasse TestTurtle an . Es enthält alle Methoden, die benutzt werden können. Probieren Sie Methoden aus, die Ihnen praktisch vorkommen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Nach Einführung der for-Schleife==&lt;br /&gt;
===Zweites Beispiel: Ein Zahlenstrahl===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   public void zeichneZahlenstrahl (int pErsteZahl, int pLetzteZahl) {&lt;br /&gt;
        for (int i=pErsteZahl; i&amp;lt;=pLetzteZahl; i++) {&lt;br /&gt;
            t.vor(20);&lt;br /&gt;
            t.schreibe(&amp;quot;&amp;quot;+i); // Trick! Einfache Typumwandlung zu String&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Analysieren Sie die Methode zum n-Eck.&lt;br /&gt;
* Wie kann ich einen Kreis zeichnen?&lt;br /&gt;
* Lassen Sie eine „Perlenschnur“ zeichnen. Hinweis: t.fülleKreis(double radius)&lt;br /&gt;
* Lassen Sie ein „Standardkoordinatensystem“ zeichnen, das auf beiden Achsen von -5 bis 5 geht. Vergessen Sie die Achsenbeschriftung (x und y) und die Pfeilspitzen nicht.&lt;br /&gt;
* Lassen Sie mit Hilfe einer Schleife Muster wie die folgenden erstellen. Klären Sie dazu auch die Frage, wie man größer werdende Quadrate zeichnen lassen kann (siehe Quadratschnecke).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Eventsteuerung==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.*;&lt;br /&gt;
public class Figuren extends Turtle&lt;br /&gt;
{&lt;br /&gt;
(...)&lt;br /&gt;
    public void mouseClicked(java.awt.event.MouseEvent me){&lt;br /&gt;
        if (me.isMetaDown()) { t.drehe(10); } // Rechte Maustaste?&lt;br /&gt;
        else {&lt;br /&gt;
            if (me.getClickCount()==2) { // Doppelklick?&lt;br /&gt;
               t.drehe(180); // Falls Doppelklick&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
               t.vor(10); // Falls einfacher Mausklick&lt;br /&gt;
            }&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// Alternativ: &lt;br /&gt;
    public void mouseClicked(java.awt.event.MouseEvent me){&lt;br /&gt;
       	if (me.isMetaDown()) { // rechte Maustaste gedrückt?&lt;br /&gt;
		t.drehe(10);&lt;br /&gt;
	}&lt;br /&gt;
        	else {&lt;br /&gt;
		t.vor(10);&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Überlegen Sie sich Varianten zu diesen Malprogrammen.&lt;br /&gt;
* Realisieren Sie ein Hindernisrennen. Leider kann die Turtle nur schlecht abfragen, ob ein Hindernis gerammt wurde ({{wpde|Kollisionserkennung (Algorithmische Geometrie)|Kollisionserkennung}}). Das müssen Sie selbst realisieren.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Threads==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Ergänzen Sie den Konstruktor von Figuren um folgende Zeilen:&lt;br /&gt;
    (...)&lt;br /&gt;
       t.zeige();// ab hier neu:&lt;br /&gt;
       TurtleThread turtleThread;&lt;br /&gt;
       turtleThread = new TurtleThread(t);&lt;br /&gt;
       turtleThread.start();&lt;br /&gt;
    }&lt;br /&gt;
Legen Sie eine neue Klasse TurtleThread an&lt;br /&gt;
&lt;br /&gt;
public class TurtleThread extends Thread&lt;br /&gt;
{&lt;br /&gt;
Turtle t;&lt;br /&gt;
&lt;br /&gt;
    public TurtleThread(Turtle pT)&lt;br /&gt;
    {&lt;br /&gt;
        t = pT;&lt;br /&gt;
    }&lt;br /&gt;
    public void run() {&lt;br /&gt;
      for(int i = 0; i &amp;lt; 30; i++) {&lt;br /&gt;
        try {&lt;br /&gt;
          t.vor(10);  &lt;br /&gt;
          sleep(1000);&lt;br /&gt;
        }&lt;br /&gt;
        catch(InterruptedException e) {        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
} // Ende von TurtleThread&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
* Realisieren Sie ein Hindernisrennspiel, bei dem der Benutzer mit der linken Maustaste nach links und der rechten nach rechts dreht. Vorwärts geht die Turtle automatisch.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Perlenkette==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Perlenkette&lt;br /&gt;
{&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
    Turtle t;&lt;br /&gt;
 &lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Perlenkette() &lt;br /&gt;
    {&lt;br /&gt;
       t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void zeichneLutscher(double pLänge, double pRadius){&lt;br /&gt;
        t.vor(pLänge);&lt;br /&gt;
        t.setzeFarbe(Turtle.gelb);&lt;br /&gt;
        t.fülleKreis(pRadius);&lt;br /&gt;
        t.setzeFarbe(Turtle.blau);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichnePerlenschnur(int pAnzahl) &lt;br /&gt;
    { &lt;br /&gt;
        t.zumStart(200,20); // Startposition oben mittig&lt;br /&gt;
        for (int k=1; k&amp;lt;=pAnzahl; k++) {&lt;br /&gt;
            t.drehe(360/(pAnzahl*2));&lt;br /&gt;
            zeichneLutscher(30, k*2);       &lt;br /&gt;
        }&lt;br /&gt;
        for (int k=pAnzahl-1; k&amp;gt;=1; k--) {&lt;br /&gt;
            t.drehe(360/(pAnzahl*2));&lt;br /&gt;
            zeichneLutscher(30, k*2);&lt;br /&gt;
        }&lt;br /&gt;
        t.drehe(360/(pAnzahl*2));&lt;br /&gt;
        t.vor(30);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Rudimentärer Funktionsplotter==&lt;br /&gt;
[[Bild:Fktplotterturtle.gif|thumb|Beispielfunktion y=(x*x*x*x-10*x*x+12);]]&lt;br /&gt;
Es folgt der Quelltext eines einfachen Funktionsplotters. &amp;lt;br&amp;gt;&lt;br /&gt;
Schade ist, dass Java keinen &amp;quot;eval&amp;quot; Befehl kennt, wie er z.B. in [[JavaScript]] vorliegt. Daher muss man hier die Funktion, die angezeigt werden soll, direkt im Quelltext angeben (es sei denn, man fügt einen Mathe-Parser hinzu).  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Ein rudimentärer Funktionsplotter&lt;br /&gt;
&lt;br /&gt;
public class Figuren&lt;br /&gt;
{&lt;br /&gt;
// Eigenschaften&lt;br /&gt;
Turtle t;&lt;br /&gt;
&lt;br /&gt;
// Konstruktor&lt;br /&gt;
&lt;br /&gt;
public Figuren()&lt;br /&gt;
{&lt;br /&gt;
    double x,y;&lt;br /&gt;
    t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
    t.setzeFarbe(Turtle.blau); // legt Farbe fest&lt;br /&gt;
    t.zeige();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void zeichneKoordinatensystem(){&lt;br /&gt;
    double pLaenge=15;&lt;br /&gt;
    t.setzeFarbe(Turtle.blau);&lt;br /&gt;
    setzeTurtleInDieMitte();&lt;br /&gt;
    t.vor(-10*pLaenge);&lt;br /&gt;
    zeichneStrahl(-10,10,pLaenge);&lt;br /&gt;
    t.vor(10*pLaenge);&lt;br /&gt;
    t.drehe(-90);&lt;br /&gt;
    t.vor(-10*pLaenge);&lt;br /&gt;
    zeichneStrahl(-10,10,pLaenge);&lt;br /&gt;
    t.drehe(90);&lt;br /&gt;
    setzeTurtleInDieMitte();    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void zeichneFunktion(){&lt;br /&gt;
    t.setzeFarbe(Turtle.rot);&lt;br /&gt;
    double pLaenge=15;&lt;br /&gt;
    double y;&lt;br /&gt;
    boolean w=false;&lt;br /&gt;
    for (double x=-10;x&amp;lt;=10;x=x+0.1){&lt;br /&gt;
        y=(x*x-3);&lt;br /&gt;
        if (!w) {&lt;br /&gt;
            t.zumStart(x*pLaenge+t.liesMaxX()/2,-y*pLaenge+t.liesMaxX()/2);&lt;br /&gt;
            w=true;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
        t.geheNach(x*pLaenge+t.liesMaxX()/2,-y*pLaenge+t.liesMaxX()/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public void setzeTurtleInDieMitte(){&lt;br /&gt;
    double x,y;&lt;br /&gt;
    x = t.liesMaxX(); y = t.liesMaxX(); // Maximale x-und y-Werte&lt;br /&gt;
    t.zumStart(x/2,y/2); // Setzt die Anfangsposition auf die Mitte&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void zeichneStrahl(int pSkalenMin, int pSkalenMax, double pLaenge){&lt;br /&gt;
    t.schreibe(&amp;quot;&amp;quot;+pSkalenMin);&lt;br /&gt;
    for (int i=pSkalenMin+1; i&amp;lt;=pSkalenMax; i++){&lt;br /&gt;
        t.vor(pLaenge);&lt;br /&gt;
        t.schreibe(&amp;quot;&amp;quot;+i); &lt;br /&gt;
    }&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    zeichnePfeil(20);&lt;br /&gt;
    t.vor(-pLaenge*(pSkalenMax-pSkalenMin+1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void zeichnePfeil(double pLaenge){&lt;br /&gt;
    t.drehe(-90);&lt;br /&gt;
    t.vor(pLaenge/2);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge);&lt;br /&gt;
    t.drehe(120);&lt;br /&gt;
    t.vor(pLaenge/2);&lt;br /&gt;
    t.drehe(90);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
} // Ende der Klasse Figuren&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verfolgende Schildkröten==&lt;br /&gt;
Eine Turtle verfolgt eine andere auf kürzestem Weg. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Zufallsturtle&lt;br /&gt;
{&lt;br /&gt;
// Eigenschaften&lt;br /&gt;
private Turtle t,q;&lt;br /&gt;
private int qx, qy;&lt;br /&gt;
&lt;br /&gt;
// Konstruktor&lt;br /&gt;
    public Zufallsturtle()&lt;br /&gt;
    {&lt;br /&gt;
        t=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;t&amp;quot; an.&lt;br /&gt;
        t.zeige();&lt;br /&gt;
        t.setzeFarbe(4);&lt;br /&gt;
        q=new Turtle(); // legt eine neue Turtle mit den Namen &amp;quot;q&amp;quot; an.&lt;br /&gt;
        q.zeige(); // zufällige Startposition        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// Methoden&lt;br /&gt;
    public void starte(){ &lt;br /&gt;
        boolean ende=false;&lt;br /&gt;
        &lt;br /&gt;
        qy=gibZufallszahl(400);&lt;br /&gt;
        qy=gibZufallszahl(400);&lt;br /&gt;
        q.zumStart(qx,qy);&lt;br /&gt;
        &lt;br /&gt;
        while (!ende) {&lt;br /&gt;
            laufeZufaellig(2, 2, 50);&lt;br /&gt;
            verfolge(1);&lt;br /&gt;
            if (qx==(int) t.liesX()){&lt;br /&gt;
                if (qy==(int) t.liesY()){&lt;br /&gt;
                    ende=true;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        t.schreibe(&amp;quot;Gefangen&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    public void laufeZufaellig(int pSchrittweite, int pSchrittzahl, int pPause)&lt;br /&gt;
    {&lt;br /&gt;
       int zufallszahl;&lt;br /&gt;
       for (int k=1;k&amp;lt;=pSchrittzahl;k++) {&lt;br /&gt;
           zufallszahl=gibZufallszahl(3);&lt;br /&gt;
           if (zufallszahl==1) {&lt;br /&gt;
               t.vor(pSchrittweite);&lt;br /&gt;
            }&lt;br /&gt;
            else {&lt;br /&gt;
                if (zufallszahl==2) {&lt;br /&gt;
                    t.drehe(10);&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    t.drehe(-5);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            t.ruhe(pPause);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void verfolge(int pSchrittweite)&lt;br /&gt;
    {&lt;br /&gt;
        int tx = (int) t.liesX();&lt;br /&gt;
        int ty = (int) t.liesY();&lt;br /&gt;
        if (qx&amp;lt;tx) {&lt;br /&gt;
            qx+=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            qx-=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        if (qy&amp;lt;ty) {&lt;br /&gt;
            qy+=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            qy-=pSchrittweite;&lt;br /&gt;
        }&lt;br /&gt;
        q.zumStart(qx,qy);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // gibt eine Zufallszahl zwischen 1 und pMaximum zurück&lt;br /&gt;
    public int gibZufallszahl(int pMaximum) {&lt;br /&gt;
        return  (int) ((Math.random()*pMaximum)+1);&lt;br /&gt;
    }&lt;br /&gt;
} // Ende von Zufallsturtle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Uhr ==&lt;br /&gt;
[[Bild:ScreenshotUhr.gif|thumb|Screenshot]]&lt;br /&gt;
{{Box|Hinweis|&lt;br /&gt;
Leider verschwinden nicht alle schwarzen Striche. Ich nehme an, das sind Rechenungenauigkeiten (Rundungsfehler) der Turtlemethode.&lt;br /&gt;
; Benötigt:&lt;br /&gt;
* if, for, Turtlegrafik, int, double&lt;br /&gt;
* BlueJ, daher keine main-Mathode&lt;br /&gt;
|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Uhr&lt;br /&gt;
{&lt;br /&gt;
    private int minute;&lt;br /&gt;
    private int stunde;&lt;br /&gt;
    private Turtle t;&lt;br /&gt;
    &lt;br /&gt;
    public Uhr(int pStunde, int pMinute)&lt;br /&gt;
    {&lt;br /&gt;
        if (stunde==0) {&lt;br /&gt;
            stunde=12;&lt;br /&gt;
        }&lt;br /&gt;
        minute=pMinute;&lt;br /&gt;
        stunde=pStunde;&lt;br /&gt;
        t=new Turtle();&lt;br /&gt;
        t.drehe(-90);&lt;br /&gt;
        t.zeige();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void laufe15Sekunden(){&lt;br /&gt;
        for (int k=1;k&amp;lt;=15;k++){&lt;br /&gt;
            zeichneUhr(100,8);&lt;br /&gt;
            stelleWeiter();&lt;br /&gt;
            zeichneUhr(100,0);&lt;br /&gt;
            t.ruhe(1000);&lt;br /&gt;
        }        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void stelleWeiter()&lt;br /&gt;
    {&lt;br /&gt;
        minute++;&lt;br /&gt;
        if (minute&amp;gt;59) {&lt;br /&gt;
            minute=0; &lt;br /&gt;
            stunde++;&lt;br /&gt;
            if (stunde&amp;gt;12) {&lt;br /&gt;
                stunde=1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void zeichneUhr(double pZeigerlaenge, int pFarbe){&lt;br /&gt;
        t.setzeFarbe(pFarbe);&lt;br /&gt;
        t.drehe(minute*360/60);&lt;br /&gt;
        t.vor(pZeigerlaenge);&lt;br /&gt;
        t.vor(-pZeigerlaenge);&lt;br /&gt;
        t.drehe(-minute*360/60);&lt;br /&gt;
        t.drehe(stunde*360/12);&lt;br /&gt;
        t.vor(pZeigerlaenge*0.8);&lt;br /&gt;
        t.vor(-pZeigerlaenge*0.8);&lt;br /&gt;
        t.drehe(-stunde*360/12);        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public int gibVergangeneMinutenSeitMitternacht() {&lt;br /&gt;
        int zwischenspeicher;&lt;br /&gt;
        zwischenspeicher = minute + stunde * 60;&lt;br /&gt;
        return zwischenspeicher;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
Analysieren Sie die Klasse Uhr. &lt;br /&gt;
# Klären Sie am Beispiel der Uhr folgende Begriffe:&lt;br /&gt;
#*Klasse, Methode, Datentyp, Parameter, Schleife (for), Bedingte Ausführung (if)&lt;br /&gt;
# Zeichnen Sie das Klassendiagramm zur Klasse Uhr.&lt;br /&gt;
# Implementieren Sie die Methode &amp;lt;code&amp;gt;stelleUhr(int pStunde, int pMinute)&amp;lt;/code&amp;gt;, die die Uhrzeit auf die angegebenen Parameter verstellt. Das soll aber nur dann geschehen, wenn eine gültige Uhrzeit übergeben wurde (Stunden bis max. 12 und Minuten bis 59). Falls als Stunde 0 angegeben wurde, soll der Wert auf 12 gestellt werden.&lt;br /&gt;
# Implementieren Sie die Methode &amp;lt;code&amp;gt;stelleUmXMinutenVor(int x)&amp;lt;/code&amp;gt;, die die Uhrzeit um x-Minuten verstellt. (Hinweis: es gibt zumindest 2 völlig verschiedene Lösungswege!)&lt;br /&gt;
# Ergänzen Sie die Uhr um eine Datumsangabe mit Tag und Monat. Implementieren Sie dazu auch &amp;lt;code&amp;gt;stelleDatumWeiter()&amp;lt;/code&amp;gt;, die das Datum um einen Tag vorstellt. (Zur Vereinfachung vernachlässigen wir die Schaltjahre).&lt;br /&gt;
# Zusatzaufgabe: Ergänzen Sie eine Alarmfunktion. &lt;br /&gt;
# Zusatzaufgabe (Übungen zur Turtlegrafik):&lt;br /&gt;
#*Lassen Sie ein Ziffernblatt zeichnen.&lt;br /&gt;
#*Wahrscheinlich werden Sie die folgenden Befehle benötigen:&lt;br /&gt;
#* &amp;lt;code&amp;gt;fuelleKreis(double radius)&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;lt;code&amp;gt;schreibe(String text)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=if ... else mit PQ-Formel|weiterlink=Java/PQ-Formel|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
;Andere Turtlelibraries:&lt;br /&gt;
* [http://www.oberstufeninformatik.de/info11/turtle/turtle.html Einstieg in Java mit Turtle.java] Hier wird eine Unterrichtssequenz zur Graphikprogrammierung mit einer Turtle in Java dokumentiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Turtle-Grafik]]&lt;br /&gt;
* [[Java]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Schleife&amp;diff=110788</id>
		<title>Java/Schleife</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Schleife&amp;diff=110788"/>
		<updated>2020-01-08T19:33:32Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Logische Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=Funktionsplotter mit Turtle Grafik|weiterlink=Java/Turtle-Grafik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== for-Schleife ==&lt;br /&gt;
&lt;br /&gt;
Häufig benötigt man beim Programmieren eine mehrfache Ausführung eines Teilbereichs. Denkbar ist, dass ein Programmierer dazu einfach Zeilen wiederholt. So lässt sich z.B. das kleine 1 x 1 von 3 wie folgt ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
System.out.println(&amp;quot;3 x 1 = 3&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 2 = 6&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 3 = 9&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 4 = 12&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 5 = 15&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 6 = 18&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 7 = 21&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 8 = 24&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 9 = 27&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für genau diesen Fall gibt es aber auch eine Schleife: die for-Schleife.&amp;lt;br&amp;gt; &lt;br /&gt;
Sie ist immer dann sinnvoll einsetzbar,&amp;lt;br&amp;gt; &lt;br /&gt;
wenn eine &#039;&#039;&#039;bestimmte&#039;&#039;&#039; Anzahl von Wiederholungen durchgeführt werden soll.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for ( int faktor = 1; faktor &amp;lt;= 9; faktor ++ ) &lt;br /&gt;
{&lt;br /&gt;
      System.out.println(&amp;quot;3 x &amp;quot; + faktor + &amp;quot; = &amp;quot; + 3*faktor );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Allgemeiner Aufbau ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// allgemeiner Aufbau&lt;br /&gt;
for ( int Zählvariable mit Initialisierung; Abbruchbedingung; Inkrementierung) {&lt;br /&gt;
      // Anweisung, die wiederholt werden soll&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anwendungsbeispiele ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for ( int i = 1; i &amp;lt;= 10; i++ ) {}  // Hochzählen von 1 bis 10&lt;br /&gt;
for ( int i = 1; i &amp;lt;= 10; i+=5 ) {} // Hochzählen in 5er-Schritten&lt;br /&gt;
for ( int i = 10; i &amp;gt;= 1; i-- ) {}  // Countdown von 10 bis 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aufgaben ===&lt;br /&gt;
{{Aufgabe|* Lassen Sie die Zahlen von 1 bis 100 auf dem Bildschirm ausgeben. &lt;br /&gt;
** Diesmal nur die geraden Zahlen. &lt;br /&gt;
** Diesmal von 100 bis -100. &lt;br /&gt;
* Die ungeraden Zahlen von 200 bis -1000.}}&lt;br /&gt;
{{Aufgabe|* Lassen Sie 50 mal den Buchstaben &amp;quot;A&amp;quot; auf den Bildschirm schreiben. &lt;br /&gt;
* Geben Sie alle Grossbuchstaben von A-Z durch &amp;lt;code&amp;gt;System.out.println((char)i)&amp;lt;/code&amp;gt; aus. &lt;br /&gt;
** Informieren Sie sich dazu über die ASCII-Codierung. &lt;br /&gt;
** Die Ausgabe soll nun in der Form &#039;&#039;&#039;ASCII(87) ergibt W&#039;&#039;&#039; usw. erfolgen.&lt;br /&gt;
* Implementieren Sie die &#039;&#039;&#039;Caesar-Verschlüsselung&#039;&#039;&#039;,&amp;lt;br&amp;gt; d.h. eine Verschiebung des Klartextalphabets um eine frei wählbare Zahl von Buchstaben.&lt;br /&gt;
** Informieren Sie sich dazu über den Modula-Operator %.}}&lt;br /&gt;
{{Aufgabe|* Implementieren Sie die mathematische Funktion Fakultät n!: &amp;lt;code&amp;gt;public int fakultaet(int n)&amp;lt;/code&amp;gt;&lt;br /&gt;
*Implementieren Sie die Berechnung des Binomialkoeffizienten: &amp;lt;code&amp;gt;public int binom(int n, int k)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
In den meisten Programmiersprachen gibt es die &#039;&#039;&#039;While-Schleife&#039;&#039;&#039; als &#039;&#039;&#039;Kontrollstruktur&#039;&#039;&#039;. &lt;br /&gt;
* Sie dient dazu, eine Abfolge von Anweisungen mehrfach auszuführen, &#039;&#039;&#039;solange&#039;&#039;&#039; eine Bedingung erfüllt ist. &lt;br /&gt;
* Diese Bedingung wird geprüft, &#039;&#039;&#039;bevor&#039;&#039;&#039; die Anweisungsfolge abgearbeitet wird. &lt;br /&gt;
** Es kann also auch sein, dass die Abfolge gar nicht ausgeführt wird. &lt;br /&gt;
** Wenn die Bedingung ständig erfüllt ist, dann wird die Schleife zur &#039;&#039;&#039;Endlosschleife&#039;&#039;&#039;. &lt;br /&gt;
* Die While-Schleife verwendet man bei &#039;&#039;&#039;dynamischen&#039;&#039;&#039; Abbruchbedingungen, die [[#for-Schleife|for-Schleife]] hingegen bei einer festen Anzahl von Durchläufen. &lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Fakultät ===&lt;br /&gt;
Das folgende Beispiel zeigt, wie sich die Berechnung der Fakultät n! durch eine while-Schleife realisieren lässt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 public int fakultaet(int zaehler)&lt;br /&gt;
 {&lt;br /&gt;
     int fakultaet = 1;&lt;br /&gt;
     while (zaehler &amp;gt; 1) {&lt;br /&gt;
         fakultaet *= zaehler;&lt;br /&gt;
         zaehler--;&lt;br /&gt;
     }&lt;br /&gt;
     return fakultaet;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Übungen mit while und Zufallszahlen ===&lt;br /&gt;
Übungen zu Zufallszahlen eignen sich, um die Interaktion zwischen verschiedenen Klassen zu demonstrieren. Die recht einfache Klasse Zufallszahl sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Zufallszahl&lt;br /&gt;
{&lt;br /&gt;
        private int zufallszahl;&lt;br /&gt;
    &lt;br /&gt;
        // gibt eine Zufallszahl zwischen 1 und maximum zurück&lt;br /&gt;
        public int getZufallszahl(int maximum)&lt;br /&gt;
        {               &lt;br /&gt;
                return (int) (Math.random()*maximum+1);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Klasse kann man nun auf einfache Weise in anderen Klassen verwenden. Eine Eigenschaft z.B. wuerfel vom Typ Zufallszahl wird vorbereitet (vgl. erste Zeilen).&lt;br /&gt;
&lt;br /&gt;
Nun lassen sich mit wuerfel.getZufallszahl(6) Zufallszahlen zwischen 1 und 6 bestimmen, die man z.B. ausgeben kann (erste Methode) oder einer Variable zuweisen kann (zweite Methode).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Wuerfelexperiment&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    private Zufallszahl wuerfel;&lt;br /&gt;
    &lt;br /&gt;
    public Wuerfelexperiment (){&lt;br /&gt;
        wuerfel=new Zufallszahl();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void gibWuerfelAus(int anzahl)&lt;br /&gt;
    {&lt;br /&gt;
        int i=1;&lt;br /&gt;
        while (i&amp;lt;=anzahl){&lt;br /&gt;
            System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+wuerfel.getZufallszahl(6));&lt;br /&gt;
            i++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void wuerfeleBisZurSechs()&lt;br /&gt;
    {&lt;br /&gt;
        int i=1;&lt;br /&gt;
        &lt;br /&gt;
        // Erster Wurf muss auf jeden Fall durchgeführt werden&lt;br /&gt;
        int zwischenspeicher=wuerfel.getZufallszahl(6);&lt;br /&gt;
        System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+zwischenspeicher);&lt;br /&gt;
 &lt;br /&gt;
        // weitere Würfe&lt;br /&gt;
        while (zwischenspeicher!=6){&lt;br /&gt;
            i++;&lt;br /&gt;
            zwischenspeicher=wuerfel.getZufallszahl(6);&lt;br /&gt;
            System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+zwischenspeicher);  &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
#Der Benutzer soll bei der Methode gibWuerfelAus selbst angeben können, wie viele Seiten der Würfel hat (es gibt z.B. auch 8-seitige oder 24-seitige Würfel). &lt;br /&gt;
#Zusätzlich soll die Summe der Würfe ausgegeben werden.&lt;br /&gt;
#Bestimmen Sie den Durchschnitt aller Würfe.&lt;br /&gt;
#Immer, wenn der vorherige Wurf gleich groß war, wie der aktuelle, soll „Gleich“ auf dem Bildschirm ausgegeben werden.&lt;br /&gt;
#Realisieren Sie eine Methode, die prüft, ob bei vielen Würfen jede Zahl annähernd gleich oft fällt (Kontrolle des Pseudozufallszahlgenerators).}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
#Legen Sie einen zweiten Würfel an und schreiben Sie wie oben gibWuerfelAus(...).&lt;br /&gt;
#Lassen Sie immer zuerst den größeren Würfel ausgeben.&lt;br /&gt;
#Lassen Sie anzeigen, wenn ein Pasch gewürfelt wurde.&lt;br /&gt;
#Immer, wenn der vorherige Wurf von der Summe her gleich groß war, wie der aktuelle, soll „Gleich“ auf dem Bildschirm ausgegeben werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== do-while-Schleife ==&lt;br /&gt;
Eine &#039;&#039;&#039;do-while-Schleife&#039;&#039;&#039; ist in der Programmierung eine „&#039;&#039;fußgesteuerte&#039;&#039; oder &#039;&#039;nachprüfende&#039;&#039; Schleife, bei der nach dem Durchlauf des Schleifenrumpfes die Abbruchbedingung überprüft wird“&amp;lt;ref&amp;gt;{{ wpde|Schleife (Programmierung)}}; 13.12.2006&amp;lt;/ref&amp;gt; (meist als DO-WHILE, das entspricht &#039;&#039;ausführen-während&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Mensch ärgere dich nicht&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int wuerfel;&lt;br /&gt;
do {&lt;br /&gt;
  wuerfel=(int) (Math.random()*6+1);&lt;br /&gt;
} while (wuerfel!=6);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dh. würfele solange, bis eine 6 gefallen ist, bzw. andersherum: wiederhole das Würfeln solange, solange das Würfelergebnis nicht 6 ist.&lt;br /&gt;
&lt;br /&gt;
Dabei muss mindestens einmal gewürfelt werden.&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Logische Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=Funktionsplotter mit Turtle Grafik|weiterlink=Java/Turtle-Grafik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* {{wpde|Schleife (Programmierung)}}&lt;br /&gt;
* {{wpde|Bubblesort#Java}} - Bubblesort mit do-while-Schleife&lt;br /&gt;
* wikibooks: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kurzeinstieg Java: Kontrollstrukturen] &lt;br /&gt;
* http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Loop.htm&lt;br /&gt;
* http://programmingwiki.de/Java/for-Schleife (Kopie dieser Seite hier - mit ausführbarem Quellcode)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:ZUM2Edutags]]&lt;br /&gt;
&amp;lt;metakeywords&amp;gt;ZUM2Edutags,ZUM-Wiki,Java/for-Schleife,Java,for-Schleife,for,Schleife,Informatik,Programmierung,Programmieren&amp;lt;/metakeywords&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110787</id>
		<title>Benutzer:Ernst Schreier</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110787"/>
		<updated>2020-01-08T18:19:02Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{webmo staff&lt;br /&gt;
|username=Ernst Schreier&lt;br /&gt;
|vorname=Ernst&lt;br /&gt;
|nachname=Schreier&lt;br /&gt;
|ueber_mich=Hallo zusammen!&lt;br /&gt;
&lt;br /&gt;
* Ich bin Lehrer für Mathe, Physik, Info &amp;amp; NwT am Droste-Hülshoff-Gymnasium (https://www.dhg-freiburg.de),&lt;br /&gt;
* dort für das Unterrichtsnetz zuständig und deshalb bekennendes Mitglied bei https://www.linuxmuster.net!&lt;br /&gt;
&lt;br /&gt;
lg, ernst&lt;br /&gt;
&lt;br /&gt;
== Eigene Projekte ==&lt;br /&gt;
Überarbeitung des [[https://unterrichten.zum.de/wiki/Java Lernpfads Java]]&lt;br /&gt;
&lt;br /&gt;
=== Testbereich ===&lt;br /&gt;
[[/testbereich/]]&lt;br /&gt;
&lt;br /&gt;
=== Formatierungen ===&lt;br /&gt;
[[/Formatierungen/]]&lt;br /&gt;
|wiki db id=107&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110786</id>
		<title>Benutzer:Ernst Schreier</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110786"/>
		<updated>2020-01-08T18:18:29Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{webmo staff&lt;br /&gt;
|username=Ernst Schreier&lt;br /&gt;
|vorname=Ernst&lt;br /&gt;
|nachname=Schreier&lt;br /&gt;
|ueber_mich=Hallo zusammen!&lt;br /&gt;
&lt;br /&gt;
* Ich bin Lehrer für Mathe, Physik, Info &amp;amp; NwT am Droste-Hülshoff-Gymnasium (https://www.dhg-freiburg.de),&lt;br /&gt;
* dort für das Unterrichtsnetz zuständig und deshalb bekennendes Mitglied bei https://www.linuxmuster.net!&lt;br /&gt;
&lt;br /&gt;
lg, ernst&lt;br /&gt;
&lt;br /&gt;
== Eigene Projekte ==&lt;br /&gt;
Überarbeitung des Lernpfads Java [[https://unterrichten.zum.de/wiki/Java Lernpfad Java]]&lt;br /&gt;
&lt;br /&gt;
=== Testbereich ===&lt;br /&gt;
[[/testbereich/]]&lt;br /&gt;
&lt;br /&gt;
=== Formatierungen ===&lt;br /&gt;
[[/Formatierungen/]]&lt;br /&gt;
|wiki db id=107&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110785</id>
		<title>Benutzer:Ernst Schreier</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110785"/>
		<updated>2020-01-08T18:17:57Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{webmo staff&lt;br /&gt;
|username=Ernst Schreier&lt;br /&gt;
|vorname=Ernst&lt;br /&gt;
|nachname=Schreier&lt;br /&gt;
|ueber_mich=Hallo zusammen!&lt;br /&gt;
&lt;br /&gt;
* Ich bin Lehrer für Mathe, Physik, Info &amp;amp; NwT am Droste-Hülshoff-Gymnasium (https://www.dhg-freiburg.de),&lt;br /&gt;
* dort für das Unterrichtsnetz zuständig und deshalb bekennendes Mitglied bei https://www.linuxmuster.net!&lt;br /&gt;
&lt;br /&gt;
lg, ernst&lt;br /&gt;
&lt;br /&gt;
== Eigene Projekte ==&lt;br /&gt;
Überarbeitung des Lernpfads Java [wiki/Java]&lt;br /&gt;
&lt;br /&gt;
=== Testbereich ===&lt;br /&gt;
[[/testbereich/]]&lt;br /&gt;
&lt;br /&gt;
=== Formatierungen ===&lt;br /&gt;
[[/Formatierungen/]]&lt;br /&gt;
|wiki db id=107&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110784</id>
		<title>Benutzer:Ernst Schreier</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier&amp;diff=110784"/>
		<updated>2020-01-08T18:17:26Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{webmo staff&lt;br /&gt;
|username=Ernst Schreier&lt;br /&gt;
|vorname=Ernst&lt;br /&gt;
|nachname=Schreier&lt;br /&gt;
|ueber_mich=Hallo zusammen!&lt;br /&gt;
&lt;br /&gt;
* Ich bin Lehrer für Mathe, Physik, Info &amp;amp; NwT am Droste-Hülshoff-Gymnasium (https://www.dhg-freiburg.de),&lt;br /&gt;
* dort für das Unterrichtsnetz zuständig und deshalb bekennendes Mitglied bei https://www.linuxmuster.net!&lt;br /&gt;
&lt;br /&gt;
lg, ernst&lt;br /&gt;
&lt;br /&gt;
== Eigene Projekte ==&lt;br /&gt;
Überarbeitung des Lernpfads Java [[wiki/Java]]&lt;br /&gt;
&lt;br /&gt;
=== Testbereich ===&lt;br /&gt;
[[/testbereich/]]&lt;br /&gt;
&lt;br /&gt;
=== Formatierungen ===&lt;br /&gt;
[[/Formatierungen/]]&lt;br /&gt;
|wiki db id=107&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/testbereich&amp;diff=110783</id>
		<title>Benutzer:Ernst Schreier/testbereich</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/testbereich&amp;diff=110783"/>
		<updated>2020-01-08T18:01:19Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== gelöschte Kapitel ==&lt;br /&gt;
&lt;br /&gt;
=== Versteckspiel ===&lt;br /&gt;
{{Idee|&lt;br /&gt;
Mit Hilfe des folgenden Beispiels lässt sich die while-Schleife einführen. Besser ist allerdings, wenn man es mit einer [[#for-Schleife|for-Schleife]] realisiert. D.h. falls man es nutzt, sollte man dieses Beispiel vor der for-Schleife behandeln.&lt;br /&gt;
&lt;br /&gt;
;Versteckspiel: Als Suchender muss man zunächst bis 100 zählen, dann laut „Ich komme...“ rufen.  Erst dann darf man zum Suchen aufbrechen.&lt;br /&gt;
&lt;br /&gt;
Dieses simple Spiel ist ein einfacher Algorithmus:&lt;br /&gt;
 VERSTECKSPIELZÄHLUNG&lt;br /&gt;
 Die erste Zahl ist 1.&lt;br /&gt;
 Prüfe, ob die 100 erreicht wurde&lt;br /&gt;
 Wenn das noch nicht erfüllt ist, sage die Zahl und erhöhe die Zahl um eins.&lt;br /&gt;
 Wenn doch, dann rufe „Ich komme“&lt;br /&gt;
&lt;br /&gt;
Mit while (engl. solange) lassen sich Programmabläufe abhängig von einer Bedingung wiederholen. Die Bedingung wird vor Ausführung der Anweisung abgefragt (&amp;quot;prechecked loop&amp;quot;,  &amp;quot;kopfgesteuerte Schleife&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Solange &amp;lt;Bedingung erfüllt&amp;gt; führe &amp;lt;Anweisung&amp;gt; aus.&lt;br /&gt;
;Java-Syntax:         &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   while (Bedingung) &lt;br /&gt;
   {&lt;br /&gt;
      Anweisungsblock (was soll wiederholt werden?)&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sähe das Verstecken-Beispiel als Methode der Klasse Verstecken aus. Der Computer schreibt die Zahlen von 1 bis zahl in die Konsole.&lt;br /&gt;
&lt;br /&gt;
;Hinweis: Wenn die oberen Zahlen nicht mehr zu sehen sind, liegt das an der Konsole, die nur begrenzt viele Zeilen zulässt. Das Problem kann man umgehen, indem man statt println ein print einsetzt. Dann wird nicht bei jeder Zahl eine neue Zeile begonnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Verstecken&lt;br /&gt;
{&lt;br /&gt;
      public void zaehleBisZahlundRufe(int zahl)&lt;br /&gt;
      {&lt;br /&gt;
        int x;                            // Eine Zählvariable x&lt;br /&gt;
        x=1;                              // Anfangswert für x&lt;br /&gt;
        while (x &amp;lt;= zahl) {   &lt;br /&gt;
            System.out.println (x);       // schreibe x auf die Konsole&lt;br /&gt;
            x++;                          // erhöhe x um 1&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println (&amp;quot;Ich komme...!&amp;quot;); &lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Endlosschleife ===&lt;br /&gt;
&lt;br /&gt;
Eine Schleife, die (eigentlich) niemals endet und dabei den Computer völlig auslastet ist eine typische Ursache für Abstürze.&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode ist eine Endlosschleife, die unendlich lange ausgeführt würde, wenn niemand die Ausführung stoppen würde. Typischer Fehler: Es wird x als Bedingung abgefragt: (x&amp;lt;100) , aber es wird x nicht innerhalb der Schleife verändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    public void führeEndlosschleifeAus(){&lt;br /&gt;
      int x; // Eine Zählvariable x&lt;br /&gt;
      x=1;   // Anfangswert für x&lt;br /&gt;
      while (x &amp;lt;= 100) {   &lt;br /&gt;
          System.out.println (x);       // schreibe x auf die Konsole&lt;br /&gt;
          // Typischer Fehler: x wird in der Schleife nicht erhöht.                     &lt;br /&gt;
      }   &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Bevor Sie die Methode ausprobieren, lesen Sie zunächst, wie man in [[BlueJ]] Programmausführungen stoppt:&lt;br /&gt;
&lt;br /&gt;
==== Notunterbrechungen bei BlueJ ====&lt;br /&gt;
&lt;br /&gt;
Mit Strg+Umschalt+R setzen Sie die Virtuelle Maschine zurück, was eine Beendigung der aktuell ausgeührten Methode bewirkt. Sie können auch auf der rot-weißen Ausführungsnanzeige mit der rechten Maustaste das Kontextmenu hervorholen und die Ausführung damit stoppen.&lt;br /&gt;
&lt;br /&gt;
{{Übung| &lt;br /&gt;
# Analysieren Sie die Methode zaehleBisZahlundRufe (int zahl), indem Sie folgende Dinge zunächst durchdenken und dann testen:&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf 1 als zahl übergeben.&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf negative Zahlen eingeben.&lt;br /&gt;
#* Was verändert sich, wenn die Zeile mit x++ über der System.out Zeile steht?&lt;br /&gt;
#* Wie können Sie in Zweierschritten zählen?&lt;br /&gt;
#* Warum wird „Ich komme“ nur ein mal ausgegeben?&lt;br /&gt;
# Verändern Sie die Methode so, dass ein Coutntdown heruntergezählt wird.&lt;br /&gt;
# Lassen Sie neben zahl auch die Variable schwrittweite übergeben. Sie soll bestimmen, in wie großen Schritten heraufgezählt werden soll (z.B. Schrittwete 3 ergibt: 1, 4, 7, 10...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Übungen mit while und Zufallszahlen ===&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Schleife&amp;diff=110782</id>
		<title>Java/Schleife</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Schleife&amp;diff=110782"/>
		<updated>2020-01-08T17:59:36Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Logische Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=Funktionsplotter mit Turtle Grafik|weiterlink=Java/Turtle-Grafik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== for-Schleife ==&lt;br /&gt;
&lt;br /&gt;
Häufig benötigt man beim Programmieren eine mehrfache Ausführung eines Teilbereichs. Denkbar ist, dass ein Programmierer dazu einfach Zeilen wiederholt. So lässt sich z.B. das kleine 1 x 1 von 3 wie folgt ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
System.out.println(&amp;quot;3 x 1 = 3&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 2 = 6&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 3 = 9&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 4 = 12&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 5 = 15&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 6 = 18&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 7 = 21&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 8 = 24&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 9 = 27&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für genau diesen Fall gibt es aber auch eine Schleife: die for-Schleife.&amp;lt;br&amp;gt; &lt;br /&gt;
Sie ist immer dann sinnvoll einsetzbar,&amp;lt;br&amp;gt; &lt;br /&gt;
wenn eine &#039;&#039;&#039;bestimmte&#039;&#039;&#039; Anzahl von Wiederholungen durchgeführt werden soll.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for ( int faktor = 1; faktor &amp;lt;= 9; faktor ++ ) &lt;br /&gt;
{&lt;br /&gt;
      System.out.println(&amp;quot;3 x &amp;quot; + faktor + &amp;quot; = &amp;quot; + 3*faktor );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Allgemeiner Aufbau ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// allgemeiner Aufbau&lt;br /&gt;
for ( int Zählvariable mit Initialisierung; Abbruchbedingung; Inkrementierung) {&lt;br /&gt;
      // Anweisung, die wiederholt werden soll&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anwendungsbeispiele ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for ( int i = 1; i &amp;lt;= 10; i++ ) {}  // Hochzählen von 1 bis 10&lt;br /&gt;
for ( int i = 1; i &amp;lt;= 10; i+=5 ) {} // Hochzählen in 5er-Schritten&lt;br /&gt;
for ( int i = 10; i &amp;gt;= 1; i-- ) {}  // Countdown von 10 bis 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aufgaben ===&lt;br /&gt;
{{Aufgabe|* Lassen Sie die Zahlen von 1 bis 100 auf dem Bildschirm ausgeben. &lt;br /&gt;
** Diesmal nur die geraden Zahlen. &lt;br /&gt;
** Diesmal von 100 bis -100. &lt;br /&gt;
* Die ungeraden Zahlen von 200 bis -1000.}}&lt;br /&gt;
{{Aufgabe|* Lassen Sie 50 mal den Buchstaben &amp;quot;A&amp;quot; auf den Bildschirm schreiben. &lt;br /&gt;
* Geben Sie alle Grossbuchstaben von A-Z durch &amp;lt;code&amp;gt;System.out.println((char)i)&amp;lt;/code&amp;gt; aus. &lt;br /&gt;
** Informieren Sie sich dazu über die ASCII-Codierung. &lt;br /&gt;
** Die Ausgabe soll nun in der Form &#039;&#039;&#039;ASCII(87) ergibt W&#039;&#039;&#039; usw. erfolgen.&lt;br /&gt;
* Implementieren Sie die &#039;&#039;&#039;Caesar-Verschlüsselung&#039;&#039;&#039;,&amp;lt;br&amp;gt; d.h. eine Verschiebung des Klartextalphabets um eine frei wählbare Zahl von Buchstaben.&lt;br /&gt;
** Informieren Sie sich dazu über den Modula-Operator %.}}&lt;br /&gt;
{{Aufgabe|* Implementieren Sie die mathematische Funktion Fakultät n!: &amp;lt;code&amp;gt;public int fakultaet(int n)&amp;lt;/code&amp;gt;&lt;br /&gt;
*Implementieren Sie die Berechnung des Binomialkoeffizienten: &amp;lt;code&amp;gt;public int binom(int n, int k)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
In den meisten Programmiersprachen gibt es die &#039;&#039;&#039;While-Schleife&#039;&#039;&#039; als &#039;&#039;&#039;Kontrollstruktur&#039;&#039;&#039;. &lt;br /&gt;
* Sie dient dazu, eine Abfolge von Anweisungen mehrfach auszuführen, &#039;&#039;&#039;solange&#039;&#039;&#039; eine Bedingung erfüllt ist. &lt;br /&gt;
* Diese Bedingung wird geprüft, &#039;&#039;&#039;bevor&#039;&#039;&#039; die Anweisungsfolge abgearbeitet wird. &lt;br /&gt;
** Es kann also auch sein, dass die Abfolge gar nicht ausgeführt wird. &lt;br /&gt;
** Wenn die Bedingung ständig erfüllt ist, dann wird die Schleife zur &#039;&#039;&#039;Endlosschleife&#039;&#039;&#039;. &lt;br /&gt;
* Die While-Schleife verwendet man bei &#039;&#039;&#039;dynamischen&#039;&#039;&#039; Abbruchbedingungen, die [[#for-Schleife|for-Schleife]] hingegen bei einer festen Anzahl von Durchläufen. &lt;br /&gt;
&lt;br /&gt;
=== Beispiel: Fakultät ===&lt;br /&gt;
Das folgende Beispiel zeigt, wie sich die Berechnung der Fakultät n! durch eine while-Schleife realisieren lässt:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 public int fakultaet(int zaehler)&lt;br /&gt;
 {&lt;br /&gt;
     int fakultaet = 1;&lt;br /&gt;
     while (zaehler &amp;gt; 1) {&lt;br /&gt;
         fakultaet *= zaehler;&lt;br /&gt;
         zaehler--;&lt;br /&gt;
     }&lt;br /&gt;
     return fakultaet;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Übungen mit while und Zufallszahlen ===&lt;br /&gt;
Übungen zu Zufallszahlen eignen sich, um die Interaktion zwischen verschiedenen Klassen zu demonstrieren. Die recht einfache Klasse Zufallszahl sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Zufallszahl&lt;br /&gt;
{&lt;br /&gt;
        private int zufallszahl;&lt;br /&gt;
    &lt;br /&gt;
        // gibt eine Zufallszahl zwischen 1 und maximum zurück&lt;br /&gt;
        public int getZufallszahl(int maximum)&lt;br /&gt;
        {               &lt;br /&gt;
                return (int) (Math.random()*maximum+1);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Klasse kann man nun auf einfache Weise in anderen Klassen verwenden. Eine Eigenschaft z.B. wuerfel vom Typ Zufallszahl wird vorbereitet (vgl. erste Zeilen).&lt;br /&gt;
&lt;br /&gt;
Nun lassen sich mit wuerfel.getZufallszahl(6) Zufallszahlen zwischen 1 und 6 bestimmen, die man z.B. ausgeben kann (erste Methode) oder einer Variable zuweisen kann (zweite Methode).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Wuerfelexperiment1&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    private Zufallszahl wuerfel;&lt;br /&gt;
    &lt;br /&gt;
    public Wuerfelexperiment1 (){&lt;br /&gt;
        wuerfel=new Zufallszahl();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void gibWuerfelAus(int anzahl)&lt;br /&gt;
    {&lt;br /&gt;
        int i=1;&lt;br /&gt;
        while (i&amp;lt;=anzahl){&lt;br /&gt;
            System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+wuerfel.getZufallszahl(6));&lt;br /&gt;
            i++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void wuerfeleBisZurSechs()&lt;br /&gt;
    {&lt;br /&gt;
        int i=1;&lt;br /&gt;
        &lt;br /&gt;
        // Erster Wurf muss auf jeden Fall durchgeführt werden&lt;br /&gt;
        int zwischenspeicher=wuerfel.getZufallszahl(6);&lt;br /&gt;
        System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+zwischenspeicher);&lt;br /&gt;
 &lt;br /&gt;
        // weitere Würfe&lt;br /&gt;
        while (zwischenspeicher!=6){&lt;br /&gt;
            i++;&lt;br /&gt;
            zwischenspeicher=wuerfel.getZufallszahl(6);&lt;br /&gt;
            System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+zwischenspeicher);  &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
#Der Benutzer soll bei der Methode gibWuerfelAus selbst angeben können, wie viele Seiten der Würfel hat (es gibt z.B. auch 8-seitige oder 24-seitige Würfel). &lt;br /&gt;
#Zusätzlich soll die Summe der Würfe ausgegeben werden.&lt;br /&gt;
#Bestimmen Sie den Durchschnitt aller Würfe.&lt;br /&gt;
#Immer, wenn der vorherige Wurf gleich groß war, wie der aktuelle, soll „Gleich“ auf dem Bildschirm ausgegeben werden.&lt;br /&gt;
#Realisieren Sie eine Methode, die prüft, ob bei vielen Würfen jede Zahl annähernd gleich oft fällt (Kontrolle des Pseudozufallszahlgenerators). &lt;br /&gt;
&lt;br /&gt;
Würfelexperiment2 – diesmal mit 2 Würfeln&lt;br /&gt;
#Legen Sie einen zweiten Würfel an und schreiben Sie wie oben gibWuerfelAus(...).&lt;br /&gt;
#Lassen Sie immer zuerst den größeren Würfel ausgeben.&lt;br /&gt;
#Lassen Sie anzeigen, wenn ein Pasch gewürfelt wurde.&lt;br /&gt;
#Immer, wenn der vorherige Wurf von der Summe her gleich groß war, wie der aktuelle, soll „Gleich“ auf dem Bildschirm ausgegeben werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== do-while-Schleife ==&lt;br /&gt;
Eine &#039;&#039;&#039;do-while-Schleife&#039;&#039;&#039; ist in der Programmierung eine „&#039;&#039;fußgesteuerte&#039;&#039; oder &#039;&#039;nachprüfende&#039;&#039; Schleife, bei der nach dem Durchlauf des Schleifenrumpfes die Abbruchbedingung überprüft wird“&amp;lt;ref&amp;gt;{{ wpde|Schleife (Programmierung)}}; 13.12.2006&amp;lt;/ref&amp;gt; (meist als DO-WHILE, das entspricht &#039;&#039;ausführen-während&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Mensch ärgere dich nicht&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int wuerfel;&lt;br /&gt;
do {&lt;br /&gt;
  wuerfel=(int) (Math.random()*6+1);&lt;br /&gt;
} while (wuerfel!=6);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dh. würfele solange, bis eine 6 gefallen ist, bzw. andersherum: wiederhole das Würfeln solange, solange das Würfelergebnis nicht 6 ist.&lt;br /&gt;
&lt;br /&gt;
Dabei muss mindestens einmal gewürfelt werden.&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Logische Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=Funktionsplotter mit Turtle Grafik|weiterlink=Java/Turtle-Grafik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* {{wpde|Schleife (Programmierung)}}&lt;br /&gt;
* {{wpde|Bubblesort#Java}} - Bubblesort mit do-while-Schleife&lt;br /&gt;
* wikibooks: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kurzeinstieg Java: Kontrollstrukturen] &lt;br /&gt;
* http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Loop.htm&lt;br /&gt;
* http://programmingwiki.de/Java/for-Schleife (Kopie dieser Seite hier - mit ausführbarem Quellcode)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:ZUM2Edutags]]&lt;br /&gt;
&amp;lt;metakeywords&amp;gt;ZUM2Edutags,ZUM-Wiki,Java/for-Schleife,Java,for-Schleife,for,Schleife,Informatik,Programmierung,Programmieren&amp;lt;/metakeywords&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Schleife&amp;diff=110781</id>
		<title>Java/Schleife</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Schleife&amp;diff=110781"/>
		<updated>2020-01-08T17:46:21Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Logische Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=Funktionsplotter mit Turtle Grafik|weiterlink=Java/Turtle-Grafik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== for-Schleife ==&lt;br /&gt;
&lt;br /&gt;
Häufig benötigt man beim Programmieren eine mehrfache Ausführung eines Teilbereichs. Denkbar ist, dass ein Programmierer dazu einfach Zeilen wiederholt. So lässt sich z.B. das kleine 1 x 1 von 3 wie folgt ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
System.out.println(&amp;quot;3 x 1 = 3&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 2 = 6&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 3 = 9&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 4 = 12&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 5 = 15&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 6 = 18&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 7 = 21&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 8 = 24&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 9 = 27&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für genau diesen Fall gibt es aber auch eine Schleife: die for-Schleife.&amp;lt;br&amp;gt; &lt;br /&gt;
Sie ist immer dann sinnvoll einsetzbar,&amp;lt;br&amp;gt; &lt;br /&gt;
wenn eine &#039;&#039;&#039;bestimmte&#039;&#039;&#039; Anzahl von Wiederholungen durchgeführt werden soll.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for ( int faktor = 1; faktor &amp;lt;= 9; faktor ++ ) &lt;br /&gt;
{&lt;br /&gt;
      System.out.println(&amp;quot;3 x &amp;quot; + faktor + &amp;quot; = &amp;quot; + 3*faktor );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Allgemeiner Aufbau ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// allgemeiner Aufbau&lt;br /&gt;
for ( int Zählvariable mit Initialisierung; Abbruchbedingung; Inkrementierung) {&lt;br /&gt;
      // Anweisung, die wiederholt werden soll&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anwendungsbeispiele ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for ( int i = 1; i &amp;lt;= 10; i++ ) {}  // Hochzählen von 1 bis 10&lt;br /&gt;
for ( int i = 1; i &amp;lt;= 10; i+=5 ) {} // Hochzählen in 5er-Schritten&lt;br /&gt;
for ( int i = 10; i &amp;gt;= 1; i-- ) {}  // Countdown von 10 bis 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Aufgaben ===&lt;br /&gt;
{{Aufgabe|* Lassen Sie die Zahlen von 1 bis 100 auf dem Bildschirm ausgeben. &lt;br /&gt;
** Diesmal nur die geraden Zahlen. &lt;br /&gt;
** Diesmal von 100 bis -100. &lt;br /&gt;
* Die ungeraden Zahlen von 200 bis -1000.}}&lt;br /&gt;
{{Aufgabe|* Lassen Sie 50 mal den Buchstaben &amp;quot;A&amp;quot; auf den Bildschirm schreiben. &lt;br /&gt;
* Geben Sie alle Grossbuchstaben von A-Z durch &amp;lt;code&amp;gt;System.out.println((char)i)&amp;lt;/code&amp;gt; aus. &lt;br /&gt;
** Informieren Sie sich dazu über die ASCII-Codierung. &lt;br /&gt;
** Die Ausgabe soll nun die Zuordnung in der Form ASCII(87) ergibt W usw. erfolgen.&lt;br /&gt;
* Implementieren Sie die &#039;&#039;&#039;Caesar-Verschlüsselung&#039;&#039;&#039;,&amp;lt;br&amp;gt; d.h. eine Verschiebung des Klartextalphabets um eine frei wählbare Zahl von Buchstaben.&lt;br /&gt;
** Informieren Sie sich dazu über den Modula-Operator %.}}&lt;br /&gt;
{{Aufgabe|* Implementieren Sie die mathematische Funktion Fakultät n!.&lt;br /&gt;
*Implementieren Sie die Berechnung des Binomialkoeffizienten (n über k).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
In den meisten Programmiersprachen gibt es die &#039;&#039;&#039;While-Schleife&#039;&#039;&#039; als &#039;&#039;&#039;Kontrollstruktur&#039;&#039;&#039;. &lt;br /&gt;
* Sie dient dazu, eine Abfolge von Anweisungen mehrfach auszuführen, &#039;&#039;&#039;solange&#039;&#039;&#039; eine Bedingung erfüllt ist. &lt;br /&gt;
* Diese Bedingung wird geprüft, &#039;&#039;&#039;bevor&#039;&#039;&#039; die Anweisungsfolge abgearbeitet wird. &lt;br /&gt;
** Es kann also auch sein, dass die Abfolge gar nicht ausgeführt wird. &lt;br /&gt;
** Wenn die Bedingung ständig erfüllt ist, dann wird die Schleife zur &#039;&#039;&#039;Endlosschleife&#039;&#039;&#039;. &lt;br /&gt;
* Die While-Schleife verwendet man bei &#039;&#039;&#039;dynamischen&#039;&#039;&#039; Abbruchbedingungen, &lt;br /&gt;
* die [[#for-Schleife|for-Schleife]] einer festen Zahl von Durchläufen. &lt;br /&gt;
&lt;br /&gt;
=== Versteckspiel ===&lt;br /&gt;
{{Idee|&lt;br /&gt;
Mit Hilfe des folgenden Beispiels lässt sich die while-Schleife einführen. Besser ist allerdings, wenn man es mit einer [[#for-Schleife|for-Schleife]] realisiert. D.h. falls man es nutzt, sollte man dieses Beispiel vor der for-Schleife behandeln.&lt;br /&gt;
&lt;br /&gt;
;Versteckspiel: Als Suchender muss man zunächst bis 100 zählen, dann laut „Ich komme...“ rufen.  Erst dann darf man zum Suchen aufbrechen.&lt;br /&gt;
&lt;br /&gt;
Dieses simple Spiel ist ein einfacher Algorithmus:&lt;br /&gt;
 VERSTECKSPIELZÄHLUNG&lt;br /&gt;
 Die erste Zahl ist 1.&lt;br /&gt;
 Prüfe, ob die 100 erreicht wurde&lt;br /&gt;
 Wenn das noch nicht erfüllt ist, sage die Zahl und erhöhe die Zahl um eins.&lt;br /&gt;
 Wenn doch, dann rufe „Ich komme“&lt;br /&gt;
&lt;br /&gt;
Mit while (engl. solange) lassen sich Programmabläufe abhängig von einer Bedingung wiederholen. Die Bedingung wird vor Ausführung der Anweisung abgefragt (&amp;quot;prechecked loop&amp;quot;,  &amp;quot;kopfgesteuerte Schleife&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Solange &amp;lt;Bedingung erfüllt&amp;gt; führe &amp;lt;Anweisung&amp;gt; aus.&lt;br /&gt;
;Java-Syntax:         &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   while (Bedingung) &lt;br /&gt;
   {&lt;br /&gt;
      Anweisungsblock (was soll wiederholt werden?)&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sähe das Verstecken-Beispiel als Methode der Klasse Verstecken aus. Der Computer schreibt die Zahlen von 1 bis zahl in die Konsole.&lt;br /&gt;
&lt;br /&gt;
;Hinweis: Wenn die oberen Zahlen nicht mehr zu sehen sind, liegt das an der Konsole, die nur begrenzt viele Zeilen zulässt. Das Problem kann man umgehen, indem man statt println ein print einsetzt. Dann wird nicht bei jeder Zahl eine neue Zeile begonnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Verstecken&lt;br /&gt;
{&lt;br /&gt;
      public void zaehleBisZahlundRufe(int zahl)&lt;br /&gt;
      {&lt;br /&gt;
        int x;                            // Eine Zählvariable x&lt;br /&gt;
        x=1;                              // Anfangswert für x&lt;br /&gt;
        while (x &amp;lt;= zahl) {   &lt;br /&gt;
            System.out.println (x);       // schreibe x auf die Konsole&lt;br /&gt;
            x++;                          // erhöhe x um 1&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println (&amp;quot;Ich komme...!&amp;quot;); &lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Endlosschleife ===&lt;br /&gt;
&lt;br /&gt;
Eine Schleife, die (eigentlich) niemals endet und dabei den Computer völlig auslastet ist eine typische Ursache für Abstürze.&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode ist eine Endlosschleife, die unendlich lange ausgeführt würde, wenn niemand die Ausführung stoppen würde. Typischer Fehler: Es wird x als Bedingung abgefragt: (x&amp;lt;100) , aber es wird x nicht innerhalb der Schleife verändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    public void führeEndlosschleifeAus(){&lt;br /&gt;
      int x; // Eine Zählvariable x&lt;br /&gt;
      x=1;   // Anfangswert für x&lt;br /&gt;
      while (x &amp;lt;= 100) {   &lt;br /&gt;
          System.out.println (x);       // schreibe x auf die Konsole&lt;br /&gt;
          // Typischer Fehler: x wird in der Schleife nicht erhöht.                     &lt;br /&gt;
      }   &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Bevor Sie die Methode ausprobieren, lesen Sie zunächst, wie man in [[BlueJ]] Programmausführungen stoppt:&lt;br /&gt;
&lt;br /&gt;
==== Notunterbrechungen bei BlueJ ====&lt;br /&gt;
&lt;br /&gt;
Mit Strg+Umschalt+R setzen Sie die Virtuelle Maschine zurück, was eine Beendigung der aktuell ausgeührten Methode bewirkt. Sie können auch auf der rot-weißen Ausführungsnanzeige mit der rechten Maustaste das Kontextmenu hervorholen und die Ausführung damit stoppen.&lt;br /&gt;
&lt;br /&gt;
{{Übung| &lt;br /&gt;
# Analysieren Sie die Methode zaehleBisZahlundRufe (int zahl), indem Sie folgende Dinge zunächst durchdenken und dann testen:&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf 1 als zahl übergeben.&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf negative Zahlen eingeben.&lt;br /&gt;
#* Was verändert sich, wenn die Zeile mit x++ über der System.out Zeile steht?&lt;br /&gt;
#* Wie können Sie in Zweierschritten zählen?&lt;br /&gt;
#* Warum wird „Ich komme“ nur ein mal ausgegeben?&lt;br /&gt;
# Verändern Sie die Methode so, dass ein Coutntdown heruntergezählt wird.&lt;br /&gt;
# Lassen Sie neben zahl auch die Variable schwrittweite übergeben. Sie soll bestimmen, in wie großen Schritten heraufgezählt werden soll (z.B. Schrittwete 3 ergibt: 1, 4, 7, 10...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Übungen mit while und Zufallszahlen ===&lt;br /&gt;
&lt;br /&gt;
Übungen zu Zufallszahlen eignen sich, um die Interaktion zwischen verschiedenen Klassen zu demonstrieren. Die recht einfache Klasse Zufallszahl sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Zufallszahl&lt;br /&gt;
{&lt;br /&gt;
        private int zufallszahl;&lt;br /&gt;
    &lt;br /&gt;
        // gibt eine Zufallszahl zwischen 1 und maximum zurück&lt;br /&gt;
        public int getZufallszahl(int maximum)&lt;br /&gt;
        {               &lt;br /&gt;
                return (int) (Math.random()*maximum+1);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Klasse kann man nun auf einfache Weise in anderen Klassen verwenden. Eine Eigenschaft z.B. wuerfel vom Typ Zufallszahl wird vorbereitet (vgl. erste Zeilen).&lt;br /&gt;
&lt;br /&gt;
Nun lassen sich mit wuerfel.getZufallszahl(6) Zufallszahlen zwischen 1 und 6 bestimmen, die man z.B. ausgeben kann (erste Methode) oder einer Variable zuweisen kann (zweite Methode).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Wuerfelexperiment1&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    private Zufallszahl wuerfel;&lt;br /&gt;
    &lt;br /&gt;
    public Wuerfelexperiment1 (){&lt;br /&gt;
        wuerfel=new Zufallszahl();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void gibWuerfelAus(int anzahl)&lt;br /&gt;
    {&lt;br /&gt;
        int i=1;&lt;br /&gt;
        while (i&amp;lt;=anzahl){&lt;br /&gt;
            System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+wuerfel.getZufallszahl(6));&lt;br /&gt;
            i++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void wuerfeleBisZurSechs()&lt;br /&gt;
    {&lt;br /&gt;
        int i=1;&lt;br /&gt;
        &lt;br /&gt;
        // Erster Wurf muss auf jeden Fall durchgeführt werden&lt;br /&gt;
        int zwischenspeicher=wuerfel.getZufallszahl(6);&lt;br /&gt;
        System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+zwischenspeicher);&lt;br /&gt;
 &lt;br /&gt;
        // weitere Würfe&lt;br /&gt;
        while (zwischenspeicher!=6){&lt;br /&gt;
            i++;&lt;br /&gt;
            zwischenspeicher=wuerfel.getZufallszahl(6);&lt;br /&gt;
            System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+zwischenspeicher);  &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
#Der Benutzer soll bei der Methode gibWuerfelAus selbst angeben können, wie viele Seiten der Würfel hat (es gibt z.B. auch 8-seitige oder 24-seitige Würfel). &lt;br /&gt;
#Zusätzlich soll die Summe der Würfe ausgegeben werden.&lt;br /&gt;
#Bestimmen Sie den Durchschnitt aller Würfe.&lt;br /&gt;
#Immer, wenn der vorherige Wurf gleich groß war, wie der aktuelle, soll „Gleich“ auf dem Bildschirm ausgegeben werden.&lt;br /&gt;
#Realisieren Sie eine Methode, die prüft, ob bei vielen Würfen jede Zahl annähernd gleich oft fällt (Kontrolle des Pseudozufallszahlgenerators). &lt;br /&gt;
&lt;br /&gt;
Würfelexperiment2 – diesmal mit 2 Würfeln&lt;br /&gt;
#Legen Sie einen zweiten Würfel an und schreiben Sie wie oben gibWuerfelAus(...).&lt;br /&gt;
#Lassen Sie immer zuerst den größeren Würfel ausgeben.&lt;br /&gt;
#Lassen Sie anzeigen, wenn ein Pasch gewürfelt wurde.&lt;br /&gt;
#Immer, wenn der vorherige Wurf von der Summe her gleich groß war, wie der aktuelle, soll „Gleich“ auf dem Bildschirm ausgegeben werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Fakultät ===&lt;br /&gt;
Das folgende Beispiel zeigt, wie sich die while-Schleife zur Berechnung der Fakultät einsetzen kann. Denkbar wäre auch ein Einsatz der for-Schleife. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 public int fakultaet(int zaehler)&lt;br /&gt;
 {&lt;br /&gt;
     int fakultaet = 1;&lt;br /&gt;
     while (zaehler &amp;gt; 1) {&lt;br /&gt;
         fakultaet *= zaehler;&lt;br /&gt;
         zaehler--;&lt;br /&gt;
     }&lt;br /&gt;
     return fakultaet;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== do-while-Schleife ==&lt;br /&gt;
Eine &#039;&#039;&#039;do-while-Schleife&#039;&#039;&#039; ist in der Programmierung eine „&#039;&#039;fußgesteuerte&#039;&#039; oder &#039;&#039;nachprüfende&#039;&#039; Schleife, bei der nach dem Durchlauf des Schleifenrumpfes die Abbruchbedingung überprüft wird“&amp;lt;ref&amp;gt;{{ wpde|Schleife (Programmierung)}}; 13.12.2006&amp;lt;/ref&amp;gt; (meist als DO-WHILE, das entspricht &#039;&#039;ausführen-während&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Mensch ärgere dich nicht&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int wuerfel;&lt;br /&gt;
do {&lt;br /&gt;
  wuerfel=(int) (Math.random()*6+1);&lt;br /&gt;
} while (wuerfel!=6);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dh. würfele solange, bis eine 6 gefallen ist, bzw. andersherum: wiederhole das Würfeln solange, solange das Würfelergebnis nicht 6 ist.&lt;br /&gt;
&lt;br /&gt;
Dabei muss mindestens einmal gewürfelt werden.&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Logische Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=Funktionsplotter mit Turtle Grafik|weiterlink=Java/Turtle-Grafik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* {{wpde|Schleife (Programmierung)}}&lt;br /&gt;
* {{wpde|Bubblesort#Java}} - Bubblesort mit do-while-Schleife&lt;br /&gt;
* wikibooks: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kurzeinstieg Java: Kontrollstrukturen] &lt;br /&gt;
* http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Loop.htm&lt;br /&gt;
* http://programmingwiki.de/Java/for-Schleife (Kopie dieser Seite hier - mit ausführbarem Quellcode)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:ZUM2Edutags]]&lt;br /&gt;
&amp;lt;metakeywords&amp;gt;ZUM2Edutags,ZUM-Wiki,Java/for-Schleife,Java,for-Schleife,for,Schleife,Informatik,Programmierung,Programmieren&amp;lt;/metakeywords&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/testbereich&amp;diff=110780</id>
		<title>Benutzer:Ernst Schreier/testbereich</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Benutzer:Ernst_Schreier/testbereich&amp;diff=110780"/>
		<updated>2020-01-08T17:39:42Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== gelöschte Kapitel ==&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Schleife&amp;diff=110779</id>
		<title>Java/Schleife</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Schleife&amp;diff=110779"/>
		<updated>2020-01-08T17:33:57Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Logische Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=Funktionsplotter mit Turtle Grafik|weiterlink=Java/Turtle-Grafik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== for-Schleife ==&lt;br /&gt;
&lt;br /&gt;
Häufig benötigt man beim Programmieren eine mehrfache Ausführung eines Teilbereichs. Denkbar ist, dass ein Programmierer dazu einfach Zeilen wiederholt. So lässt sich z.B. das kleine 1 x 1 von 3 wie folgt ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
System.out.println(&amp;quot;3 x 1 = 3&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 2 = 6&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 3 = 9&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 4 = 12&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 5 = 15&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 6 = 18&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 7 = 21&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 8 = 24&amp;quot;);&lt;br /&gt;
System.out.println(&amp;quot;3 x 9 = 27&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für genau diesen Fall gibt es aber auch eine Schleife: die for-Schleife.&amp;lt;br&amp;gt; &lt;br /&gt;
Sie ist immer dann sinnvoll einsetzbar,  &lt;br /&gt;
* wenn eine bestimmte Anzahl von Wiederholungen durchgeführt werden soll.&lt;br /&gt;
* wenn eine Variable von einem bestimmten Wert bis zu einem anderen gezählt werden soll.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
for ( int faktor = 1; faktor &amp;lt;= 9; faktor ++ ) {&lt;br /&gt;
      System.out.println(&amp;quot;3 x &amp;quot; + faktor + &amp;quot; = &amp;quot; + 3*faktor );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// allgemeiner Aufbau&lt;br /&gt;
&lt;br /&gt;
for ( int Zählvariable mit Initialisierung; Abbruchbedingung; Inkrementierung) {&lt;br /&gt;
      // Anweisung, die wiederholt werden soll&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anwendungsbeispiele&lt;br /&gt;
&lt;br /&gt;
for ( int i = 1; i &amp;lt;= 10; i++ ) {}  // Hochzählen von 1 bis 10&lt;br /&gt;
for ( int i = 1; i &amp;lt;= 10; i+=5 ) {} // Hochzählen in 5er-Schritten&lt;br /&gt;
for ( int i = 10; i &amp;gt;= 1; i-- ) {}  // Countdown von 10 bis 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|* Lassen Sie die Zahlen von 1 bis 100 auf dem Bildschirm ausgeben. &lt;br /&gt;
** Diesmal nur die geraden Zahlen. &lt;br /&gt;
** Diesmal von 100 bis -100. &lt;br /&gt;
* Die ungeraden Zahlen von 200 bis -1000.}}&lt;br /&gt;
{{Aufgabe|* Lassen Sie 50 mal den Buchstaben &amp;quot;A&amp;quot; auf den Bildschirm schreiben. &lt;br /&gt;
* Geben Sie alle Grossbuchstaben von A-Z durch &#039;&#039;&#039;System.out.println((char)i)&#039;&#039;&#039; aus. &lt;br /&gt;
** Informieren Sie sich dazu über die ASCII-Codierung. &lt;br /&gt;
** Die Ausgabe soll nun die Zuordnung in der Form &#039;&#039;&#039;ASCII(87) ergibt W&#039;&#039;&#039; usw. erfolgen.&lt;br /&gt;
* Implementieren Sie die &#039;&#039;&#039;Caesar-Verschlüsselung&#039;&#039;&#039;,&amp;lt;br&amp;gt; d.h. eine Verschiebung des Klartextalphabets um eine frei wählbare Zahl von Buchstaben.&lt;br /&gt;
** Informieren Sie sich dazu über den Modula-Operator %.}}&lt;br /&gt;
{{Aufgabe|* Implementieren Sie die mathematische Funktion Fakultät n!.&lt;br /&gt;
*Implementieren Sie die Berechnung des Binomialkoeffizienten (n über k).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
In den meisten Programmiersprachen gibt es die &#039;&#039;&#039;While-Schleife&#039;&#039;&#039; als &#039;&#039;&#039;Kontrollstruktur&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
* Sie dient dazu, eine Abfolge von Anweisungen mehrfach auszuführen, &#039;&#039;&#039;solange&#039;&#039;&#039; eine Bedingung erfüllt ist. &lt;br /&gt;
* Diese Bedingung wird geprüft, &#039;&#039;&#039;bevor&#039;&#039;&#039; die Anweisungsfolge abgearbeitet wird. &lt;br /&gt;
** Es kann also auch sein, dass die Abfolge gar nicht ausgeführt wird. &lt;br /&gt;
** Wenn die Bedingung ständig erfüllt ist, dann wird die Schleife zur Endlosschleife. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Die While-Schleife verwendet man normalerweise bei dynamischen Abbruchbedingungen, * die [[#for-Schleife|for-Schleife]] meistens, wenn man vorher definiert wie viele Durchläufe die Schleife hat. &lt;br /&gt;
&lt;br /&gt;
Zum Beispiel würde man für die Berechnung der Fakultät einer Zahl vorzugsweise die For-Schleife anwenden. &lt;br /&gt;
&lt;br /&gt;
=== Versteckspiel ===&lt;br /&gt;
{{Idee|&lt;br /&gt;
Mit Hilfe des folgenden Beispiels lässt sich die while-Schleife einführen. Besser ist allerdings, wenn man es mit einer [[#for-Schleife|for-Schleife]] realisiert. D.h. falls man es nutzt, sollte man dieses Beispiel vor der for-Schleife behandeln.&lt;br /&gt;
&lt;br /&gt;
;Versteckspiel: Als Suchender muss man zunächst bis 100 zählen, dann laut „Ich komme...“ rufen.  Erst dann darf man zum Suchen aufbrechen.&lt;br /&gt;
&lt;br /&gt;
Dieses simple Spiel ist ein einfacher Algorithmus:&lt;br /&gt;
 VERSTECKSPIELZÄHLUNG&lt;br /&gt;
 Die erste Zahl ist 1.&lt;br /&gt;
 Prüfe, ob die 100 erreicht wurde&lt;br /&gt;
 Wenn das noch nicht erfüllt ist, sage die Zahl und erhöhe die Zahl um eins.&lt;br /&gt;
 Wenn doch, dann rufe „Ich komme“&lt;br /&gt;
&lt;br /&gt;
Mit while (engl. solange) lassen sich Programmabläufe abhängig von einer Bedingung wiederholen. Die Bedingung wird vor Ausführung der Anweisung abgefragt (&amp;quot;prechecked loop&amp;quot;,  &amp;quot;kopfgesteuerte Schleife&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Solange &amp;lt;Bedingung erfüllt&amp;gt; führe &amp;lt;Anweisung&amp;gt; aus.&lt;br /&gt;
;Java-Syntax:         &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   while (Bedingung) &lt;br /&gt;
   {&lt;br /&gt;
      Anweisungsblock (was soll wiederholt werden?)&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So sähe das Verstecken-Beispiel als Methode der Klasse Verstecken aus. Der Computer schreibt die Zahlen von 1 bis zahl in die Konsole.&lt;br /&gt;
&lt;br /&gt;
;Hinweis: Wenn die oberen Zahlen nicht mehr zu sehen sind, liegt das an der Konsole, die nur begrenzt viele Zeilen zulässt. Das Problem kann man umgehen, indem man statt println ein print einsetzt. Dann wird nicht bei jeder Zahl eine neue Zeile begonnen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Verstecken&lt;br /&gt;
{&lt;br /&gt;
      public void zaehleBisZahlundRufe(int zahl)&lt;br /&gt;
      {&lt;br /&gt;
        int x;                            // Eine Zählvariable x&lt;br /&gt;
        x=1;                              // Anfangswert für x&lt;br /&gt;
        while (x &amp;lt;= zahl) {   &lt;br /&gt;
            System.out.println (x);       // schreibe x auf die Konsole&lt;br /&gt;
            x++;                          // erhöhe x um 1&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println (&amp;quot;Ich komme...!&amp;quot;); &lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Endlosschleife ===&lt;br /&gt;
&lt;br /&gt;
Eine Schleife, die (eigentlich) niemals endet und dabei den Computer völlig auslastet ist eine typische Ursache für Abstürze.&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode ist eine Endlosschleife, die unendlich lange ausgeführt würde, wenn niemand die Ausführung stoppen würde. Typischer Fehler: Es wird x als Bedingung abgefragt: (x&amp;lt;100) , aber es wird x nicht innerhalb der Schleife verändert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
    public void führeEndlosschleifeAus(){&lt;br /&gt;
      int x; // Eine Zählvariable x&lt;br /&gt;
      x=1;   // Anfangswert für x&lt;br /&gt;
      while (x &amp;lt;= 100) {   &lt;br /&gt;
          System.out.println (x);       // schreibe x auf die Konsole&lt;br /&gt;
          // Typischer Fehler: x wird in der Schleife nicht erhöht.                     &lt;br /&gt;
      }   &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Bevor Sie die Methode ausprobieren, lesen Sie zunächst, wie man in [[BlueJ]] Programmausführungen stoppt:&lt;br /&gt;
&lt;br /&gt;
==== Notunterbrechungen bei BlueJ ====&lt;br /&gt;
&lt;br /&gt;
Mit Strg+Umschalt+R setzen Sie die Virtuelle Maschine zurück, was eine Beendigung der aktuell ausgeührten Methode bewirkt. Sie können auch auf der rot-weißen Ausführungsnanzeige mit der rechten Maustaste das Kontextmenu hervorholen und die Ausführung damit stoppen.&lt;br /&gt;
&lt;br /&gt;
{{Übung| &lt;br /&gt;
# Analysieren Sie die Methode zaehleBisZahlundRufe (int zahl), indem Sie folgende Dinge zunächst durchdenken und dann testen:&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf 1 als zahl übergeben.&lt;br /&gt;
#* Was passiert, wenn Sie beim Methodenaufruf negative Zahlen eingeben.&lt;br /&gt;
#* Was verändert sich, wenn die Zeile mit x++ über der System.out Zeile steht?&lt;br /&gt;
#* Wie können Sie in Zweierschritten zählen?&lt;br /&gt;
#* Warum wird „Ich komme“ nur ein mal ausgegeben?&lt;br /&gt;
# Verändern Sie die Methode so, dass ein Coutntdown heruntergezählt wird.&lt;br /&gt;
# Lassen Sie neben zahl auch die Variable schwrittweite übergeben. Sie soll bestimmen, in wie großen Schritten heraufgezählt werden soll (z.B. Schrittwete 3 ergibt: 1, 4, 7, 10...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Übungen mit while und Zufallszahlen ===&lt;br /&gt;
&lt;br /&gt;
Übungen zu Zufallszahlen eignen sich, um die Interaktion zwischen verschiedenen Klassen zu demonstrieren. Die recht einfache Klasse Zufallszahl sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Zufallszahl&lt;br /&gt;
{&lt;br /&gt;
        private int zufallszahl;&lt;br /&gt;
    &lt;br /&gt;
        // gibt eine Zufallszahl zwischen 1 und maximum zurück&lt;br /&gt;
        public int getZufallszahl(int maximum)&lt;br /&gt;
        {               &lt;br /&gt;
                return (int) (Math.random()*maximum+1);&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Klasse kann man nun auf einfache Weise in anderen Klassen verwenden. Eine Eigenschaft z.B. wuerfel vom Typ Zufallszahl wird vorbereitet (vgl. erste Zeilen).&lt;br /&gt;
&lt;br /&gt;
Nun lassen sich mit wuerfel.getZufallszahl(6) Zufallszahlen zwischen 1 und 6 bestimmen, die man z.B. ausgeben kann (erste Methode) oder einer Variable zuweisen kann (zweite Methode).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Wuerfelexperiment1&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    private Zufallszahl wuerfel;&lt;br /&gt;
    &lt;br /&gt;
    public Wuerfelexperiment1 (){&lt;br /&gt;
        wuerfel=new Zufallszahl();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void gibWuerfelAus(int anzahl)&lt;br /&gt;
    {&lt;br /&gt;
        int i=1;&lt;br /&gt;
        while (i&amp;lt;=anzahl){&lt;br /&gt;
            System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+wuerfel.getZufallszahl(6));&lt;br /&gt;
            i++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    public void wuerfeleBisZurSechs()&lt;br /&gt;
    {&lt;br /&gt;
        int i=1;&lt;br /&gt;
        &lt;br /&gt;
        // Erster Wurf muss auf jeden Fall durchgeführt werden&lt;br /&gt;
        int zwischenspeicher=wuerfel.getZufallszahl(6);&lt;br /&gt;
        System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+zwischenspeicher);&lt;br /&gt;
 &lt;br /&gt;
        // weitere Würfe&lt;br /&gt;
        while (zwischenspeicher!=6){&lt;br /&gt;
            i++;&lt;br /&gt;
            zwischenspeicher=wuerfel.getZufallszahl(6);&lt;br /&gt;
            System.out.println(&amp;quot;Wurf &amp;quot;+i+ &amp;quot; ist &amp;quot;+zwischenspeicher);  &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
#Der Benutzer soll bei der Methode gibWuerfelAus selbst angeben können, wie viele Seiten der Würfel hat (es gibt z.B. auch 8-seitige oder 24-seitige Würfel). &lt;br /&gt;
#Zusätzlich soll die Summe der Würfe ausgegeben werden.&lt;br /&gt;
#Bestimmen Sie den Durchschnitt aller Würfe.&lt;br /&gt;
#Immer, wenn der vorherige Wurf gleich groß war, wie der aktuelle, soll „Gleich“ auf dem Bildschirm ausgegeben werden.&lt;br /&gt;
#Realisieren Sie eine Methode, die prüft, ob bei vielen Würfen jede Zahl annähernd gleich oft fällt (Kontrolle des Pseudozufallszahlgenerators). &lt;br /&gt;
&lt;br /&gt;
Würfelexperiment2 – diesmal mit 2 Würfeln&lt;br /&gt;
#Legen Sie einen zweiten Würfel an und schreiben Sie wie oben gibWuerfelAus(...).&lt;br /&gt;
#Lassen Sie immer zuerst den größeren Würfel ausgeben.&lt;br /&gt;
#Lassen Sie anzeigen, wenn ein Pasch gewürfelt wurde.&lt;br /&gt;
#Immer, wenn der vorherige Wurf von der Summe her gleich groß war, wie der aktuelle, soll „Gleich“ auf dem Bildschirm ausgegeben werden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Fakultät ===&lt;br /&gt;
Das folgende Beispiel zeigt, wie sich die while-Schleife zur Berechnung der Fakultät einsetzen kann. Denkbar wäre auch ein Einsatz der for-Schleife. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 public int fakultaet(int zaehler)&lt;br /&gt;
 {&lt;br /&gt;
     int fakultaet = 1;&lt;br /&gt;
     while (zaehler &amp;gt; 1) {&lt;br /&gt;
         fakultaet *= zaehler;&lt;br /&gt;
         zaehler--;&lt;br /&gt;
     }&lt;br /&gt;
     return fakultaet;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== do-while-Schleife ==&lt;br /&gt;
Eine &#039;&#039;&#039;do-while-Schleife&#039;&#039;&#039; ist in der Programmierung eine „&#039;&#039;fußgesteuerte&#039;&#039; oder &#039;&#039;nachprüfende&#039;&#039; Schleife, bei der nach dem Durchlauf des Schleifenrumpfes die Abbruchbedingung überprüft wird“&amp;lt;ref&amp;gt;{{ wpde|Schleife (Programmierung)}}; 13.12.2006&amp;lt;/ref&amp;gt; (meist als DO-WHILE, das entspricht &#039;&#039;ausführen-während&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Mensch ärgere dich nicht&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
int wuerfel;&lt;br /&gt;
do {&lt;br /&gt;
  wuerfel=(int) (Math.random()*6+1);&lt;br /&gt;
} while (wuerfel!=6);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dh. würfele solange, bis eine 6 gefallen ist, bzw. andersherum: wiederhole das Würfeln solange, solange das Würfelergebnis nicht 6 ist.&lt;br /&gt;
&lt;br /&gt;
Dabei muss mindestens einmal gewürfelt werden.&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Algorithmik&amp;lt;br&amp;gt;Logische Operatoren|vorherlink=Java/Algorithmik|&lt;br /&gt;
weiter=Funktionsplotter mit Turtle Grafik|weiterlink=Java/Turtle-Grafik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* {{wpde|Schleife (Programmierung)}}&lt;br /&gt;
* {{wpde|Bubblesort#Java}} - Bubblesort mit do-while-Schleife&lt;br /&gt;
* wikibooks: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kurzeinstieg Java: Kontrollstrukturen] &lt;br /&gt;
* http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Loop.htm&lt;br /&gt;
* http://programmingwiki.de/Java/for-Schleife (Kopie dieser Seite hier - mit ausführbarem Quellcode)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:ZUM2Edutags]]&lt;br /&gt;
&amp;lt;metakeywords&amp;gt;ZUM2Edutags,ZUM-Wiki,Java/for-Schleife,Java,for-Schleife,for,Schleife,Informatik,Programmierung,Programmieren&amp;lt;/metakeywords&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=110772</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=110772"/>
		<updated>2020-01-08T16:14:03Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Ja_nein.png|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag) {&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;,&amp;lt;br&amp;gt; d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
# Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
# Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
# Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
# Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische UND-Verknüpfung (siehe unten).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind UND, ODER und NICHT.&amp;lt;br&amp;gt; Wir verwenden sie täglich, wenn wir Aussagen formulieren, häufig in Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; ich eine gute schriftliche &#039;&#039;&#039;UND&#039;&#039;&#039; mündliche Note habe, bekomme ich eine gute Zeugnisnote (d.h. nur wenn beides der Fall ist):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; es regnet &#039;&#039;&#039;ODER&#039;&#039;&#039; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; es &#039;&#039;&#039;NICHT&#039;&#039;&#039; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; bedeutet &#039;&#039;&#039;NICHT a&#039;&#039;&#039; und erzeugt das &#039;&#039;&#039;Gegenteil von a&#039;&#039;&#039;. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a UND b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;sowohl a als auch b true&#039;&#039;&#039; sind. Sonst nicht.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a ODER b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;entweder a oder b oder beide true&#039;&#039;&#039; sind.&amp;lt;br&amp;gt; D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: &lt;br /&gt;
* {{wpde|Aussagenlogik}}&lt;br /&gt;
* {{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
== Weitere Beispiele ==&lt;br /&gt;
&lt;br /&gt;
=== Zahlenratespiel ===&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
# Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
# Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
=== Die kleinste aus 3 Zahlen ===&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden.&amp;lt;br&amp;gt; Die folgende Methode liefert einen Lösungsansatz, der noch nicht optimal ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
    int zwischenspeicher = x;&lt;br /&gt;
    if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
    if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
    if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
    return zwischenspeicher;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Schreiben Sie die Methode mit verschachtelten Verzeigungen}}&lt;br /&gt;
&lt;br /&gt;
=== Portorechner ===&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Realisieren Sie einen &#039;&#039;&#039;Portorechner&#039;&#039;&#039;. Verwenden Sie folgende Angaben: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de].&lt;br /&gt;
}}&lt;br /&gt;
=== Freibadkasse ===&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Schreiben Sie eine Klasse &#039;&#039;&#039;Freibadkasse&#039;&#039;&#039;, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt.&lt;br /&gt;
# Kinder unter 3 Jahren sind kostenlos.&lt;br /&gt;
# Kinder bis 12 kosten die Hälfte des Erwachsenenpreises.&lt;br /&gt;
# Ein Erwachsener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte.&lt;br /&gt;
# Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
}}&lt;br /&gt;
=== Rabatt ===&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Ein Computerhändler gibt folgende &#039;&#039;&#039;Rabatte&#039;&#039;&#039;:&lt;br /&gt;
# bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
# bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
# über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=== Kühlhaus ===&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Eine &#039;&#039;&#039;Klasse Kühlhaus&#039;&#039;&#039; hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; &lt;br /&gt;
# Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. &lt;br /&gt;
# Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt.&lt;br /&gt;
# Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=110771</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=110771"/>
		<updated>2020-01-08T16:09:07Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Ja_nein.png|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag) {&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;,&amp;lt;br&amp;gt; d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
# Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
# Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
# Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
# Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische UND-Verknüpfung (siehe unten).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind UND, ODER und NICHT.&amp;lt;br&amp;gt; Wir verwenden sie täglich, wenn wir Aussagen formulieren, häufig in Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; ich eine gute schriftliche &#039;&#039;&#039;UND&#039;&#039;&#039; mündliche Note habe, bekomme ich eine gute Zeugnisnote (d.h. nur wenn beides der Fall ist):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; es regnet &#039;&#039;&#039;ODER&#039;&#039;&#039; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; es &#039;&#039;&#039;NICHT&#039;&#039;&#039; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; bedeutet &#039;&#039;&#039;NICHT a&#039;&#039;&#039; und erzeugt das &#039;&#039;&#039;Gegenteil von a&#039;&#039;&#039;. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a UND b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;sowohl a als auch b true&#039;&#039;&#039; sind. Sonst nicht.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a ODER b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;entweder a oder b oder beide true&#039;&#039;&#039; sind.&amp;lt;br&amp;gt; D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: &lt;br /&gt;
* {{wpde|Aussagenlogik}}&lt;br /&gt;
* {{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele ===&lt;br /&gt;
&lt;br /&gt;
==== Zahlenratespiel ====&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
# Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
# Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden.&amp;lt;br&amp;gt; Die folgende Methode liefert einen Lösungsansatz, der noch nicht optimal ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
    int zwischenspeicher = x;&lt;br /&gt;
    if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
    if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
    if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
    return zwischenspeicher;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Schreiben Sie die Methode mit verschachtelten Verzeigungen}}&lt;br /&gt;
&lt;br /&gt;
==== Portorechner ====&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Realisieren Sie einen &#039;&#039;&#039;Portorechner&#039;&#039;&#039;. Verwenden Sie folgende Angaben: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de].&lt;br /&gt;
}}&lt;br /&gt;
==== Freibadkasse ====&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Schreiben Sie eine Klasse &#039;&#039;&#039;Freibadkasse&#039;&#039;&#039;, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt.&lt;br /&gt;
# Kinder unter 3 Jahren sind kostenlos.&lt;br /&gt;
# Kinder bis 12 kosten die Hälfte des Erwachsenenpreises.&lt;br /&gt;
# Ein Erwachsener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte.&lt;br /&gt;
# Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
}}&lt;br /&gt;
==== Rabatt ====&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Ein Computerhändler gibt folgende &#039;&#039;&#039;Rabatte&#039;&#039;&#039;:&lt;br /&gt;
# bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
# bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
# über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
==== Kühlhaus ====&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Eine &#039;&#039;&#039;Klasse Kühlhaus&#039;&#039;&#039; hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; &lt;br /&gt;
# Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. &lt;br /&gt;
# Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt.&lt;br /&gt;
# Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=110770</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=110770"/>
		<updated>2020-01-08T16:02:54Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Ja_nein.png|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag) {&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;,&amp;lt;br&amp;gt; d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
# Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
# Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
# Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
# Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische UND-Verknüpfung (siehe unten).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind UND, ODER und NICHT.&amp;lt;br&amp;gt; Wir verwenden sie täglich, wenn wir Aussagen formulieren, häufig in Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; ich eine gute schriftliche &#039;&#039;&#039;UND&#039;&#039;&#039; mündliche Note habe, bekomme ich eine gute Zeugnisnote (d.h. nur wenn beides der Fall ist):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; es regnet &#039;&#039;&#039;ODER&#039;&#039;&#039; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; es &#039;&#039;&#039;NICHT&#039;&#039;&#039; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; bedeutet &#039;&#039;&#039;NICHT a&#039;&#039;&#039; und erzeugt das &#039;&#039;&#039;Gegenteil von a&#039;&#039;&#039;. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a UND b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;sowohl a als auch b true&#039;&#039;&#039; sind. Sonst nicht.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a ODER b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;entweder a oder b oder beide true&#039;&#039;&#039; sind.&amp;lt;br&amp;gt; D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: &lt;br /&gt;
* {{wpde|Aussagenlogik}}&lt;br /&gt;
* {{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele ===&lt;br /&gt;
&lt;br /&gt;
==== Zahlenratespiel ====&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
# Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
# Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht optimal ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
    int zwischenspeicher = x;&lt;br /&gt;
    if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
    if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
    if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
    return zwischenspeicher;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Schreiben Sie die Methode mit verschachtelten Verzeigungen}}&lt;br /&gt;
&lt;br /&gt;
==== Portorechner, Freibadkasse, Rabatt, Kühlhaus ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen &#039;&#039;&#039;Portorechner&#039;&#039;&#039;. Verwenden Sie folgende Angaben: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de].&lt;br /&gt;
# Schreiben Sie eine Klasse &#039;&#039;&#039;Freibadkasse&#039;&#039;&#039;, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt.&lt;br /&gt;
#*Kinder unter 3 Jahren sind kostenlos.&lt;br /&gt;
#*Kinder bis 12 kosten die Hälfte des Erwachsenenpreises.&lt;br /&gt;
#*Ein Erwachsener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte.&lt;br /&gt;
#*Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende &#039;&#039;&#039;Rabatte&#039;&#039;&#039;:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine &#039;&#039;&#039;Klasse Kühlhaus&#039;&#039;&#039; hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; &lt;br /&gt;
#* Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. &lt;br /&gt;
#* Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt.&lt;br /&gt;
#* Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=110769</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=110769"/>
		<updated>2020-01-08T15:58:41Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Ja_nein.png|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag) {&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;,&amp;lt;br&amp;gt; d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
# Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
# Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
# Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
# Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische AND-Verknüpfung (siehe unten).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind UND, ODER und NICHT.&amp;lt;br&amp;gt; Wir verwenden sie täglich, wenn wir Aussagen formulieren, häufig in Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; ich eine gute schriftliche &#039;&#039;&#039;UND&#039;&#039;&#039; mündliche Note habe, bekomme ich eine gute Zeugnisnote (d.h. nur wenn beides der Fall ist):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; es regnet &#039;&#039;&#039;ODER&#039;&#039;&#039; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; es &#039;&#039;&#039;NICHT&#039;&#039;&#039; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; bedeutet &#039;&#039;&#039;NICHT a&#039;&#039;&#039; und erzeugt das &#039;&#039;&#039;Gegenteil von a&#039;&#039;&#039;. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a UND b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;sowohl a als auch b true&#039;&#039;&#039; sind. Sonst nicht.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a ODER b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;entweder a oder b oder beide true&#039;&#039;&#039; sind.&amp;lt;br&amp;gt; D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: &lt;br /&gt;
* {{wpde|Aussagenlogik}}&lt;br /&gt;
* {{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele ===&lt;br /&gt;
&lt;br /&gt;
==== Zahlenratespiel ====&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
# Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
# Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht optimal ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
    int zwischenspeicher = x;&lt;br /&gt;
    if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
    if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
    if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
    return zwischenspeicher;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Schreiben Sie die Methode mit verschachtelten Verzeigungen}}&lt;br /&gt;
&lt;br /&gt;
==== Portorechner, Freibadkasse, Rabatt, Kühlhaus ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen &#039;&#039;&#039;Portorechner&#039;&#039;&#039;. Verwenden Sie folgende Angaben: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de].&lt;br /&gt;
# Schreiben Sie eine Klasse &#039;&#039;&#039;Freibadkasse&#039;&#039;&#039;, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt.&lt;br /&gt;
#*Kinder unter 3 Jahren sind kostenlos.&lt;br /&gt;
#*Kinder bis 12 kosten die Hälfte des Erwachsenenpreises.&lt;br /&gt;
#*Ein Erwachsener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte.&lt;br /&gt;
#*Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende &#039;&#039;&#039;Rabatte&#039;&#039;&#039;:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine &#039;&#039;&#039;Klasse Kühlhaus&#039;&#039;&#039; hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; &lt;br /&gt;
#* Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. &lt;br /&gt;
#* Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt.&lt;br /&gt;
#* Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109447</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109447"/>
		<updated>2019-11-27T18:48:47Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Interaktion zwischen Objekten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  auszahlen(pBetrag);  &lt;br /&gt;
  pZielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal &#039;&#039;&#039;zwei Übergabeparameter&#039;&#039;&#039;, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &lt;br /&gt;
**&#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &lt;br /&gt;
**&#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &#039;&#039;private&#039;&#039;!&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double pBetrag, Konto pZielkonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
===Der Zähler===&lt;br /&gt;
* Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
* Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn... &lt;br /&gt;
* Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler{&lt;br /&gt;
    // Instanzvariablen der Eigenschaften&lt;br /&gt;
    int zaehlerstand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Zaehler(){  &lt;br /&gt;
        // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
        zaehlerstand=0;&lt;br /&gt;
    }&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void erhoeheZaehlerstand(){&lt;br /&gt;
        zaehlerstand += 1;&lt;br /&gt;
        // oder zaehlerstand++;&lt;br /&gt;
        // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
* Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. &lt;br /&gt;
* Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten.&lt;br /&gt;
* Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Telefonbuch {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
&lt;br /&gt;
    // Anfang Variablen&lt;br /&gt;
    public String name;&lt;br /&gt;
    public String telefonnummer;&lt;br /&gt;
    // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
        // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Anfang Ereignisprozeduren&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public String getTelefonnummer() {&lt;br /&gt;
        return telefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
        telefonnummer = pTelefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public String getName() {&lt;br /&gt;
        return name;&lt;br /&gt;
    }&lt;br /&gt;
    // Ende Ereignisprozeduren&lt;br /&gt;
}}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.&lt;br /&gt;
* Die manipulierenden Methoden &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt; beeinflussen den aktuellen Füllstand.&lt;br /&gt;
* Die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt; gibt die Reichweite in km zurück, der beim aktuellen Füllstand noch gefahren werden kann. &lt;br /&gt;
* Die Probleme der Klasse liegen noch darin, dass man (über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Auto {&lt;br /&gt;
    private double volumenTank;&lt;br /&gt;
    private double verbrauchAuf100km;&lt;br /&gt;
    private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
        volumenTank = pVolumenTank;&lt;br /&gt;
        verbrauchAuf100km = pVerbrauchAuf100km;&lt;br /&gt;
        aktuellerFuellstand = 0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
        aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getAktuellerFuellstand() {&lt;br /&gt;
        return aktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVerbrauchAuf100km() {&lt;br /&gt;
        return verbrauchAuf100km;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVolumenTank() {&lt;br /&gt;
        return volumenTank;&lt;br /&gt;
    }&lt;br /&gt;
    public void tanke(double menge) {&lt;br /&gt;
        this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
    }&lt;br /&gt;
    public void fahre(double pKilometerZahl) {&lt;br /&gt;
        // Die Formel sagt folgendes aus:&lt;br /&gt;
        // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
        aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
    }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;gt;schuhgrösse&amp;lt;/code&amp;gt;).&lt;br /&gt;
## Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109446</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109446"/>
		<updated>2019-11-27T18:47:27Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Interaktion zwischen Objekten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  auszahlen(pBetrag);  &lt;br /&gt;
  pZielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal &#039;&#039;&#039;zwei Übergabeparameter&#039;&#039;&#039;, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &lt;br /&gt;
**&#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &lt;br /&gt;
**&#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &#039;&#039;private&#039;&#039;!&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double pBetrag, Konto pZielkonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern.&amp;lt;br&amp;gt; Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
===Der Zähler===&lt;br /&gt;
* Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
* Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn... &lt;br /&gt;
* Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler{&lt;br /&gt;
    // Instanzvariablen der Eigenschaften&lt;br /&gt;
    int zaehlerstand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Zaehler(){  &lt;br /&gt;
        // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
        zaehlerstand=0;&lt;br /&gt;
    }&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void erhoeheZaehlerstand(){&lt;br /&gt;
        zaehlerstand += 1;&lt;br /&gt;
        // oder zaehlerstand++;&lt;br /&gt;
        // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
* Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. &lt;br /&gt;
* Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten.&lt;br /&gt;
* Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Telefonbuch {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
&lt;br /&gt;
    // Anfang Variablen&lt;br /&gt;
    public String name;&lt;br /&gt;
    public String telefonnummer;&lt;br /&gt;
    // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
        // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Anfang Ereignisprozeduren&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public String getTelefonnummer() {&lt;br /&gt;
        return telefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
        telefonnummer = pTelefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public String getName() {&lt;br /&gt;
        return name;&lt;br /&gt;
    }&lt;br /&gt;
    // Ende Ereignisprozeduren&lt;br /&gt;
}}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.&lt;br /&gt;
* Die manipulierenden Methoden &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt; beeinflussen den aktuellen Füllstand.&lt;br /&gt;
* Die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt; gibt die Reichweite in km zurück, der beim aktuellen Füllstand noch gefahren werden kann. &lt;br /&gt;
* Die Probleme der Klasse liegen noch darin, dass man (über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Auto {&lt;br /&gt;
    private double volumenTank;&lt;br /&gt;
    private double verbrauchAuf100km;&lt;br /&gt;
    private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
        volumenTank = pVolumenTank;&lt;br /&gt;
        verbrauchAuf100km = pVerbrauchAuf100km;&lt;br /&gt;
        aktuellerFuellstand = 0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
        aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getAktuellerFuellstand() {&lt;br /&gt;
        return aktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVerbrauchAuf100km() {&lt;br /&gt;
        return verbrauchAuf100km;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVolumenTank() {&lt;br /&gt;
        return volumenTank;&lt;br /&gt;
    }&lt;br /&gt;
    public void tanke(double menge) {&lt;br /&gt;
        this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
    }&lt;br /&gt;
    public void fahre(double pKilometerZahl) {&lt;br /&gt;
        // Die Formel sagt folgendes aus:&lt;br /&gt;
        // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
        aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
    }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;gt;schuhgrösse&amp;lt;/code&amp;gt;).&lt;br /&gt;
## Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109445</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109445"/>
		<updated>2019-11-27T18:46:09Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Interaktion zwischen Objekten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  auszahlen(pBetrag);  &lt;br /&gt;
  pZielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal &#039;&#039;&#039;zwei Übergabeparameter&#039;&#039;&#039;, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &lt;br /&gt;
**&#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &lt;br /&gt;
**&#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &#039;&#039;private&#039;&#039;!&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern.&amp;lt;br&amp;gt; Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
===Der Zähler===&lt;br /&gt;
* Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
* Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn... &lt;br /&gt;
* Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler{&lt;br /&gt;
    // Instanzvariablen der Eigenschaften&lt;br /&gt;
    int zaehlerstand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Zaehler(){  &lt;br /&gt;
        // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
        zaehlerstand=0;&lt;br /&gt;
    }&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void erhoeheZaehlerstand(){&lt;br /&gt;
        zaehlerstand += 1;&lt;br /&gt;
        // oder zaehlerstand++;&lt;br /&gt;
        // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
* Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. &lt;br /&gt;
* Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten.&lt;br /&gt;
* Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Telefonbuch {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
&lt;br /&gt;
    // Anfang Variablen&lt;br /&gt;
    public String name;&lt;br /&gt;
    public String telefonnummer;&lt;br /&gt;
    // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
        // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Anfang Ereignisprozeduren&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public String getTelefonnummer() {&lt;br /&gt;
        return telefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
        telefonnummer = pTelefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public String getName() {&lt;br /&gt;
        return name;&lt;br /&gt;
    }&lt;br /&gt;
    // Ende Ereignisprozeduren&lt;br /&gt;
}}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.&lt;br /&gt;
* Die manipulierenden Methoden &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt; beeinflussen den aktuellen Füllstand.&lt;br /&gt;
* Die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt; gibt die Reichweite in km zurück, der beim aktuellen Füllstand noch gefahren werden kann. &lt;br /&gt;
* Die Probleme der Klasse liegen noch darin, dass man (über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Auto {&lt;br /&gt;
    private double volumenTank;&lt;br /&gt;
    private double verbrauchAuf100km;&lt;br /&gt;
    private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
        volumenTank = pVolumenTank;&lt;br /&gt;
        verbrauchAuf100km = pVerbrauchAuf100km;&lt;br /&gt;
        aktuellerFuellstand = 0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
        aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getAktuellerFuellstand() {&lt;br /&gt;
        return aktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVerbrauchAuf100km() {&lt;br /&gt;
        return verbrauchAuf100km;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVolumenTank() {&lt;br /&gt;
        return volumenTank;&lt;br /&gt;
    }&lt;br /&gt;
    public void tanke(double menge) {&lt;br /&gt;
        this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
    }&lt;br /&gt;
    public void fahre(double pKilometerZahl) {&lt;br /&gt;
        // Die Formel sagt folgendes aus:&lt;br /&gt;
        // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
        aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
    }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;gt;schuhgrösse&amp;lt;/code&amp;gt;).&lt;br /&gt;
## Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109444</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109444"/>
		<updated>2019-11-27T18:44:41Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Interaktion zwischen Objekten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  pZielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal &#039;&#039;&#039;zwei Übergabeparameter&#039;&#039;&#039;, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &lt;br /&gt;
**&#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &lt;br /&gt;
**&#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &#039;&#039;private&#039;&#039;!&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern.&amp;lt;br&amp;gt; Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
===Der Zähler===&lt;br /&gt;
* Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
* Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn... &lt;br /&gt;
* Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler{&lt;br /&gt;
    // Instanzvariablen der Eigenschaften&lt;br /&gt;
    int zaehlerstand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Zaehler(){  &lt;br /&gt;
        // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
        zaehlerstand=0;&lt;br /&gt;
    }&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void erhoeheZaehlerstand(){&lt;br /&gt;
        zaehlerstand += 1;&lt;br /&gt;
        // oder zaehlerstand++;&lt;br /&gt;
        // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
* Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. &lt;br /&gt;
* Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten.&lt;br /&gt;
* Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Telefonbuch {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
&lt;br /&gt;
    // Anfang Variablen&lt;br /&gt;
    public String name;&lt;br /&gt;
    public String telefonnummer;&lt;br /&gt;
    // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
        // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Anfang Ereignisprozeduren&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public String getTelefonnummer() {&lt;br /&gt;
        return telefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
        telefonnummer = pTelefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public String getName() {&lt;br /&gt;
        return name;&lt;br /&gt;
    }&lt;br /&gt;
    // Ende Ereignisprozeduren&lt;br /&gt;
}}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.&lt;br /&gt;
* Die manipulierenden Methoden &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt; beeinflussen den aktuellen Füllstand.&lt;br /&gt;
* Die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt; gibt die Reichweite in km zurück, der beim aktuellen Füllstand noch gefahren werden kann. &lt;br /&gt;
* Die Probleme der Klasse liegen noch darin, dass man (über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Auto {&lt;br /&gt;
    private double volumenTank;&lt;br /&gt;
    private double verbrauchAuf100km;&lt;br /&gt;
    private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
        volumenTank = pVolumenTank;&lt;br /&gt;
        verbrauchAuf100km = pVerbrauchAuf100km;&lt;br /&gt;
        aktuellerFuellstand = 0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
        aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getAktuellerFuellstand() {&lt;br /&gt;
        return aktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVerbrauchAuf100km() {&lt;br /&gt;
        return verbrauchAuf100km;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVolumenTank() {&lt;br /&gt;
        return volumenTank;&lt;br /&gt;
    }&lt;br /&gt;
    public void tanke(double menge) {&lt;br /&gt;
        this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
    }&lt;br /&gt;
    public void fahre(double pKilometerZahl) {&lt;br /&gt;
        // Die Formel sagt folgendes aus:&lt;br /&gt;
        // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
        aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
    }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;gt;schuhgrösse&amp;lt;/code&amp;gt;).&lt;br /&gt;
## Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java&amp;diff=109318</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java&amp;diff=109318"/>
		<updated>2019-11-21T01:00:52Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lernpfad|[[Datei:Java-Logo.svg|100px|rechts|Logo]]Dieser&#039;&#039;&#039;Lernpfad&#039;&#039;&#039; führt Sie in das &#039;&#039;&#039;Programmieren mit Java&#039;&#039;&#039; ein.&lt;br /&gt;
&lt;br /&gt;
Dabei wurde der zuerst 2006 in der ZUM-Classic veröffentlichte Java-Reader von [[Benutzer:Ugh]] (Uli Piper) aktualisiert und neu formatiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Java&#039;&#039;&#039; ist eine [[Objektorientierte Programmierung|objektorientierte]], plattformunabhängige [[Programmiersprache]]. Java-Programme benötigen üblicherweise zur Ausführung eine spezielle Umgebung, die Java Virtual Machine. Der Vorteil ist, dass nur diese Umgebung an verschiedene Computer und Betriebssysteme angepasst werden braucht. Sobald dies geschehen ist, laufen auf der Plattform alle Java-Programme ohne Anpassungsarbeiten.}}&lt;br /&gt;
{{nSpalten|3|min-width=15em|&lt;br /&gt;
&#039;&#039;&#039;Java-Reader&#039;&#039;&#039;&lt;br /&gt;
# [[Java/Installation|Installation]]&lt;br /&gt;
# [[Java/Erste Schritte|Erste Schritte]]&lt;br /&gt;
#* [[Java/Erste Schritte#Hallo-Welt-Beispiel|Hallo-Welt-Beispiel]]&lt;br /&gt;
#* [[Java/Erste Schritte|Konsolenausgabe]]&lt;br /&gt;
#* Dateien speichern&lt;br /&gt;
# [[Java/Einstieg_in_die_OOP|Einstieg in die OOP]]&lt;br /&gt;
#* [[Java/Einstieg_in_die_OOP|Figuren]]&lt;br /&gt;
#* [[Java/Online-Bank|Online-Bank]]&lt;br /&gt;
# [[Java/Algorithmik|Algorithmik]]&lt;br /&gt;
#* [[Java/Algorithmik#bedingte_Anweisungen|Bedingte Anweisung]]&lt;br /&gt;
#* [[Java/Algorithmik#Operatoren|Logische Operatoren]]&lt;br /&gt;
#* [[Java/Schleife|Schleifen]]&lt;br /&gt;
#* [[Java/Turtle-Grafik|Funktionsplotter mit Turtle Grafik]]&lt;br /&gt;
#* [[Java/PQ-Formel|if...else am Beispiel der PQ-Formel]]&lt;br /&gt;
# [[Java/GUI|GUI]]&lt;br /&gt;
# [[Java/Array|Array]]&lt;br /&gt;
#* [[Java/Dateihandling|Dateihandling]]&lt;br /&gt;
#* [[Java/Schiffeversenken|Schiffe versenken]]&lt;br /&gt;
# [[Java/List|(verkettete) &#039;&#039;&#039;Listen&#039;&#039;&#039;]]&lt;br /&gt;
#* [[Java/List#Quiz|Quiz]]&lt;br /&gt;
#* [[Java/List#Zuganzeigetafel|Zuganzeigetafel]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Java in Beispielen&#039;&#039;&#039;&lt;br /&gt;
* [[Java/Ulam-Folge|Ulam-Folge]]&lt;br /&gt;
* [[Java/Monte-Carlo-Methode|Monte-Carlo-Methode]]&lt;br /&gt;
* [[Java/Mustererkennung|Mustererkennung]]&lt;br /&gt;
* [[Java/Sortieren|Sortieren]]&lt;br /&gt;
* [[Java/Klassen und Objekte|Klassen und Objekte]]  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiele und Projekte&#039;&#039;&#039;&lt;br /&gt;
* [[Java/Datentypen|Datentypen]]&lt;br /&gt;
* [[Java/String|String]]&lt;br /&gt;
* [[Java/Fußball-Turnier|Fußball-Turnier]]&lt;br /&gt;
* [[Java/ggT|ggT]] (größter gemeinsamer Teiler)&lt;br /&gt;
* [[Java/Pong|Pong]]&lt;br /&gt;
* [[Java/Rekursion|Rekursion]]&lt;br /&gt;
* [[Java/Roulette|Roulette]]&lt;br /&gt;
* [[Java/Runden|Runden]] von Zahlen&lt;br /&gt;
* [[Java/TicTacToe|TicTacToe]]&lt;br /&gt;
* [[Java/Zufallszahl|Zufallszahl]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sonstiges&#039;&#039;&#039;&lt;br /&gt;
* [[Java/Applet]]&lt;br /&gt;
* [[Java/Glossar]]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Java als Programmiersprache im Unterricht ==&lt;br /&gt;
&#039;&#039;&#039;Java&#039;&#039;&#039; wird immer häufiger als [[Programmiersprache]] im Unterricht verwendet.&lt;br /&gt;
* Entsprechend gibt es &#039;&#039;&#039;zahlreiche Literatur, Fortbildungen und Software&#039;&#039;&#039; zum Thema Java im Unterricht.&lt;br /&gt;
* Java ist &#039;&#039;&#039;kostenlos und plattformunabhängig&#039;&#039;&#039;. Java ist stabil. &lt;br /&gt;
* Java ist auf den ersten Blick &#039;&#039;&#039;bedienerunfreundlich&#039;&#039;&#039;. Bereis die Tastatur-Abfrage in Programmen gestaltet sich schwierig. Andererseits gibt es &#039;&#039;&#039;Software, die diese Mängel ausgleicht&#039;&#039;&#039; (z.B. [[BlueJ]]).&lt;br /&gt;
* Da Java &#039;&#039;&#039;objektorientiert&#039;&#039;&#039; ist, in der &#039;&#039;&#039;Industrie häufig benutzt&#039;&#039;&#039; wird und aktuell weite &#039;&#039;&#039;Verbreitung auf Handys&#039;&#039;&#039; genießt, lässt sich sagen, dass Java im Trend ist und für Schüler daher &#039;&#039;&#039;motivierend&#039;&#039;&#039;.&lt;br /&gt;
* Vom Anspruch an die Rechner ist Java zwar &#039;&#039;&#039;speicherhungrig&#039;&#039;&#039; (mögl. mind. 128MB RAM), stellt aber &#039;&#039;&#039;keine hohen Erwartungen an den Prozessor&#039;&#039;&#039; (Pentium II möglich).&lt;br /&gt;
* &#039;&#039;&#039;Fazit:&#039;&#039;&#039; Die Hürde zum ersten Pieps ist hoch, wird aber dadurch ausgeglichen, dass man eine moderne und vielseitige Sprache im Unterricht hat, mit der man sämtliche Anwendungen schreiben kann.&lt;br /&gt;
&lt;br /&gt;
==Weblinks ==&lt;br /&gt;
=== Tutorials (extern) ===&lt;br /&gt;
* [http://www.u-helmich.de/inf/ Online Material] von U. Helmich&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/java-toc.html Java Tutorial interaktiv — Programmieren lernen mit Java] (Klassiker, immer wieder aktualisiert!) &lt;br /&gt;
* [[Bild:Wikibooks20.gif]] [[wikipedia:b:Kurzeinstieg Java|Kurzeinstieg Java]] - Ein Wikibook-Kurs im Aufbau &lt;br /&gt;
* [http://www.programmierkurs-java.de/ Programmierkurs der Uni Oldenburg] - Den Kurs gibt es in verschiedenen Varianten (Powerpoint- und PDF-Folien, Filme) zusammen mit Übungen und Beispielprogrammen.&lt;br /&gt;
* [http://www.bastie.de/java/howto/index.html How to &amp;amp;hellip; Make Java]&lt;br /&gt;
&lt;br /&gt;
=== Bücher ===&lt;br /&gt;
* [http://www.bluej.org/objects-first/ Java lernen mit BlueJ. Eine Einführung in die objektorientierte Programmierung]&lt;br /&gt;
* [http://www.golem.de/0612/49477.html Buch zu Java 6 zum kostenlosen Download]&lt;br /&gt;
&lt;br /&gt;
* [http://www.javabuch.de/download.html Handbuch der Java-Programmierung] - Auch das neueste Buch des Standardwerkes (Nachfolger von &amp;quot;Go To Java 2&amp;quot;) von Guido Kröger kann als gepackte Datei in Form von HTML-Seiten heruntergeladen werden. Dazu gibt es auch Beispieldateien.&lt;br /&gt;
* &#039;&#039;&#039;Java ist auch eine Insel&#039;&#039;&#039; -  bei [http://www.galileocomputing.de/katalog/openbook/ Galileo-Open-Books] herunterladbar.&lt;br /&gt;
* &#039;&#039;&#039;Java 2&#039;&#039;&#039; Buch, das bei [http://www.galileocomputing.de/katalog/openbook/ Galileo-Open-Books] heruntergeladen werden können.&lt;br /&gt;
* &#039;&#039;&#039;Thinking in Java, 3rd Edition&#039;&#039;&#039; - [http://www.linuxguruz.org/ebooks/eckel/TIJ-3rd-edition2.0.zip Download]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java|!]]&lt;br /&gt;
[[Kategorie:ZUM2Edutags]]&amp;lt;metakeywords&amp;gt;ZUM2Edutags,ZUM-Wiki,ZUM.de,OER,Java,Programmiersprache&amp;lt;/metakeywords&amp;gt;&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;br /&gt;
[[Kategorie:Programmiersprache]]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109317</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109317"/>
		<updated>2019-11-21T00:54:58Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Anwendung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Einseitige Auswahl svg.svg|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag){&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;, d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
## Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
## Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
## Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
## Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische AND-Verknüpfung (siehe unten).&lt;br /&gt;
# Realisieren Sie eine &#039;&#039;&#039;Klasse Zahlenratespiel&#039;&#039;&#039;. &lt;br /&gt;
## Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
## Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
## Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind UND, ODER und NICHT. Wir verwenden sie täglich, wenn wir Aussagen formulieren, häufig in Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; ich eine gute schriftliche &#039;&#039;&#039;UND&#039;&#039;&#039; mündliche Note habe, bekomme ich eine gute Zeugnisnote (d.h. nur wenn beides der Fall ist):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; es regnet &#039;&#039;&#039;ODER&#039;&#039;&#039; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; es &#039;&#039;&#039;NICHT&#039;&#039;&#039; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; bedeutet &#039;&#039;&#039;NICHT a&#039;&#039;&#039; und erzeugt das &#039;&#039;&#039;Gegenteil von a&#039;&#039;&#039;. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a UND b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;sowohl a als auch b true&#039;&#039;&#039; sind. Sonst nicht.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a ODER b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;entweder a oder b oder beide true&#039;&#039;&#039; sind.&amp;lt;br&amp;gt; D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: &lt;br /&gt;
* {{wpde|Aussagenlogik}}&lt;br /&gt;
* {{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
=== Weitere Beispiele ===&lt;br /&gt;
&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht optimal ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
    int zwischenspeicher = x;&lt;br /&gt;
    if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
    if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
    if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
    return zwischenspeicher;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Schreiben Sie die Methode mit verschachtelten Verzeigungen}}&lt;br /&gt;
&lt;br /&gt;
==== Portorechner, Freibadkasse, Rabatt, Kühlhaus ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen &#039;&#039;&#039;Portorechner&#039;&#039;&#039;. Verwenden Sie folgende Angaben: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de].&lt;br /&gt;
# Schreiben Sie eine Klasse &#039;&#039;&#039;Freibadkasse&#039;&#039;&#039;, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt.&lt;br /&gt;
#*Kinder unter 3 Jahren sind kostenlos.&lt;br /&gt;
#*Kinder bis 12 kosten die Hälfte des Erwachsenenpreises.&lt;br /&gt;
#*Ein Erwachsener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte.&lt;br /&gt;
#*Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende &#039;&#039;&#039;Rabatte&#039;&#039;&#039;:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine &#039;&#039;&#039;Klasse Kühlhaus&#039;&#039;&#039; hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; &lt;br /&gt;
#* Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. &lt;br /&gt;
#* Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt.&lt;br /&gt;
#* Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109316</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109316"/>
		<updated>2019-11-21T00:51:52Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: Aufgaben statt Übungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Einseitige Auswahl svg.svg|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag){&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;, d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
## Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
## Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
## Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
## Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische AND-Verknüpfung (siehe unten).&lt;br /&gt;
# Realisieren Sie eine &#039;&#039;&#039;Klasse Zahlenratespiel&#039;&#039;&#039;. &lt;br /&gt;
## Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
## Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
## Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind UND, ODER und NICHT. Wir verwenden sie täglich, wenn wir Aussagen formulieren, häufig in Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; ich eine gute schriftliche &#039;&#039;&#039;UND&#039;&#039;&#039; mündliche Note habe, bekomme ich eine gute Zeugnisnote (d.h. nur wenn beides der Fall ist):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; es regnet &#039;&#039;&#039;ODER&#039;&#039;&#039; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; es &#039;&#039;&#039;NICHT&#039;&#039;&#039; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; bedeutet &#039;&#039;&#039;NICHT a&#039;&#039;&#039; und erzeugt das &#039;&#039;&#039;Gegenteil von a&#039;&#039;&#039;. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a UND b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;sowohl a als auch b true&#039;&#039;&#039; sind. Sonst nicht.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a ODER b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;entweder a oder b oder beide true&#039;&#039;&#039; sind.&amp;lt;br&amp;gt; D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: &lt;br /&gt;
* {{wpde|Aussagenlogik}}&lt;br /&gt;
* {{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
=== Anwendung===&lt;br /&gt;
&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht optimal ist.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
    int zwischenspeicher = x;&lt;br /&gt;
    if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
    if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
    if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
    return zwischenspeicher;  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Aufgabe|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt; Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Schreiben Sie die Methode mit verschachtelten Verzeigungen}}&lt;br /&gt;
==== Porto-Kalkulator ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen &#039;&#039;&#039;Portokalkulator&#039;&#039;&#039;. Verwenden Sie folgende Angaben: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de].&lt;br /&gt;
# Schreiben Sie eine Klasse &#039;&#039;&#039;Freibadkasse&#039;&#039;&#039;, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt.&lt;br /&gt;
#*Kinder unter 3 Jahren sind kostenlos.&lt;br /&gt;
#*Kinder bis 12 kosten die Hälfte des Erwachsenenpreises.&lt;br /&gt;
#*Ein Erwachsener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte.&lt;br /&gt;
#*Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende &#039;&#039;&#039;Rabatte&#039;&#039;&#039;:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine &#039;&#039;&#039;Klasse Kühlhaus&#039;&#039;&#039; hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; &lt;br /&gt;
#* Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. &lt;br /&gt;
#* Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt.&lt;br /&gt;
#* Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109315</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109315"/>
		<updated>2019-11-21T00:30:40Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Logische Operatoren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Einseitige Auswahl svg.svg|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag){&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;, d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
## Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
## Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
## Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
## Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische AND-Verknüpfung (siehe unten).&lt;br /&gt;
# Realisieren Sie eine &#039;&#039;&#039;Klasse Zahlenratespiel&#039;&#039;&#039;. &lt;br /&gt;
## Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
## Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
## Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind UND, ODER und NICHT. Wir verwenden sie täglich, wenn wir Aussagen formulieren, häufig in Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; ich eine gute schriftliche &#039;&#039;&#039;UND&#039;&#039;&#039; mündliche Note habe, bekomme ich eine gute Zeugnisnote (d.h. nur wenn beides der Fall ist):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; es regnet &#039;&#039;&#039;ODER&#039;&#039;&#039; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn&#039;&#039;&#039; es &#039;&#039;&#039;NICHT&#039;&#039;&#039; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; bedeutet &#039;&#039;&#039;NICHT a&#039;&#039;&#039; und erzeugt das &#039;&#039;&#039;Gegenteil von a&#039;&#039;&#039;. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a UND b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;sowohl a als auch b true&#039;&#039;&#039; sind. Sonst nicht.&lt;br /&gt;
* &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; bedeutet &#039;&#039;&#039;a ODER b&#039;&#039;&#039; und ist true, wenn &#039;&#039;&#039;entweder a oder b oder beide true&#039;&#039;&#039; sind.&amp;lt;br&amp;gt; D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: {{wpde|Aussagenlogik}}&lt;br /&gt;
&lt;br /&gt;
=== Anwendung===&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht vollkommen optimal ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
  int zwischenspeicher = x;&lt;br /&gt;
  if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
  if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
  if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
return zwischenspeicher;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Box|Arbeitshinweise|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt; Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Nennen Sie weitere Alltagsbeispiele für UND, ODER und NICHT. Erläutern Sie die folgende Tabelle.&lt;br /&gt;
|Arbeitsmethode}}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
{{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
==== Porto-Kalkulator ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen Portokalkulator (Daten: vgl. unten). Es gibt keine weiteren Vorgaben, außer, dass das Ergebnis kundenfreundlich sein soll.&lt;br /&gt;
# Im Freibad gilt folgende Regelung: Kinder unter 3 Jahren sind kostenlos. Kinder bis 12 kosten die Hälfte des Erwachsenenpreises. Ein Erwachsenener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte. Schreiben Sie eine Klasse Freibadkasse, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt. Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende Rabatte:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine Klasse Kühlhaus hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt. Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formate 	!! Preise 	!! Maße 	!!Gewicht 	&lt;br /&gt;
|-&lt;br /&gt;
| Standard  || 0,80 €   ||L: 14 - 23,5 cm&amp;lt;br&amp;gt;B: 9 - 12,5 cm&amp;lt;br&amp;gt;H: bis 0,5 cm || bis 20 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Kompakt   || 0,95 €   || L: 10 - 23,5 cm&amp;lt;br/&amp;gt;B: 7 - 12,5 cm&amp;lt;br&amp;gt;H: bis 1 cm  || 	bis 50 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Groß      || 1,55 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 2 cm || bis 500 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Maxi      || 2,70 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 5 cm || bis 1.000 g&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
Quelle: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de]&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109314</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109314"/>
		<updated>2019-11-21T00:14:34Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* BMI-Rechner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Einseitige Auswahl svg.svg|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag){&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;, d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
## Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
## Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
## Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
## Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische AND-Verknüpfung (siehe unten).&lt;br /&gt;
# Realisieren Sie eine &#039;&#039;&#039;Klasse Zahlenratespiel&#039;&#039;&#039;. &lt;br /&gt;
## Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
## Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
## Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt;, &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; und &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt;. Wir verwenden sie alltäglich, wenn wir Aussagen formulieren. Allerdings sind wir im Alltag häufig unpräzise. Im Alltag verwenden wir Logische Operatioren ohne es zu bemerken häufig bei Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
Wenn ich eine gute Note in der Klausur habe &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; ich im Unterricht mitmache, dann bekomme ich eine gute Note (d.h. nur wenn beides der Fall ist).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wenn es regnet &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn es &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte (also bei Java Typ &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;) a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; (bedeutet &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt; a) erzeugt das Gegenteil von a. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* Die Aussage &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; (bedeutet a &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; b) ist true, wenn sowohl a als auch b true sind. Sonst nicht.&lt;br /&gt;
* Die Aussage &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; (d.h. a &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt; b) ist true, wenn entweder a oder b oder beide true sind. D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: {{wpde|Aussagenlogik}}&lt;br /&gt;
&lt;br /&gt;
=== Anwendung===&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht vollkommen optimal ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
  int zwischenspeicher = x;&lt;br /&gt;
  if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
  if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
  if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
return zwischenspeicher;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Box|Arbeitshinweise|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt; Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Nennen Sie weitere Alltagsbeispiele für UND, ODER und NICHT. Erläutern Sie die folgende Tabelle.&lt;br /&gt;
|Arbeitsmethode}}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
{{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
==== Porto-Kalkulator ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen Portokalkulator (Daten: vgl. unten). Es gibt keine weiteren Vorgaben, außer, dass das Ergebnis kundenfreundlich sein soll.&lt;br /&gt;
# Im Freibad gilt folgende Regelung: Kinder unter 3 Jahren sind kostenlos. Kinder bis 12 kosten die Hälfte des Erwachsenenpreises. Ein Erwachsenener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte. Schreiben Sie eine Klasse Freibadkasse, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt. Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende Rabatte:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine Klasse Kühlhaus hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt. Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formate 	!! Preise 	!! Maße 	!!Gewicht 	&lt;br /&gt;
|-&lt;br /&gt;
| Standard  || 0,80 €   ||L: 14 - 23,5 cm&amp;lt;br&amp;gt;B: 9 - 12,5 cm&amp;lt;br&amp;gt;H: bis 0,5 cm || bis 20 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Kompakt   || 0,95 €   || L: 10 - 23,5 cm&amp;lt;br/&amp;gt;B: 7 - 12,5 cm&amp;lt;br&amp;gt;H: bis 1 cm  || 	bis 50 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Groß      || 1,55 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 2 cm || bis 500 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Maxi      || 2,70 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 5 cm || bis 1.000 g&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
Quelle: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de]&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109313</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109313"/>
		<updated>2019-11-21T00:13:21Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* BMI-Rechner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Einseitige Auswahl svg.svg|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag){&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;, d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Der BMI gibt lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|-&lt;br /&gt;
| Starkes Übergewicht&lt;br /&gt;
| &amp;gt; 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Entwerfen Sie die &#039;&#039;&#039;Klasse Person&#039;&#039;&#039;, die das Alter, das Gewicht und die Größe einer Person erfasst.&lt;br /&gt;
## Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
## Lassen Sie prüfen, ob die Person Unter- (&amp;lt; 20), Normal- oder Übergewicht (&amp;gt; 25) hat.&lt;br /&gt;
## Realisieren Sie nun die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“)&lt;br /&gt;
## Lassen Sie prüfen, ob die Person ihr &#039;&#039;&#039;Idealgewicht&#039;&#039;&#039; hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist. Verwenden Sie bei der Abfrage die logische AND-Verknüpfung &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Realisieren Sie eine &#039;&#039;&#039;Klasse Zahlenratespiel&#039;&#039;&#039;. &lt;br /&gt;
## Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
## Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
## Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können.}}&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt;, &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; und &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt;. Wir verwenden sie alltäglich, wenn wir Aussagen formulieren. Allerdings sind wir im Alltag häufig unpräzise. Im Alltag verwenden wir Logische Operatioren ohne es zu bemerken häufig bei Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
Wenn ich eine gute Note in der Klausur habe &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; ich im Unterricht mitmache, dann bekomme ich eine gute Note (d.h. nur wenn beides der Fall ist).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wenn es regnet &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn es &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte (also bei Java Typ &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;) a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; (bedeutet &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt; a) erzeugt das Gegenteil von a. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* Die Aussage &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; (bedeutet a &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; b) ist true, wenn sowohl a als auch b true sind. Sonst nicht.&lt;br /&gt;
* Die Aussage &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; (d.h. a &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt; b) ist true, wenn entweder a oder b oder beide true sind. D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: {{wpde|Aussagenlogik}}&lt;br /&gt;
&lt;br /&gt;
=== Anwendung===&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht vollkommen optimal ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
  int zwischenspeicher = x;&lt;br /&gt;
  if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
  if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
  if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
return zwischenspeicher;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Box|Arbeitshinweise|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt; Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Nennen Sie weitere Alltagsbeispiele für UND, ODER und NICHT. Erläutern Sie die folgende Tabelle.&lt;br /&gt;
|Arbeitsmethode}}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
{{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
==== Porto-Kalkulator ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen Portokalkulator (Daten: vgl. unten). Es gibt keine weiteren Vorgaben, außer, dass das Ergebnis kundenfreundlich sein soll.&lt;br /&gt;
# Im Freibad gilt folgende Regelung: Kinder unter 3 Jahren sind kostenlos. Kinder bis 12 kosten die Hälfte des Erwachsenenpreises. Ein Erwachsenener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte. Schreiben Sie eine Klasse Freibadkasse, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt. Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende Rabatte:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine Klasse Kühlhaus hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt. Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formate 	!! Preise 	!! Maße 	!!Gewicht 	&lt;br /&gt;
|-&lt;br /&gt;
| Standard  || 0,80 €   ||L: 14 - 23,5 cm&amp;lt;br&amp;gt;B: 9 - 12,5 cm&amp;lt;br&amp;gt;H: bis 0,5 cm || bis 20 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Kompakt   || 0,95 €   || L: 10 - 23,5 cm&amp;lt;br/&amp;gt;B: 7 - 12,5 cm&amp;lt;br&amp;gt;H: bis 1 cm  || 	bis 50 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Groß      || 1,55 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 2 cm || bis 500 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Maxi      || 2,70 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 5 cm || bis 1.000 g&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
Quelle: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de]&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109312</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109312"/>
		<updated>2019-11-20T23:47:59Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Bedingte Anweisung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Einseitige Auswahl svg.svg|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* &#039;&#039;&#039;Wenn&#039;&#039;&#039; die Bedingung eintritt,&amp;lt;br&amp;gt;dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* &#039;&#039;&#039;Sonst&#039;&#039;&#039; wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch &#039;&#039;&#039;verschachtelt&#039;&#039;&#039; werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat.&amp;lt;br&amp;gt;Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag){&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist.&lt;br /&gt;
* Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typ]] &#039;&#039;&#039;boolean&#039;&#039;&#039;, d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
* Zur kurzfristigen Speicherung wird eine &#039;&#039;&#039;lokale&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public boolean isPositiv() {&lt;br /&gt;
    boolean ergebnis;&lt;br /&gt;
    if (kontostand &amp;gt; 0) {&lt;br /&gt;
        ergebnis = true;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        ergebnis = false;   &lt;br /&gt;
    }&lt;br /&gt;
    return ergebnis;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|*Eine Variable, die innerhalb einer Methode angelegt wird, wird &#039;&#039;&#039;lokale&#039;&#039;&#039; Varia­ble genannt. &lt;br /&gt;
*Sie kann &#039;&#039;&#039;nur innerhalb&#039;&#039;&#039; der Me­thode abgefragt und verändert werden. Mit Verlassen der Methode wird sie gelöscht.&lt;br /&gt;
*Lokale Variablen lassen sich gut als kurzfristigen &#039;&#039;&#039;Zwischenspeicher&#039;&#039;&#039; einsetzen.&lt;br /&gt;
*Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. &lt;br /&gt;
*&#039;&#039;&#039;Konvention&#039;&#039;&#039;: Die &#039;&#039;&#039;Deklaration&#039;&#039;&#039; der lokalen Variable sollte &#039;&#039;&#039;direkt unter dem Kopf der Methode&#039;&#039;&#039; passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&#039;&#039;&#039;Onlinebankprojekt&#039;&#039;&#039;&lt;br /&gt;
# Fügen Sie eine &#039;&#039;&#039;Eigenschaft Dispo-Kredit&#039;&#039;&#039; mit einer get- und set-Methode ein.&lt;br /&gt;
# Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke!&lt;br /&gt;
# Erweitern Sie das Konto um eine &#039;&#039;&#039;Eigenschaft gesperrt&#039;&#039;&#039;. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Da Überge­wicht ein weltweit zunehmendes Problem darstellt, wird die Körpermassenzahl vor allem dazu verwendet, auf eine diesbezügliche Gefährdung hinzuweisen. Der BMI gibt aber lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
{{Box|Arbeitshinweise|&lt;br /&gt;
# Entwerfen Sie die Klasse Person, die das Alter, das Gewicht und die Größe einer Personerfasst. Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
# Lassen Sie prüfen, ob die Person Unter-, Normal- oder Übergewicht hat. Untergewicht soll ein Wert unter 20, Übergewicht ein Wert über 25 sein.&lt;br /&gt;
#* Fortgeschrittene: Realisieren Sie die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“, d.h. Starkes Übergewicht über BMI 30)&amp;lt;br&amp;gt;Lassen Sie prüfen, ob die Person ihr Idealgewicht hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist.&amp;lt;br&amp;gt;(Hinweis: Es ist einfacher mit &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; zu arbeiten als mit &amp;lt;code&amp;gt;if...else&amp;lt;/code&amp;gt;. Fragen Sie Ihren Lehrer!)&lt;br /&gt;
# Realisieren Sie eine Klasse Zahlenratespiel. Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
#* Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
#* Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können. |Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt;, &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; und &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt;. Wir verwenden sie alltäglich, wenn wir Aussagen formulieren. Allerdings sind wir im Alltag häufig unpräzise. Im Alltag verwenden wir Logische Operatioren ohne es zu bemerken häufig bei Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
Wenn ich eine gute Note in der Klausur habe &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; ich im Unterricht mitmache, dann bekomme ich eine gute Note (d.h. nur wenn beides der Fall ist).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wenn es regnet &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn es &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte (also bei Java Typ &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;) a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; (bedeutet &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt; a) erzeugt das Gegenteil von a. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* Die Aussage &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; (bedeutet a &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; b) ist true, wenn sowohl a als auch b true sind. Sonst nicht.&lt;br /&gt;
* Die Aussage &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; (d.h. a &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt; b) ist true, wenn entweder a oder b oder beide true sind. D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: {{wpde|Aussagenlogik}}&lt;br /&gt;
&lt;br /&gt;
=== Anwendung===&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht vollkommen optimal ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
  int zwischenspeicher = x;&lt;br /&gt;
  if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
  if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
  if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
return zwischenspeicher;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Box|Arbeitshinweise|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt; Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Nennen Sie weitere Alltagsbeispiele für UND, ODER und NICHT. Erläutern Sie die folgende Tabelle.&lt;br /&gt;
|Arbeitsmethode}}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
{{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
==== Porto-Kalkulator ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen Portokalkulator (Daten: vgl. unten). Es gibt keine weiteren Vorgaben, außer, dass das Ergebnis kundenfreundlich sein soll.&lt;br /&gt;
# Im Freibad gilt folgende Regelung: Kinder unter 3 Jahren sind kostenlos. Kinder bis 12 kosten die Hälfte des Erwachsenenpreises. Ein Erwachsenener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte. Schreiben Sie eine Klasse Freibadkasse, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt. Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende Rabatte:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine Klasse Kühlhaus hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt. Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formate 	!! Preise 	!! Maße 	!!Gewicht 	&lt;br /&gt;
|-&lt;br /&gt;
| Standard  || 0,80 €   ||L: 14 - 23,5 cm&amp;lt;br&amp;gt;B: 9 - 12,5 cm&amp;lt;br&amp;gt;H: bis 0,5 cm || bis 20 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Kompakt   || 0,95 €   || L: 10 - 23,5 cm&amp;lt;br/&amp;gt;B: 7 - 12,5 cm&amp;lt;br&amp;gt;H: bis 1 cm  || 	bis 50 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Groß      || 1,55 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 2 cm || bis 500 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Maxi      || 2,70 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 5 cm || bis 1.000 g&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
Quelle: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de]&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109311</id>
		<title>Java/Algorithmik</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Algorithmik&amp;diff=109311"/>
		<updated>2019-11-20T23:21:35Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: Text überarbeitet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
Im vorherigen Kapitel wurde beim [[Java/Online-Bank#Das_Auto|Tank-Beispiel]] bereits bemerkt, dass man nur tanken sollte, &#039;&#039;&#039;WENN&#039;&#039;&#039; der Tank noch nicht voll ist. In diesem Kapitel werden wir &#039;&#039;&#039;bedingte Anweisungen&#039;&#039;&#039; einführen, bei denen vor der Ausführung der Anweisungen erst geprüft wird, ob eine oder mehrere Bedingungen erfüllt sind. Mit diesen &#039;&#039;&#039;Kontrollstrukturen&#039;&#039;&#039; können dann auch komplexere [[Algorithmus|Algorithmen]] modelliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Bedingte Anweisung ==&lt;br /&gt;
[[Datei:Einseitige Auswahl svg.svg|miniatur|250px|[[Algorithmus#Grundstrukturen|Struktogramm]] einer if-Anweisung]]&lt;br /&gt;
Eine &#039;&#039;&#039;bedingte Anweisung&#039;&#039;&#039; ist eine der wichtigsten Bestandteile der Program­mierung, da durch sie ein Programm auf unterschiedliche Zustände und Eingaben reagieren kann. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (Bedingung) { &lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
    //Anweisungsblock&lt;br /&gt;
    … &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist folgendermaßen zu lesen: &lt;br /&gt;
* Wenn die Bedingung eintritt, dann wird der erste Anweisungsblock ausgeführt; &lt;br /&gt;
* Sonst wird der zweite Anweisungsblock ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Bedingte Anweisungen können auch verschachtelt werden:&amp;lt;br&amp;gt; &lt;br /&gt;
Im folgenden Beispiel ist im else-Zweig der ersten Verzweigung eine weitere Verzweigung untergebracht.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void prüfeZahl(int pZahl){   &lt;br /&gt;
    if (pZahl &amp;gt;= 10) {      &lt;br /&gt;
        System.out.println(pZahl + &amp;quot; ist zwei oder mehrstellig&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
        if ( pZahl &amp;lt; 0) {&lt;br /&gt;
            System.out.println(pZahl + &amp;quot;ist negativ.&amp;quot;);    &lt;br /&gt;
        }&lt;br /&gt;
        else {    &lt;br /&gt;
            System.out.println(pZahl + &amp;quot; liegt zwischen 0 und 9.999...&amp;quot;);        &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie eine Methode, die zwei ganze Zahlen als Übergabeparameter hat. Die Methode soll ausgeben, ob die erste Zahl größer, gleich oder kleiner als die zweite ist.}}&lt;br /&gt;
&lt;br /&gt;
=== Online Bank: Bedingte Auszahlung ===&lt;br /&gt;
&lt;br /&gt;
Ein konkretes Beispiel: Die Auszahlung erfolgt nur, wenn es der Kontostand zulässt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void auszahlen(double pBetrag){&lt;br /&gt;
    if (kontostand &amp;gt;= pBetrag){&lt;br /&gt;
        kontostand -= pBetrag;&lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung erfolgt: &amp;quot;+pBetrag);&lt;br /&gt;
    }&lt;br /&gt;
    else { &lt;br /&gt;
        System.out.println(&amp;quot;Auszahlung verweigert!\nEs fehlen“+(pBetrag-kontostand));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;Auf Wiedersehen!&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OnlineBank: Prüfmethode isPositiv() ===&lt;br /&gt;
&lt;br /&gt;
Die folgende Methode prüft, ob der Kontostand positiv ist. Der Rückgabewert der Methode ist vom [[Java/Glossar#Datentypen|Typen]] &#039;&#039;&#039;boolean&#039;&#039;&#039;, d.h. es wird entweder &#039;&#039;&#039;true&#039;&#039;&#039; oder &#039;&#039;&#039;false&#039;&#039;&#039; zurückgegeben.&lt;br /&gt;
Der Rückgabewert wird in einer &#039;&#039;&#039;lokalen&#039;&#039;&#039; Variable &amp;lt;code&amp;gt;ergebnis&amp;lt;/code&amp;gt; gespeichert, die nur innerhalb der Methode gültig ist. &lt;br /&gt;
&lt;br /&gt;
{{Box|Lokale Variable|Eine Variable, die innerhalb einer Methode angelegt wird, wird lokale Varia­ble genannt. Sie wird mit verlassen der Methode wieder zerstört. Sie kann nur innerhalb der Me­thode abgefragt und verändert werden. Nennt man eine lokale Variable genauso wie eine Eigenschaft der Klasse, so muss man zur Un­terscheidung das Wort &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; verwenden, um die Eigenschaft zu erreichen. Bei Namensgleichheit hat das Abfragen der lokalen Variable Priorität. Lokale Variablen lassen sich gut als kurzfristigen Zwischenspeicher einsetzen. &lt;br /&gt;
&lt;br /&gt;
Konvention: Die Deklaration der lokalen Variable sollte direkt unter dem Kopf der Methode – also direkt nach der ersten geschweiften Klammer - passieren.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;  public boolean isPositiv()&lt;br /&gt;
  {&lt;br /&gt;
     boolean ergebnis;&lt;br /&gt;
     if (kontostand &amp;gt; 0) {&lt;br /&gt;
         ergebnis = true;&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
         ergebnis = false;   &lt;br /&gt;
     }&lt;br /&gt;
     return ergebnis;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Möglich wäre auch:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;  public boolean isPositiv()&lt;br /&gt;
  {&lt;br /&gt;
     boolean ergebnis = kontostand &amp;gt; 0 ? true : false;&lt;br /&gt;
     &lt;br /&gt;
     return ergebnis;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
(Zum Onlinebankprojekt)&lt;br /&gt;
# Fügen Sie eine Eigenschaft Dispo-Kredit mit einer get- und set-Methode ein. Ändern Sie anschließend die Methoden &amp;lt;code&amp;gt;abheben()&amp;lt;/code&amp;gt; so, dass der Dispo-Kredit nicht überschritten werden kann. &lt;br /&gt;
# Durch Einzahlen eines negativen Betrages kann man den Bankautomaten austricksen. Ändern Sie diese Sicherheitslücke (umgehend ;-) ).&lt;br /&gt;
# Erweitern Sie das Konto um eine Eigenschaft „gesperrt“. Implementieren Sie die zugehörige Methode &amp;lt;code&amp;gt;isGesperrt()&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgibt, wenn das Konto gesperrt ist.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== BMI-Rechner ===&lt;br /&gt;
„Der {{wpde|Body-Mass-Index}} (BMI) ist eine Maßzahl für die Bewertung des Körpergewichts eines Menschen im Verhältnis zum Quadrat seiner Größe. Da Überge­wicht ein weltweit zunehmendes Problem darstellt, wird die Körpermassenzahl vor allem dazu verwendet, auf eine diesbezügliche Gefährdung hinzuweisen. Der BMI gibt aber lediglich einen groben Richtwert an und ist nicht unumstritten, da er die Statur eines Menschen und die individuell verschiedene Zusammensetzung des Körpergewichts aus Fett- und Muskelgewebe naturgemäß nicht berücksichtigt. Ebenso ist er für besonders große und besonders kleine Menschen nur eingeschränkt aussagefähig.&lt;br /&gt;
&lt;br /&gt;
{{Box|Arbeitshinweise|&lt;br /&gt;
# Entwerfen Sie die Klasse Person, die das Alter, das Gewicht und die Größe einer Personerfasst. Entwickeln Sie die Methode &amp;lt;code&amp;gt;getBMI()&amp;lt;/code&amp;gt;, die den BMI berechnet und zurückgibt.&lt;br /&gt;
# Lassen Sie prüfen, ob die Person Unter-, Normal- oder Übergewicht hat. Untergewicht soll ein Wert unter 20, Übergewicht ein Wert über 25 sein.&lt;br /&gt;
#* Fortgeschrittene: Realisieren Sie die gesamte Tabelle (kritisches Untergewicht und „Adi­positas“, d.h. Starkes Übergewicht über BMI 30)&amp;lt;br&amp;gt;Lassen Sie prüfen, ob die Person ihr Idealgewicht hat. Es soll &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; zurückgegeben werden, wenn das der Fall ist.&amp;lt;br&amp;gt;(Hinweis: Es ist einfacher mit &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; zu arbeiten als mit &amp;lt;code&amp;gt;if...else&amp;lt;/code&amp;gt;. Fragen Sie Ihren Lehrer!)&lt;br /&gt;
# Realisieren Sie eine Klasse Zahlenratespiel. Eine Zahl &amp;lt;code&amp;gt;zuErratendeZahl&amp;lt;/code&amp;gt; wird als Eigen­schaft vom Konstruktor gesetzt (z.B. auf 7). &lt;br /&gt;
#* Entwickeln Sie eine Methode &amp;lt;code&amp;gt;rateZahl(int zahl)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;zahl&amp;lt;/code&amp;gt; einliest und mit &amp;lt;code&amp;gt;zuErratende­Zahl&amp;lt;/code&amp;gt; vergleicht. Lassen Sie ausgeben „zu klein“, zu groß“ oder „Gewonnen!“.&lt;br /&gt;
#* Erweitern Sie die Methode um eine Abfrage: der Ratende soll nur Zahlen zwischen 1 und 10 eingeben können. |Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;grid&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kategorie !! BMI (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| Starkes Untergewicht&lt;br /&gt;
| &amp;lt; 17&lt;br /&gt;
|-&lt;br /&gt;
| Untergewicht&lt;br /&gt;
| 17 - 20&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Normalgewicht&#039;&#039;&#039;&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| Übergewicht&lt;br /&gt;
| 25 - 30&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;width-1-2&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Alter (Jahre) !! BMI-Idealwert (kg/m²) &lt;br /&gt;
|-&lt;br /&gt;
| 19 - 24&lt;br /&gt;
| 19 - 24&lt;br /&gt;
|-&lt;br /&gt;
| 25 - 34&lt;br /&gt;
| 20 - 25&lt;br /&gt;
|-&lt;br /&gt;
| 35 - 44&lt;br /&gt;
| 21 - 26&lt;br /&gt;
|-&lt;br /&gt;
| 45 - 54&lt;br /&gt;
| 22 - 27&lt;br /&gt;
|-&lt;br /&gt;
| 55 - 64&lt;br /&gt;
| 23 - 28&lt;br /&gt;
|-&lt;br /&gt;
|&amp;gt; 64&lt;br /&gt;
| 24 - 29&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Operatoren == &lt;br /&gt;
=== Vergleichsoperatoren ===&lt;br /&gt;
Um solche Bedingungen zu formulieren, brauchen Sie Vergleichsoperatoren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      &amp;lt; (kleiner)&lt;br /&gt;
      &amp;gt; (größer)&lt;br /&gt;
      &amp;lt;= (kleiner gleich)&lt;br /&gt;
      &amp;gt;= (größer gleich)&lt;br /&gt;
      == (gleich mit zwei == Zeichen)&lt;br /&gt;
      != (ungleich)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logische Operatoren ===&lt;br /&gt;
Wichtige logische Operatoren sind &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt;, &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; und &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt;. Wir verwenden sie alltäglich, wenn wir Aussagen formulieren. Allerdings sind wir im Alltag häufig unpräzise. Im Alltag verwenden wir Logische Operatioren ohne es zu bemerken häufig bei Sätzen mit „Wenn...“:&lt;br /&gt;
&lt;br /&gt;
Wenn ich eine gute Note in der Klausur habe &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; ich im Unterricht mitmache, dann bekomme ich eine gute Note (d.h. nur wenn beides der Fall ist).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if ((klausurNote &amp;lt;= 2) &amp;amp;&amp;amp; (soMiNote &amp;lt;= 2)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wenn es regnet &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt; die Sonne stark scheint, sitze ich unter einem Schirm (d.h. wenn zumindest eines erfüllt ist. Wenn es regnet und zugleich die Sonne stark scheint, sitze ich natürlich erst recht unter einem Schirm.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if ((sonneScheint == true) ||(esRegnet == true)) ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn es &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt; hell ist, dann geht die Straßenlaterne an. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;if (!(helligkeitsSensor &amp;gt; 30)) // ... das ist das gleiche wie: if (helligkeitsSensor &amp;lt;= 30) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|Für zwei boolesche Werte (also bei Java Typ &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;) a und b gilt: &lt;br /&gt;
* &#039;&#039;&#039;!a&#039;&#039;&#039; (bedeutet &amp;lt;mark&amp;gt;NICHT&amp;lt;/mark&amp;gt; a) erzeugt das Gegenteil von a. Wenn a true ist, ist !a false und andersherum.&lt;br /&gt;
* Die Aussage &#039;&#039;&#039;a &amp;amp;&amp;amp; b&#039;&#039;&#039; (bedeutet a &amp;lt;mark&amp;gt;UND&amp;lt;/mark&amp;gt; b) ist true, wenn sowohl a als auch b true sind. Sonst nicht.&lt;br /&gt;
* Die Aussage &#039;&#039;&#039;a &amp;amp;#124;&amp;amp;#124; b&#039;&#039;&#039; (d.h. a &amp;lt;mark&amp;gt;ODER&amp;lt;/mark&amp;gt; b) ist true, wenn entweder a oder b oder beide true sind. D.h. nur wenn sowohl a als auch b false sind, ist die Aussage a || b false.|Merksatz}}&lt;br /&gt;
&lt;br /&gt;
Vertiefung: {{wpde|Aussagenlogik}}&lt;br /&gt;
&lt;br /&gt;
=== Anwendung===&lt;br /&gt;
==== Die kleinste aus 3 Zahlen ====&lt;br /&gt;
Drei Zahlen werden als Parameter übergeben, die kleinste soll zurückgegeben werden. Die folgende Methode liefert einen Lösungsansatz, der noch nicht vollkommen optimal ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public int kleinsteZahl(int x, int y, int z) {&lt;br /&gt;
  int zwischenspeicher = x;&lt;br /&gt;
  if ((x&amp;lt;y) &amp;amp;&amp;amp; (x&amp;lt;z)) zwischenspeicher = x;&lt;br /&gt;
  if ((y&amp;lt;x) &amp;amp;&amp;amp; (y&amp;lt;z)) zwischenspeicher = y;&lt;br /&gt;
  if ((z&amp;lt;x) &amp;amp;&amp;amp; (z&amp;lt;y)) zwischenspeicher = z;&lt;br /&gt;
return zwischenspeicher;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{Box|Arbeitshinweise|&lt;br /&gt;
# Analysieren Sie die Methode: &amp;lt;code&amp;gt;kleinsteZahl(int x, int y, int z)&amp;lt;/code&amp;gt; Wie könnte man a) die größte b) die mittlere herausfinden?&lt;br /&gt;
# Nennen Sie weitere Alltagsbeispiele für UND, ODER und NICHT. Erläutern Sie die folgende Tabelle.&lt;br /&gt;
|Arbeitsmethode}}&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Konjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\wedge&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Disjunktion&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\lor&amp;lt;/math&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
| &amp;amp;nbsp;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Negation&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &amp;lt;math&amp;gt;\neg&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; width=&amp;quot;25&amp;quot; | 0&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
{{wpde|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
==== Porto-Kalkulator ====&lt;br /&gt;
{{Box|Aufgabe|# Realisieren Sie einen Portokalkulator (Daten: vgl. unten). Es gibt keine weiteren Vorgaben, außer, dass das Ergebnis kundenfreundlich sein soll.&lt;br /&gt;
# Im Freibad gilt folgende Regelung: Kinder unter 3 Jahren sind kostenlos. Kinder bis 12 kosten die Hälfte des Erwachsenenpreises. Ein Erwachsenener zahlt 5 Euro, es sei denn er ist über 65, dann zahlt er nur die Hälfte. Schreiben Sie eine Klasse Freibadkasse, die eine Methode hat die nach Übergabe des Alters entsprechend den Preis nennt. Eine zweite Methode soll nach Übergabe des Alters ein Ticket drucken und den Eintrittspreis auf die Eigenschaft &amp;lt;code&amp;gt;tageseinnahmen&amp;lt;/code&amp;gt; addieren. &lt;br /&gt;
# Ein Computerhändler gibt folgende Rabatte:&lt;br /&gt;
#* bei Beträgen unter 500€ gibt es 5% Rabatt&lt;br /&gt;
#* bei Beträgen zwischen 500€ und 2000€ gibt er 10% Rabatt&lt;br /&gt;
#* über 2000€ gibt er sogar 15% Rabatt.&amp;lt;br&amp;gt;Schreiben Sie die Methode: &amp;lt;code&amp;gt;druckeRechnungAus(double rechnungsbetrag)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Eine Klasse Kühlhaus hat 4 Eigenschaften:&amp;lt;code&amp;gt;temperaturRaum1, temperaturRaum2, temperaturRaum3, kühlstufe&amp;lt;/code&amp;gt; Sobald in einem Raum die Temperatur größer als -5 Grad ist, schaltet &amp;lt;code&amp;gt;kühlstufe&amp;lt;/code&amp;gt; auf Stufe1. Liegt in mindestens 2 Räumen die Temperatur über -5 Grad, so wird Stufe 2 eingestellt. Realisieren Sie eine entsprechende Klasse mit den zugehörigen Methoden.|Arbeitsmethode}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Formate 	!! Preise 	!! Maße 	!!Gewicht 	&lt;br /&gt;
|-&lt;br /&gt;
| Standard  || 0,80 €   ||L: 14 - 23,5 cm&amp;lt;br&amp;gt;B: 9 - 12,5 cm&amp;lt;br&amp;gt;H: bis 0,5 cm || bis 20 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Kompakt   || 0,95 €   || L: 10 - 23,5 cm&amp;lt;br/&amp;gt;B: 7 - 12,5 cm&amp;lt;br&amp;gt;H: bis 1 cm  || 	bis 50 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Groß      || 1,55 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 2 cm || bis 500 g 	&lt;br /&gt;
|-&lt;br /&gt;
| Maxi      || 2,70 €   || L: 10 - 35,3 cm&amp;lt;br&amp;gt;B: 7 - 25 cm&amp;lt;br&amp;gt;H: bis 5 cm || bis 1.000 g&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
Quelle: [https://www.deutschepost.de/de/b/brief_postkarte.html deutschepost.de]&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP&amp;lt;br&amp;gt;Online-Bank|vorherlink=Java/Online-Bank|&lt;br /&gt;
weiter=Kontrollstrukturen:&amp;lt;br&amp;gt;Schleifen|weiterlink=Java/Schleife|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* gailer.net: [http://www.gailer-net.de/tutorials/java/Notes/chap12/ch12_1.html Entscheidungen treffen]&lt;br /&gt;
* uhelmich.de: [http://www.u-helmich.de/inf/BlueJ/kurs11/Folge03/folge03C.html Fallunterscheidungen]&lt;br /&gt;
* wikibooks.de: [https://de.wikibooks.org/wiki/Kurzeinstieg_Java:_Kontrollstrukturen Kontrollstrukturen]&lt;br /&gt;
* {{wpde|Boolesche Algebra|Boolesche Algebra}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109310</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109310"/>
		<updated>2019-11-20T20:25:56Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: Navigation eingefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal &#039;&#039;&#039;zwei Übergabeparameter&#039;&#039;&#039;, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &lt;br /&gt;
**&#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &lt;br /&gt;
**&#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &#039;&#039;private&#039;&#039;!&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern.&amp;lt;br&amp;gt; Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
===Der Zähler===&lt;br /&gt;
* Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
* Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn... &lt;br /&gt;
* Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler{&lt;br /&gt;
    // Instanzvariablen der Eigenschaften&lt;br /&gt;
    int zaehlerstand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Zaehler(){  &lt;br /&gt;
        // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
        zaehlerstand=0;&lt;br /&gt;
    }&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void erhoeheZaehlerstand(){&lt;br /&gt;
        zaehlerstand += 1;&lt;br /&gt;
        // oder zaehlerstand++;&lt;br /&gt;
        // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
* Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. &lt;br /&gt;
* Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten.&lt;br /&gt;
* Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Telefonbuch {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
&lt;br /&gt;
    // Anfang Variablen&lt;br /&gt;
    public String name;&lt;br /&gt;
    public String telefonnummer;&lt;br /&gt;
    // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
        // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Anfang Ereignisprozeduren&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public String getTelefonnummer() {&lt;br /&gt;
        return telefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
        telefonnummer = pTelefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public String getName() {&lt;br /&gt;
        return name;&lt;br /&gt;
    }&lt;br /&gt;
    // Ende Ereignisprozeduren&lt;br /&gt;
}}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.&lt;br /&gt;
* Die manipulierenden Methoden &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt; beeinflussen den aktuellen Füllstand.&lt;br /&gt;
* Die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt; gibt die Reichweite in km zurück, der beim aktuellen Füllstand noch gefahren werden kann. &lt;br /&gt;
* Die Probleme der Klasse liegen noch darin, dass man (über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Auto {&lt;br /&gt;
    private double volumenTank;&lt;br /&gt;
    private double verbrauchAuf100km;&lt;br /&gt;
    private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
        volumenTank = pVolumenTank;&lt;br /&gt;
        verbrauchAuf100km = pVerbrauchAuf100km;&lt;br /&gt;
        aktuellerFuellstand = 0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
        aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getAktuellerFuellstand() {&lt;br /&gt;
        return aktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVerbrauchAuf100km() {&lt;br /&gt;
        return verbrauchAuf100km;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVolumenTank() {&lt;br /&gt;
        return volumenTank;&lt;br /&gt;
    }&lt;br /&gt;
    public void tanke(double menge) {&lt;br /&gt;
        this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
    }&lt;br /&gt;
    public void fahre(double pKilometerZahl) {&lt;br /&gt;
        // Die Formel sagt folgendes aus:&lt;br /&gt;
        // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
        aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
    }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;gt;schuhgrösse&amp;lt;/code&amp;gt;).&lt;br /&gt;
## Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109309</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109309"/>
		<updated>2019-11-20T20:24:33Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Weitere Beispiele */ Quellcode formatiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal &#039;&#039;&#039;zwei Übergabeparameter&#039;&#039;&#039;, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &lt;br /&gt;
**&#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &lt;br /&gt;
**&#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &#039;&#039;private&#039;&#039;!&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern.&amp;lt;br&amp;gt; Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
===Der Zähler===&lt;br /&gt;
* Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
* Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn... &lt;br /&gt;
* Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler{&lt;br /&gt;
    // Instanzvariablen der Eigenschaften&lt;br /&gt;
    int zaehlerstand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Zaehler(){  &lt;br /&gt;
        // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
        zaehlerstand=0;&lt;br /&gt;
    }&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void erhoeheZaehlerstand(){&lt;br /&gt;
        zaehlerstand += 1;&lt;br /&gt;
        // oder zaehlerstand++;&lt;br /&gt;
        // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
* Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. &lt;br /&gt;
* Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten.&lt;br /&gt;
* Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Telefonbuch {&lt;br /&gt;
    // Eigenschaften&lt;br /&gt;
&lt;br /&gt;
    // Anfang Variablen&lt;br /&gt;
    public String name;&lt;br /&gt;
    public String telefonnummer;&lt;br /&gt;
    // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
        // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Anfang Ereignisprozeduren&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public String getTelefonnummer() {&lt;br /&gt;
        return telefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
        telefonnummer = pTelefonnummer;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public String getName() {&lt;br /&gt;
        return name;&lt;br /&gt;
    }&lt;br /&gt;
    // Ende Ereignisprozeduren&lt;br /&gt;
}}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.&lt;br /&gt;
* Die manipulierenden Methoden &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt; beeinflussen den aktuellen Füllstand.&lt;br /&gt;
* Die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt; gibt die Reichweite in km zurück, der beim aktuellen Füllstand noch gefahren werden kann. &lt;br /&gt;
* Die Probleme der Klasse liegen noch darin, dass man (über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;public class Auto {&lt;br /&gt;
    private double volumenTank;&lt;br /&gt;
    private double verbrauchAuf100km;&lt;br /&gt;
    private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
        volumenTank = pVolumenTank;&lt;br /&gt;
        verbrauchAuf100km = pVerbrauchAuf100km;&lt;br /&gt;
        aktuellerFuellstand = 0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Methoden&lt;br /&gt;
    public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
        aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getAktuellerFuellstand() {&lt;br /&gt;
        return aktuellerFuellstand;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVerbrauchAuf100km() {&lt;br /&gt;
        return verbrauchAuf100km;&lt;br /&gt;
    }&lt;br /&gt;
    public double getVolumenTank() {&lt;br /&gt;
        return volumenTank;&lt;br /&gt;
    }&lt;br /&gt;
    public void tanke(double menge) {&lt;br /&gt;
        this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
    }&lt;br /&gt;
    public void fahre(double pKilometerZahl) {&lt;br /&gt;
        // Die Formel sagt folgendes aus:&lt;br /&gt;
        // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
        aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
    }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;gt;schuhgrösse&amp;lt;/code&amp;gt;).&lt;br /&gt;
## Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109308</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109308"/>
		<updated>2019-11-20T19:59:41Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Interaktion zwischen Objekten */ Formatierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal &#039;&#039;&#039;zwei Übergabeparameter&#039;&#039;&#039;, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &lt;br /&gt;
**&#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &lt;br /&gt;
**&#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &#039;&#039;private&#039;&#039;!&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern.&amp;lt;br&amp;gt; Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109307</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109307"/>
		<updated>2019-11-20T19:53:10Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Interaktion zwischen Objekten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal zwei Übergabeparameter, die wir, wie schon beim Konstruktor, mit Komma trennen.&amp;lt;br&amp;gt;Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört.&amp;lt;br&amp;gt;Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention:|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &lt;br /&gt;
**&#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &lt;br /&gt;
**&#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;!.&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109306</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109306"/>
		<updated>2019-11-20T19:52:02Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Interaktion zwischen Objekten */ Konvention als Box&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zu einer Bank gehören mehrere Konten und neben Ein- und Auszahlungen auch Überweisungen bzw. &#039;&#039;&#039;Interaktionen&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
* Es gibt diesmal zwei Übergabeparameter, die wir, wie schon beim Konstruktor, mit Komma trennen.&amp;lt;br&amp;gt;Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist.&lt;br /&gt;
* Man darf sogar in Methoden den Datentypen der Klasse verwenden, zu dem die Methode gehört.&amp;lt;br&amp;gt;Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen.&lt;br /&gt;
* Eigenschaften, die private sind, sind nur für Objekte der gleichen Klasse sichtbar. Theoretisch könnten wir von dem einen Konto auf die Eigenschaften des anderen Kontos direkt zugreifen. Damit es nicht zu Verwechslungen bzw. sogenannten Seiteneffekten kommt, sollten Sie das unbedingt vermeiden!!&lt;br /&gt;
&lt;br /&gt;
{{Box|Konvention:|&lt;br /&gt;
* Auf die Daten von &#039;&#039;&#039;fremden&#039;&#039;&#039; Objekten oder Klassen greifen wir &#039;&#039;&#039;immer über Methoden&#039;&#039;&#039; und &#039;&#039;&#039;nie über deren Eigenschaften&#039;&#039;&#039; zu.&lt;br /&gt;
* Dies gewährleistet, dass nichts Ungewolltes verändert wird!. Deshalb sind sie ja &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;!.&lt;br /&gt;
* &#039;&#039;&#039;Nur innerhalb des Objektes selbst&#039;&#039;&#039; verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109304</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109304"/>
		<updated>2019-11-20T18:59:47Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Die get-Methoden als Beispiel für sondierende Methoden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methoden, die die den Kontostand und den Zinssatz ausgeben.}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zum Schluss des Kapitels behandeln wir, wie zwei Objekte miteinander kommunizieren können. Ein schönes Beispiel dafür ist die Methode &amp;lt;code&amp;gt;ueberweise()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt diesmal zwei Parameter, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist. Man darf also Klassen  als Datentypen  angeben –  ja,  man  darf sogar in  Methoden  den  Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen. Also muss das Konto überweisen können (wenn man keine Klasse Bank erschafft, die die Konten verwaltet. Aber das ist ein Thema für später)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
abheben(betrag);&lt;br /&gt;
zielkonto.einzahlen(pBetrag);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Wichtig!| Eigenschaften, die &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sind, sind nur für Objekte der gleichen Klasse sichtbar. D.h. theoretisch können wir von dem einen Konto auf die Eigenschaften des anderen Kontos zugreifen. Damit es nicht zu Verwechslungen kommt, sollten Sie sich das aber erst gar nicht angewöhnen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konvention:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die Daten von fremden Objekten oder Klassen greifen wir immer über Methoden und nie über deren Eigenschaften zu. Dies gewährleistet, dass nichts Ungewolltes verändert wird (vgl. Waschmaschinenbeispiel). Nur innerhalb des Objektes selbst verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109303</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109303"/>
		<updated>2019-11-20T18:58:37Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Zuweisen von Werten an Variablen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt;die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methode(n), die die Kontodaten: Benutzer, Kontostand, Zinssatz ausgibt.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zum Schluss des Kapitels behandeln wir, wie zwei Objekte miteinander kommunizieren können. Ein schönes Beispiel dafür ist die Methode &amp;lt;code&amp;gt;ueberweise()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt diesmal zwei Parameter, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist. Man darf also Klassen  als Datentypen  angeben –  ja,  man  darf sogar in  Methoden  den  Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen. Also muss das Konto überweisen können (wenn man keine Klasse Bank erschafft, die die Konten verwaltet. Aber das ist ein Thema für später)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
abheben(betrag);&lt;br /&gt;
zielkonto.einzahlen(pBetrag);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Wichtig!| Eigenschaften, die &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sind, sind nur für Objekte der gleichen Klasse sichtbar. D.h. theoretisch können wir von dem einen Konto auf die Eigenschaften des anderen Kontos zugreifen. Damit es nicht zu Verwechslungen kommt, sollten Sie sich das aber erst gar nicht angewöhnen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konvention:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die Daten von fremden Objekten oder Klassen greifen wir immer über Methoden und nie über deren Eigenschaften zu. Dies gewährleistet, dass nichts Ungewolltes verändert wird (vgl. Waschmaschinenbeispiel). Nur innerhalb des Objektes selbst verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109301</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109301"/>
		<updated>2019-11-20T18:46:16Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: Beispiele nach hinten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten an Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;, die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt; Prozent Zinsen addiert. &lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibt man void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe (void: nichts) gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Übung|Schreiben Sie get-Methode(n), die die Kontodaten: Benutzer, Kontostand, Zinssatz ausgibt.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zum Schluss des Kapitels behandeln wir, wie zwei Objekte miteinander kommunizieren können. Ein schönes Beispiel dafür ist die Methode &amp;lt;code&amp;gt;ueberweise()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt diesmal zwei Parameter, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist. Man darf also Klassen  als Datentypen  angeben –  ja,  man  darf sogar in  Methoden  den  Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen. Also muss das Konto überweisen können (wenn man keine Klasse Bank erschafft, die die Konten verwaltet. Aber das ist ein Thema für später)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
abheben(betrag);&lt;br /&gt;
zielkonto.einzahlen(pBetrag);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Wichtig!| Eigenschaften, die &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sind, sind nur für Objekte der gleichen Klasse sichtbar. D.h. theoretisch können wir von dem einen Konto auf die Eigenschaften des anderen Kontos zugreifen. Damit es nicht zu Verwechslungen kommt, sollten Sie sich das aber erst gar nicht angewöhnen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konvention:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die Daten von fremden Objekten oder Klassen greifen wir immer über Methoden und nie über deren Eigenschaften zu. Dies gewährleistet, dass nichts Ungewolltes verändert wird (vgl. Waschmaschinenbeispiel). Nur innerhalb des Objektes selbst verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109296</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109296"/>
		<updated>2019-11-20T18:12:51Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Zuweisen von Werten bei Variablen */ Box weg, dafür Absatz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten bei Variablen====&lt;br /&gt;
&lt;br /&gt;
Das &amp;quot;&#039;&#039;Gleichheits&#039;&#039;&amp;quot;-zeichen wird in Java nicht als Vergleichs-, sondern als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll,&lt;br /&gt;
* auf der rechten Seite eine Rechnung, die den neuen Wert ergibt.&amp;lt;br&amp;gt; Die Variable links darf dabei als (alter) Variablenwert in der Rechnung rechts vorkommen:&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 7&amp;lt;/code&amp;gt; bedeutet, dass x um 7 erhöht wird&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird um 7 erhöht (analog &amp;lt;code&amp;gt;-=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x *= 7&amp;lt;/code&amp;gt; Kurzschreibweise: x wird mit 7 multipliziert (analog &amp;lt;code&amp;gt;/=&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; x wird um 1 erhöht&lt;br /&gt;
** &amp;lt;code&amp;gt;x--&amp;lt;/code&amp;gt; x wird um 1 erniedrigt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers. Eine Methode ohne Rückgabewert wird mit &amp;lt;code&amp;gt;public void&amp;lt;/code&amp;gt; (void entspricht im englischen etwa: nichts) eingeleitet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibe ich void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die get- und set-Methode zu der Eigenschaft kontostand.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;, die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt;, Prozent, Zinsen addiert.&lt;br /&gt;
# Zeichnen Sie das Klassendiagramm zu der aktuellen Klasse Konto.}}&lt;br /&gt;
&lt;br /&gt;
==Einige Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zum Schluss des Kapitels behandeln wir, wie zwei Objekte miteinander kommunizieren können. Ein schönes Beispiel dafür ist die Methode &amp;lt;code&amp;gt;ueberweise()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt diesmal zwei Parameter, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist. Man darf also Klassen  als Datentypen  angeben –  ja,  man  darf sogar in  Methoden  den  Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen. Also muss das Konto überweisen können (wenn man keine Klasse Bank erschafft, die die Konten verwaltet. Aber das ist ein Thema für später)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
abheben(betrag);&lt;br /&gt;
zielkonto.einzahlen(pBetrag);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Wichtig!| Eigenschaften, die &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sind, sind nur für Objekte der gleichen Klasse sichtbar. D.h. theoretisch können wir von dem einen Konto auf die Eigenschaften des anderen Kontos zugreifen. Damit es nicht zu Verwechslungen kommt, sollten Sie sich das aber erst gar nicht angewöhnen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konvention:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die Daten von fremden Objekten oder Klassen greifen wir immer über Methoden und nie über deren Eigenschaften zu. Dies gewährleistet, dass nichts Ungewolltes verändert wird (vgl. Waschmaschinenbeispiel). Nur innerhalb des Objektes selbst verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109286</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109286"/>
		<updated>2019-11-20T17:44:37Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: Box strukturiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden ===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten bei Variablen====&lt;br /&gt;
{{Box| Der Zuweisungsoperator &amp;amp;#61;|&lt;br /&gt;
* Das Gleichheitszeichen ist keine mathematische Vergleichsoperation! (Dies wäre &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt;!)&lt;br /&gt;
* Das Gleichheitszeichen wird in Java als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet:&lt;br /&gt;
* Auf der linken Seite des Zuweisungsoperators steht die Variable, die einen neuen Wert bekommen soll.&lt;br /&gt;
* Auf der rechten Seite steht eine Rechnung, die den neuen Wert ergibt. Dabei darf die Variable links als (alter) Variablenwert in der Rechnung rechts vorkommen.&lt;br /&gt;
** Zum Erhöhen einer Variable lässt sich &amp;lt;code&amp;gt; += &amp;lt;/code&amp;gt; verwenden (analog -=, *=, /=).&lt;br /&gt;
** Zum Erhöhen um 1 kann man &amp;lt;code&amp;gt; ++ &amp;lt;/code&amp;gt; schreiben (analog &amp;lt;code&amp;gt; --&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&lt;br /&gt;
** &amp;lt;code&amp;gt;x = x + 1&amp;lt;/code&amp;gt; bedeutet, dass x um 1 erhöht wird (auch andere Zahlen möglich)&lt;br /&gt;
** &amp;lt;code&amp;gt;x += 1&amp;lt;/code&amp;gt; gleichbedeutend:  x wird um 1 erhöht (auch andere Zahlen möglich)&lt;br /&gt;
** &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; gleichbedeutend:  x wird um 1 erhöht (geht nur bei 1)&lt;br /&gt;
** &amp;lt;code&amp;gt;x = 2 * x&amp;lt;/code&amp;gt; bedeutet, dass x verdoppelt wird.&lt;br /&gt;
|Hervorhebung}}&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.}}&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers. Eine Methode ohne Rückgabewert wird mit &amp;lt;code&amp;gt;public void&amp;lt;/code&amp;gt; (void entspricht im englischen etwa: nichts) eingeleitet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibe ich void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die get- und set-Methode zu der Eigenschaft kontostand.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;, die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt;, Prozent, Zinsen addiert.&lt;br /&gt;
# Zeichnen Sie das Klassendiagramm zu der aktuellen Klasse Konto.}}&lt;br /&gt;
&lt;br /&gt;
==Einige Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zum Schluss des Kapitels behandeln wir, wie zwei Objekte miteinander kommunizieren können. Ein schönes Beispiel dafür ist die Methode &amp;lt;code&amp;gt;ueberweise()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt diesmal zwei Parameter, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist. Man darf also Klassen  als Datentypen  angeben –  ja,  man  darf sogar in  Methoden  den  Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen. Also muss das Konto überweisen können (wenn man keine Klasse Bank erschafft, die die Konten verwaltet. Aber das ist ein Thema für später)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
abheben(betrag);&lt;br /&gt;
zielkonto.einzahlen(pBetrag);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Wichtig!| Eigenschaften, die &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sind, sind nur für Objekte der gleichen Klasse sichtbar. D.h. theoretisch können wir von dem einen Konto auf die Eigenschaften des anderen Kontos zugreifen. Damit es nicht zu Verwechslungen kommt, sollten Sie sich das aber erst gar nicht angewöhnen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konvention:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die Daten von fremden Objekten oder Klassen greifen wir immer über Methoden und nie über deren Eigenschaften zu. Dies gewährleistet, dass nichts Ungewolltes verändert wird (vgl. Waschmaschinenbeispiel). Nur innerhalb des Objektes selbst verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109277</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109277"/>
		<updated>2019-11-20T17:26:20Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: /* Methoden – Was kann meine Klasse? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden – Was kann meine Klasse?===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen(double pBetrag)&amp;lt;/code&amp;gt; sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
Hervorzuheben ist hierbei, dass die &#039;&#039;&#039;Zuweisung&#039;&#039;&#039; &amp;lt;code&amp;gt;kontostand = kontostand + pBetrag;&amp;lt;/code&amp;gt; nicht als mathematischer Vergleich bzw. Identität missverstanden werden darf, sondern als Zuweisungsbefehl: Der Variable &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt; wird die Summe aus dem  bisherigen Kontostand und einem Übergabe-Parameter &amp;lt;code&amp;gt;pBetrag&amp;lt;/code&amp;gt; &#039;&#039;&#039;zugewiesen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. &lt;br /&gt;
# Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.}}&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten bei Variablen====&lt;br /&gt;
{{Box| &amp;amp;#61; ist kein Gleichheitszeichen|* Das Gleichheitszeichen hat eine andere Bedeutung als in der Mathematik!&lt;br /&gt;
* Das &#039;&#039;&#039;Gleichheitszeichen&#039;&#039;&#039; wird in Java als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
*Zum Erhöhen einer Variable lässt sich &amp;lt;code&amp;gt; += &amp;lt;/code&amp;gt; verwenden (analog -=, *=, /=).&lt;br /&gt;
*Zum Erhöhen um 1 kann man &amp;lt;code&amp;gt; ++ &amp;lt;/code&amp;gt; schreiben (analog &amp;lt;code&amp;gt; --&amp;lt;/code&amp;gt;).&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x = x + 1&amp;lt;/code&amp;gt; bedeutet, dass x um 1 erhöht wird (auch andere Zahlen möglich)&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x += 1&amp;lt;/code&amp;gt; gleichbedeutend:  x wird um 1 erhöht (auch andere Zahlen möglich)&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; gleichbedeutend:  x wird um 1 erhöht (geht nur bei 1)&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x = 2 * x&amp;lt;/code&amp;gt; bedeutet, dass x verdoppelt wird.&lt;br /&gt;
*Auf   der  linken Seite des Gleichheitszeichens steht ausschließlich die Variable, die einen neuen Wert bekommen soll. Auf der rechten Seite steht eine Rechnung, die den neuen Wert ergibt. Dabei darf die Variable links als Wert in der Rechnung rechts vorkommen. Dort wird der alte Variablenwert benutzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers. Eine Methode ohne Rückgabewert wird mit &amp;lt;code&amp;gt;public void&amp;lt;/code&amp;gt; (void entspricht im englischen etwa: nichts) eingeleitet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibe ich void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die get- und set-Methode zu der Eigenschaft kontostand.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;, die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt;, Prozent, Zinsen addiert.&lt;br /&gt;
# Zeichnen Sie das Klassendiagramm zu der aktuellen Klasse Konto.}}&lt;br /&gt;
&lt;br /&gt;
==Einige Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zum Schluss des Kapitels behandeln wir, wie zwei Objekte miteinander kommunizieren können. Ein schönes Beispiel dafür ist die Methode &amp;lt;code&amp;gt;ueberweise()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt diesmal zwei Parameter, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist. Man darf also Klassen  als Datentypen  angeben –  ja,  man  darf sogar in  Methoden  den  Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen. Also muss das Konto überweisen können (wenn man keine Klasse Bank erschafft, die die Konten verwaltet. Aber das ist ein Thema für später)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
abheben(betrag);&lt;br /&gt;
zielkonto.einzahlen(pBetrag);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Wichtig!| Eigenschaften, die &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sind, sind nur für Objekte der gleichen Klasse sichtbar. D.h. theoretisch können wir von dem einen Konto auf die Eigenschaften des anderen Kontos zugreifen. Damit es nicht zu Verwechslungen kommt, sollten Sie sich das aber erst gar nicht angewöhnen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konvention:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die Daten von fremden Objekten oder Klassen greifen wir immer über Methoden und nie über deren Eigenschaften zu. Dies gewährleistet, dass nichts Ungewolltes verändert wird (vgl. Waschmaschinenbeispiel). Nur innerhalb des Objektes selbst verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
	<entry>
		<id>https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109276</id>
		<title>Java/Online-Bank</title>
		<link rel="alternate" type="text/html" href="https://zumunterrichten.idea-sketch.com/index.php?title=Java/Online-Bank&amp;diff=109276"/>
		<updated>2019-11-20T17:11:04Z</updated>

		<summary type="html">&lt;p&gt;Ernst Schreier: Quellcode korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Einfache Theorie der Objektorientierten Programmierung==&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Logo.gif|BlueJ Logo|right|200px]] Zunächst klären wir am Beispiel Vogel, was eine &#039;&#039;&#039;Klasse&#039;&#039;&#039; ist: Ähnlich wie in der Biologie gruppiert man   in   der   OOP   (Objektorientierten   Programmierung)  Objekte   und  fasst   sie   in   Klassen   zusammen.  Dabei  stellt sich die Frage,  was einen Vogel auszeichnet: &lt;br /&gt;
&lt;br /&gt;
*Ein   Vogel   kann   bestimmte   Dinge  tun.  Er   kann etwa  singen  oder ein Ei legen.  Das  sind die sogenannten  &#039;&#039;&#039;Methoden (Operationen)&#039;&#039;&#039;  des Vogels (&amp;lt;code&amp;gt;singe(...), legeEi(...)&amp;lt;/code&amp;gt; ). Methoden teilt man in zwei Gruppen ein:&lt;br /&gt;
**&#039;&#039;&#039;beobachtende&#039;&#039;&#039; oder &#039;&#039;&#039;sondierende&#039;&#039;&#039; Methoden z.B. &amp;lt;code&amp;gt;gibFarbe()&amp;lt;/code&amp;gt; und&lt;br /&gt;
**&#039;&#039;&#039;verändernde&#039;&#039;&#039; oder &#039;&#039;&#039;manipulierende&#039;&#039;&#039; Methoden wie z.B. &amp;lt;code&amp;gt;setFarbe(“gruen“)&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Ein   Vogel   hat   auch bestimmte  &#039;&#039;&#039;Eigenschaften&#039;&#039;&#039; (&#039;&#039;&#039;Attribute&#039;&#039;&#039;). Er hat zum Beispiel eine bestimmte Farbe, ein Geschlecht, eine Flügelspannweite. Die Gesamtheit der Werte dieser Eigenschaften nennt man &#039;&#039;&#039;Zustand&#039;&#039;&#039;. Hierin unterscheiden sich verschiedene Objekte derselben Klasse.&lt;br /&gt;
*Aus der Klasse Vogel lassen sich dann konkrete Objekte bilden z.B.  &amp;lt;code&amp;gt;vogel1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vogel3&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Während die &#039;&#039;&#039;Klasse&#039;&#039;&#039; Vogel etwas &#039;&#039;&#039;abstraktes&#039;&#039;&#039; ist (eine Art Bauplan für Objekte), ist ein &#039;&#039;&#039;Objekt&#039;&#039;&#039; &#039;&#039;&#039;konkret&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
* &#039;&#039;&#039;Objekte&#039;&#039;&#039; sind in der objektorientierten Programmierung &lt;br /&gt;
** &#039;&#039;&#039;Daten&#039;&#039;&#039; (Eigenschaften oder auch Attribute) und &lt;br /&gt;
** die damit verknüpfte &#039;&#039;&#039;Programmlogik&#039;&#039;&#039; (Methoden oder auch Operationen),&amp;lt;br&amp;gt;die zu Einheiten, nämlich eben den Objekten, zusammengefasst sind.&lt;br /&gt;
* Gleichartige Objekte werden zu &#039;&#039;&#039;Klassen&#039;&#039;&#039; zusammengefasst.&lt;br /&gt;
* &#039;&#039;&#039;Klassen dienen als Vorlage&#039;&#039;&#039; (wie ein Bauplan) zur Herstellung von Objekten. &lt;br /&gt;
* Von einer Klasse können beliebig viele Objekte hergestellt werden.&lt;br /&gt;
* Die &#039;&#039;&#039;Objekte sind einzigartig&#039;&#039;&#039;, da sie einen unterschiedlichen Namen tragen müssen, obwohl ihr Zustand identisch sein kann.&lt;br /&gt;
* Der Zustand (oder auch Status) ist die Gesamtheit der Werte der Eigenschaften.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
==Beispiel: Online-Bank==&lt;br /&gt;
===Die Klasse Konto===&lt;br /&gt;
&lt;br /&gt;
Um ein Konto zu eröffnen, benötigt eine Bank zumindest&lt;br /&gt;
&lt;br /&gt;
*den Namen des Besitzers &amp;lt;code&amp;gt;besitzerName&amp;lt;/code&amp;gt; und&lt;br /&gt;
*den aktuellen Geldbetrag &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beides sind &#039;&#039;&#039;Attribute&#039;&#039;&#039; (bzw. Eigenschaften) der &#039;&#039;&#039;Klasse Konto&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Jedes Attribut verlangt die Angabe eines geeigneten &#039;&#039;&#039;Datentyps&#039;&#039;&#039;.&lt;br /&gt;
*Java kennt u.a. folgende &#039;&#039;&#039;Datentypen&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:left&amp;quot;&lt;br /&gt;
!Typname&lt;br /&gt;
!Größe&lt;br /&gt;
!Wertebereich&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-----&lt;br /&gt;
|boolean||1 bit||true / false||Boolescher Wahrheitswert&lt;br /&gt;
|-&lt;br /&gt;
|int||32 bit||-2.147.483.648 ... 2.147.483.647||Zweierkomplement-Wert&lt;br /&gt;
|-&lt;br /&gt;
|float||32 bit||+/-1,4E-45 ... +/-3,4E+38||32-bit IEEE 754, einfache Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|double||64 bit||+/-4,9E-324 ... +/-1,7E+308||64-bit IEEE 754, doppelte Genauigkeit&lt;br /&gt;
|-&lt;br /&gt;
|char||16 bit||0 ... 65.535 (z.B. &#039;A&#039;)||Unicode-Zeichen (UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
|String|| || ||Zeichenkette (kein einfacher Datentyp,&amp;lt;br&amp;gt;sondern ein Objekt der Klasse String)&lt;br /&gt;
|}&lt;br /&gt;
====Eingabe des Quelltexts====&lt;br /&gt;
[[Datei:BlueJ Online-Bank 1.png|alternativtext=Online-Bank: Klasse Konto|mini|Online-Bank: Klasse Konto]]&lt;br /&gt;
&lt;br /&gt;
*Mit &amp;quot;Projekt|neu&amp;quot; wird ein neues Projekt angelegt, das wir &amp;quot;Online-Bank&amp;quot; nennen.&lt;br /&gt;
*Mit &amp;quot;Neue Klasse&amp;quot; legen wir eine Klasse mit dem Namen &amp;quot;Konto&amp;quot; an.&lt;br /&gt;
*Wenn alles richtig geklappt hat, sollte es etwa so aussehen:&lt;br /&gt;
&lt;br /&gt;
Mit einem Doppelklick auf das beige Rechteck kommt zum Editor, in dem man den Quelltext eintippen kann:[[Datei:BlueJ Online-Bank- Neue Instanz konto1-Konto.png|alternativtext=Neue Instanz konto1:Konto|mini|Neue Instanz konto1:Konto]]&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Konto {&lt;br /&gt;
  // Instanzvariablen&lt;br /&gt;
  private String besitzerName;&lt;br /&gt;
  private double kontostand;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
und mit dem Button &amp;quot;Übersetzen&amp;quot; abspeichert und &#039;&#039;&amp;quot;compiliert&amp;quot;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
*Die &#039;&#039;&#039;Definition&#039;&#039;&#039; der Klasse beginnt mit dem Schlüsselwort &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;&lt;br /&gt;
*Die &#039;&#039;&#039;Zugriffsmodifizierer&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&amp;lt;br&amp;gt; Dies ist vergleichbar mit dem Zugriff auf ein technisches Gerät wie z.B. Handy, TV, Auto, Waschmaschine etc.:&lt;br /&gt;
**Die Bedienknöpfe sind &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, also öffentlich und von jedem bedienbar.&lt;br /&gt;
**Das Innenleben des Gerätes ist &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; und ein Laie sollte hier keinen Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:BlueJ Online-Bank 3.png|alternativtext=Online-Bank: Objektinspektor|mini|500x500px]]&lt;br /&gt;
Als erste Faustregel genügt es, sich zu merken, dass &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Attribute&#039;&#039;&#039; &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; (Innenleben der Klasse) und&lt;br /&gt;
*&#039;&#039;&#039;Klassen&#039;&#039;&#039; &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;sind.&lt;br /&gt;
&lt;br /&gt;
Instanzieren Sie nun ein Objekt &amp;lt;code&amp;gt;Konto1&amp;lt;/code&amp;gt; der Klasse &amp;lt;code&amp;gt;Konto&amp;lt;/code&amp;gt; mit der Methode &amp;lt;code&amp;gt;new Konto()&amp;lt;/code&amp;gt; wähle.&lt;br /&gt;
&lt;br /&gt;
====Objektinspektor====&lt;br /&gt;
Ein Rechtsklick auf das rote Rechteck und dann auf Inspizieren öffnet den &#039;&#039;&#039;Objektinspektor&#039;&#039;&#039;. Dieser gibt einen Überblick über den &#039;&#039;&#039;Zustand&#039;&#039;&#039; des Objektes: &lt;br /&gt;
&lt;br /&gt;
*Unser Besitzer heißt &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für String-Variablen.&lt;br /&gt;
*Der Kontostand ist &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;,&amp;lt;br&amp;gt; dem Anfangswert für numerische Variablen.&lt;br /&gt;
&lt;br /&gt;
{{Box|Zusammenfassung|&lt;br /&gt;
*Eine  Klasse definiert man im Quelltextes. Der minimale Aufbau ist:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  public class Klassenname {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private Datentyp eigenschaft1; &lt;br /&gt;
    private Datentyp eigenschaft2;&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Die Zugriffsmodifizierer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; regeln die Zugriffsrechte.&lt;br /&gt;
* Als vorläufige Regel ist die Klasse immer &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt; und die Eigenschaften immer &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Aus Klassen lassen sich Objekte erzeugen, die einen eindeutigen Namen tragen müssen.&lt;br /&gt;
* Die Objekte haben einen Zustand, den man mit Hilfe des Objektinspektors ansehen kann.&lt;br /&gt;
** Anfangszustand von Strings ist das englische Wort &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; und von Zahlentypen &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Ein „Doppelslash“ &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; am Anfang der Zeile macht aus der Zeile einen Kommentar, den der Computer ignoriert.|Hervorhebung2}}&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Klasse Konto um die Attribute &amp;lt;code&amp;gt;kreditLimit&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;telefonNummer&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Welche Datentypen würden Sie verwenden?&lt;br /&gt;
# Recherchieren Sie, welche weiteren numerischen Datentypen Java bietet? &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Der Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der  &#039;&#039;&#039;Konstruktor&#039;&#039;&#039;  ist eine  spezielle  Methode, die  bei der  Erzeugung von Variablen aufgerufen wird und diese in einen definierten Anfangszustand versetzt. Dieser Vorgang nennt sich auch &#039;&#039;&#039;Initialisierung&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  public class Konto {&lt;br /&gt;
    // Instanzvariablen&lt;br /&gt;
    private String besitzerName;&lt;br /&gt;
    private double kontostand;&lt;br /&gt;
    // Konstruktor&lt;br /&gt;
    public Konto (String pBesitzerName){&lt;br /&gt;
      besitzerName = pBesitzerName;  &lt;br /&gt;
      kontostand = 1.0; &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Begriff!!Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Konstruktor&#039;&#039;&#039;||Ein Konstruktor ist eine spezielle Methode und legt die Anfangswerte fest. Er erhält den gleichen Namen wie die Klasse selbst z.B. public Konto. Alle Werte, die nicht im Konstruktor festgelegt werden, bekommen einen „default-Wert“. Bei Zahlentypen ist das 0,  bei Strings „null“&lt;br /&gt;
|-&lt;br /&gt;
|(Übergabe-) &#039;&#039;&#039;Parameter&#039;&#039;&#039;||Sind die Werte, die der Methode beim Aufruf übergeben werden. Für jeden Parameter muss ein Datentyp festgelegt werden. Der Name des Parameters kann zur besseren Übersicht mit p beginnen.&lt;br /&gt;
|-&lt;br /&gt;
|geschweifte Klammern||Sie strukturieren das Programm: Die gesamte Klasse und jede Methoden wie z.B. der Konstruktor stehen in geschweiften Klammern. Das Weglassen von Klammern ist eine typische Fehlerquelle.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;amerikanische Notation&#039;&#039;&#039;||Verwenden Sie im Quelltext&lt;br /&gt;
&lt;br /&gt;
*bei Zahlendarstellungen stets &#039;&#039;&#039;Punkt statt Komma&#039;&#039;&#039;: 3.141&lt;br /&gt;
*&#039;&#039;&#039;keine deutschen Umlaute oder Sonderzeichen&#039;&#039;&#039;!!&lt;br /&gt;
|-&lt;br /&gt;
|Semikolon||Nach (nahezu) jedem Befehl (Anweisung) möchte Java ein Semikolon ;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|&lt;br /&gt;
# Erweitern Sie die Instanzvariablen mit dem String &amp;lt;code&amp;gt;strassenName&amp;lt;/code&amp;gt;.&amp;lt;br&amp;gt; Im Konstruktor trennen Sie mehrere Übergabeparameter durch Kommata: &amp;lt;code&amp;gt;public Konto (String pBesitzerName, String pStrassenName)&amp;lt;/code&amp;gt;&lt;br /&gt;
# Testen Sie Fehleingaben bei BlueJ: Lassen Sie beim Besitzernamen die Anführungsstriche weg, geben Sie eine Zahl, geben Sie nichts ein &amp;amp;hellip;&lt;br /&gt;
# Lassen Sie statt des Namens den Kontostand als Parameter übergeben.&lt;br /&gt;
# Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;vorname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postleitzahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geburtsjahr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;geschlecht&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hausnummer&amp;lt;/code&amp;gt;. Begründen Sie dabei, welche Datentypen Sie verwenden.}}&lt;br /&gt;
&lt;br /&gt;
===Methoden – Was kann meine Klasse?===&lt;br /&gt;
Die Methode &amp;lt;code&amp;gt;einzahlen()&amp;lt;/code&amp;gt; als Beispiel für eine verändernde Methode &lt;br /&gt;
&lt;br /&gt;
Es sind natürlich noch viele weitere Methoden möglich. Ein weiteres Beispiel ist die Methode &amp;lt;code&amp;gt;einzahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void einzahlen(double pBetrag){&lt;br /&gt;
  kontostand += pBetrag;   &lt;br /&gt;
  // oder kontostand = kontostand + pBetrag;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
Diese Methode sorgt dafür, dass zu dem bisherigen Kontostand ein bestimmter Betrag hinzugefügt wird. Hervorzuheben ist, dass die folgende Zeile nicht mathematisch zu verstehen ist:&lt;br /&gt;
&lt;br /&gt;
 kontostand = kontostand + pBetrag;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: &amp;lt;code&amp;gt;kontostand&amp;lt;/code&amp;gt; wird die Summe aus dem  bisherigen  Kontostand und einem Parameter &amp;lt;code&amp;gt;pBetrag&amp;lt;/code&amp;gt; &#039;&#039;&#039;zugewiesen&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Bauen Sie die Methode &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; in Ihre Kontoklasse ein. Testen Sie das Einzahlen von negativen Beträgen, großen Beträgen, 0, Wörtern, Rechnungen...&lt;br /&gt;
# Entwerfen Sie auf Grundlage von &amp;lt;code&amp;gt;einzahlen&amp;lt;/code&amp;gt; die Methode &amp;lt;code&amp;gt;auszahlen()&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Entwerfen Sie &amp;lt;code&amp;gt;raubeAus()&amp;lt;/code&amp;gt;, die den Kontostand auf 0 setzt.}}&lt;br /&gt;
&lt;br /&gt;
====Zuweisen von Werten bei Variablen====&lt;br /&gt;
{{Box| &amp;amp;#61; ist kein Gleichheitszeichen|* Das Gleichheitszeichen hat eine andere Bedeutung als in der Mathematik!&lt;br /&gt;
* Das &#039;&#039;&#039;Gleichheitszeichen&#039;&#039;&#039; wird in Java als &#039;&#039;&#039;Zuweisungsoperator&#039;&#039;&#039; verwendet.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
*Zum Erhöhen einer Variable lässt sich &amp;lt;code&amp;gt; += &amp;lt;/code&amp;gt; verwenden (analog -=, *=, /=).&lt;br /&gt;
*Zum Erhöhen um 1 kann man &amp;lt;code&amp;gt; ++ &amp;lt;/code&amp;gt; schreiben (analog &amp;lt;code&amp;gt; --&amp;lt;/code&amp;gt;).&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x = y + 7&amp;lt;/code&amp;gt; bedeutet, dass x den Wert der Rechnung y + 7 bekommt.&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x = x + 1&amp;lt;/code&amp;gt; bedeutet, dass x um 1 erhöht wird (auch andere Zahlen möglich)&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x += 1&amp;lt;/code&amp;gt; gleichbedeutend:  x wird um 1 erhöht (auch andere Zahlen möglich)&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; gleichbedeutend:  x wird um 1 erhöht (geht nur bei 1)&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;x = 2 * x&amp;lt;/code&amp;gt; bedeutet, dass x verdoppelt wird.&lt;br /&gt;
*Auf   der  linken Seite des Gleichheitszeichens steht ausschließlich die Variable, die einen neuen Wert bekommen soll. Auf der rechten Seite steht eine Rechnung, die den neuen Wert ergibt. Dabei darf die Variable links als Wert in der Rechnung rechts vorkommen. Dort wird der alte Variablenwert benutzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Die set-Methoden als Beispiel für verändernde Methode ohne Rückgabewert====&lt;br /&gt;
Diese einfache Methode verändert den Namen des Kontobesitzers. Eine Methode ohne Rückgabewert wird mit &amp;lt;code&amp;gt;public void&amp;lt;/code&amp;gt; (void entspricht im englischen etwa: nichts) eingeleitet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void setBesitzerName(String pNeuerName){&lt;br /&gt;
  besitzerName = pNeuerName; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Die get-Methoden als Beispiel für sondierende Methoden====&lt;br /&gt;
Eine ebenso einfache Methode liest den Namen des Kontobesitzers wieder aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public String getBesitzerName(){&lt;br /&gt;
  return besitzerName;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Merke|Wann schreibe ich void?&lt;br /&gt;
* &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; kommt bei einer Methodendeklaration immer dann vor, wenn es keine Rückgabe gibt.&lt;br /&gt;
* &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Gibt es eine Rückgabe (return variable), so muss der Datentyp des Rückgabewertes eingetragen werden.}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die get- und set-Methode zu der Eigenschaft kontostand.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bucheZinsen (double pzinssatz)&amp;lt;/code&amp;gt;, die auf den vorliegenden Kontostand &amp;lt;code&amp;gt;zinssatz&amp;lt;/code&amp;gt;, Prozent, Zinsen addiert.&lt;br /&gt;
# Zeichnen Sie das Klassendiagramm zu der aktuellen Klasse Konto.}}&lt;br /&gt;
&lt;br /&gt;
==Einige Beispiele== &lt;br /&gt;
Wenn Sie bedenken, wie dick üblicherweise Java-Bücher sind, dann können Sie von den Beispielen zur Zeit noch nicht viel erwarten. Einige einfache Beispiele zeige ich Ihnen hier dennoch, damit Sie einen Überblick bekommen, wie eine Klasse in Java aufgebaut ist.&lt;br /&gt;
&lt;br /&gt;
===Der Zähler===&lt;br /&gt;
Der Zähler ist eine einfache Klasse, bei dem Sie bei Aufruf der Methode &amp;lt;code&amp;gt;erhoeheZaehlerstand()&amp;lt;/code&amp;gt; den Zähler um 1 erhöhen. &lt;br /&gt;
&lt;br /&gt;
Anwendungen: Verkehrszählungen, Heizungsverbrauchzähler, Bildzähler bei einer   Kamera,   Rundenzähler   bei  der   Carrera-Bahn...  &lt;br /&gt;
&lt;br /&gt;
Bei  den  realen   Anwendungen  kommt  der Impuls von einem Sensor bzw. einen Druckknopf. Bei der Simulation müssen Sie statt dessen eine Methode ausführen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
public class Zaehler&lt;br /&gt;
{&lt;br /&gt;
	// Instanzvariablen der Eigenschaften&lt;br /&gt;
	int zaehlerstand;&lt;br /&gt;
	// Konstruktor&lt;br /&gt;
	public Zaehler()&lt;br /&gt;
	{  &lt;br /&gt;
	 // Der Anfangszählerstand soll immer 0 sein.&lt;br /&gt;
	 zaehlerstand=0;&lt;br /&gt;
	}&lt;br /&gt;
	// Methoden&lt;br /&gt;
	public void erhoeheZaehlerstand()&lt;br /&gt;
 {&lt;br /&gt;
 zaehlerstand += 1;&lt;br /&gt;
 // oder zaehlerstand++;&lt;br /&gt;
 // oder zaehlerstand=zaehlerstand+1;&lt;br /&gt;
 }	&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Das Telefonbuch===&lt;br /&gt;
[[Datei:Klassendiagramm-Telefonbuch.png|300px|right]]&lt;br /&gt;
Der [[Java/Installation#Entwicklungsumgebungen_für_Java|Java-Editor]] half bei der Erstellung dieser Klasse. Unter UML|neue   Klasse   erhalten   Sie   ein   praktisches   Auswahl-Menü, das Ihnen viel Tipparbeit ersparen kann. Der  Java-Editor zeigt übrigens  im Klassendiagramm auch den Konstruktor an. Das wird in der Literatur nicht einheitlich gemacht, oftmals wird er nicht angegeben.Die Telefonnummer wird, obwohl sie laut Name eine Nummer ist, als String eingelesen, um Eingaben wie „/“ zwischen Vorwahl und Nummer zuzulassen. Die Besonderheit an dieser Klasse ist, dass &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; nur durch den Konstruktor verändert werden kann. D.h. ich kann zwar mit  &amp;lt;code&amp;gt;setTelefonnummer&amp;lt;/code&amp;gt; nachträglich   Telefonnummern   ändern, aber der Name bleibt erhalten. Allenfalls durch das Löschen des Objektes kann ich Personen aus dem Telefonbuch entfernen. &lt;br /&gt;
&lt;br /&gt;
{{Achtung|Ohne dass wir in Dateien speichern können, werden bei einem Neustart von BlueJ alle Objekte wieder entfernt. Geben Sie also nicht die Telefonnummern ihrer gesamten Freunde ein, das Telefonbuch ist noch nicht fertig!}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Telefonbuch {&lt;br /&gt;
&lt;br /&gt;
  // Eigenschaften&lt;br /&gt;
  // Anfang Variablen&lt;br /&gt;
  public String name;&lt;br /&gt;
  public String telefonnummer;&lt;br /&gt;
  // Ende Variablen&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Telefonbuch(String name, String telefonnummer) {&lt;br /&gt;
  // ... Hier fehlen 2 Zeilen. Bitte nachtragen! (vgl. Übung)&lt;br /&gt;
  }&lt;br /&gt;
  // Anfang Ereignisprozeduren&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public String getTelefonnummer() {&lt;br /&gt;
 return telefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setTelefonnummer(String pTelefonnummer) {&lt;br /&gt;
 telefonnummer = pTelefonnummer;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public String getName() {&lt;br /&gt;
 return name;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Ende Ereignisprozeduren&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Das Auto===&lt;br /&gt;
[[Datei:Klassendiagramm-Auto.png|right|300px]]&lt;br /&gt;
Die folgende Klasse ist schon sinnvoller. Sie ist in ähnlicher   Weise in vielen Bordcomputern von  modernen Autos eingebaut: Die elementare Frage beim Autofahren ist: wie weit komme ich noch, ohne zu tanken. Die Klasse simuliert ein Auto, erfasst aber nur Daten um den Tank und den Verbrauch.  &lt;br /&gt;
&lt;br /&gt;
Besonderheit:  &amp;lt;code&amp;gt;tanke(..)&amp;lt;/code&amp;gt;  und &amp;lt;code&amp;gt;fahre(...)&amp;lt;/code&amp;gt;  sind Methoden, die den aktuellen Füllstand beeinflussen. Es sind auch in der Realität die einzigen Arten, wie man den Füllstand eines   Autos   ändert  (von  &amp;lt;code&amp;gt;klaueBenzin()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tropfeHeraus()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;verdampfe()&amp;lt;/code&amp;gt; abgesehen). Spannend ist die sondierende Methode &amp;lt;code&amp;gt;getAktuelleMaximaleReichweite&amp;lt;/code&amp;gt;, die den Wert in km zurückgibt, der bei aktuellem Füllstand noch gefahren werden kann. Die Probleme der Klasse liegen noch darin, dass man (auch über das Tankvolumen hinaus) soviel tanken kann wie man will und dass der Tankinhalt auch in den negativen Bereich fahren kann (Dispokredit bei der Tankstelle). Das können wir erst lösen, wenn wir die bedingte Ausführung kennen gelernt haben. Der folgende Quelltext ist aus dem Java-Editor übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class Auto {&lt;br /&gt;
&lt;br /&gt;
  private double volumenTank;&lt;br /&gt;
  private double verbrauchAuf100km;&lt;br /&gt;
  private double aktuellerFuellstand;&lt;br /&gt;
&lt;br /&gt;
  // Konstruktor&lt;br /&gt;
  public Auto(double pVolumenTank, double pVerbrauchAuf100km) {&lt;br /&gt;
 volumenTank=pVolumenTank;&lt;br /&gt;
 verbrauchAuf100km=pVerbrauchAuf100km;&lt;br /&gt;
 aktuellerFuellstand=0; // Bei Auslieferung ist der Tank leer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public double getAktuellerFuellstand() {&lt;br /&gt;
 return aktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Methoden&lt;br /&gt;
  public void setAktuellerFuellstand(double pAktuellerFuellstand) {&lt;br /&gt;
 aktuellerFuellstand = pAktuellerFuellstand;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVerbrauchAuf100km() {&lt;br /&gt;
 return verbrauchAuf100km;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public double getVolumenTank() {&lt;br /&gt;
 return volumenTank;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void tanke(double menge) {&lt;br /&gt;
 this.aktuellerFuellstand+=menge; // füge Menge hinzu&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public void fahre(double pKilometerZahl) {&lt;br /&gt;
 // Die Formel sagt folgendes aus:&lt;br /&gt;
 // vom aktuellen Füllstand wird abgezogen: der Verbruch bei der Kilometerzahl  &lt;br /&gt;
 aktuellerFuellstand -= pKilometerZahl / 100 * verbrauchAuf100km; &lt;br /&gt;
  }  &lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Analysieren und testen Sie alle 3 Programme. Warum bekommt nicht jede Eigenschaft eine get- und eine set-Methode?&lt;br /&gt;
# Zu Zähler: &lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getZaehlerstand()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Ergänzen Sie die Methode: &amp;lt;code&amp;gt;aufNullSetzen()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erhöheUm(double pZahl)&amp;lt;/code&amp;gt; &lt;br /&gt;
# Zu Telefonbuch: Ergänzen Sie die fehlenden Zeilen zum Konstruktor. &lt;br /&gt;
## Ergänzen Sie die Eigenschaften &amp;lt;code&amp;gt;geburtsdatum&amp;lt;/code&amp;gt; (ggf. noch &amp;lt;code&amp;lt;schuhgröße&amp;lt;/code&amp;gt;). Welchen Datentypen verwenden Sie? &lt;br /&gt;
## Benötigt die Eigenschaft eine set-Methode?&lt;br /&gt;
# Zum Auto: Ergänzen Sie die Methode: &amp;lt;code&amp;gt;getMaximaleReichweiteBeiVollemTank()&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entwickeln Sie die Klasse Handy, die die Eigenschaften &amp;lt;code&amp;gt;telefonnummer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;guthaben&amp;lt;/code&amp;gt; und &amp;lt;ode&amp;gt;gespraechskostenProMinute&amp;lt;/code&amp;gt;. Entwickeln Sie geeignete Methoden. &lt;br /&gt;
# Übung für Fortgeschrittene: Realisieren Sie die Klasse Bruch mit den Eigenschaften &amp;lt;code&amp;gt;zaehler&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;nenner&amp;lt;/code&amp;gt; und realisieren Sie die Methoden &amp;lt;code&amp;gt;addierenEinerGanzenZahl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kuerzen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;erweitern&amp;lt;/code&amp;gt;. Wenn Sie schon Vorwissen haben, können Sie hier für eine erweiterte Variante schauen: [https://drdanielappel.de/informatik/mein-kleines-java-tutorium/2-einstieg-in-die-objektorietierte-programmierung/2-04-anwendungsbeispiel-bruchrechnung/ 2.04 Anwendungsbeispiel Bruchrechnung] (drdanielappel.de)}}&lt;br /&gt;
&lt;br /&gt;
==Interaktion zwischen Objekten==&lt;br /&gt;
Zum Schluss des Kapitels behandeln wir, wie zwei Objekte miteinander kommunizieren können. Ein schönes Beispiel dafür ist die Methode &amp;lt;code&amp;gt;ueberweise()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public void ueberweise(double pBetrag, Konto pZielkonto){&lt;br /&gt;
  abheben(pBetrag);  &lt;br /&gt;
  zielkonto.einzahlen(pBetrag);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt diesmal zwei Parameter, die wir, wie schon beim Konstruktor, mit Komma trennen. Die Besonderheit ist, dass der Datentyp von Zielkonto wieder ein Konto ist. Man darf also Klassen  als Datentypen  angeben –  ja,  man  darf sogar in  Methoden  den  Datentypen der Klasse verwenden, zu dem die Methode gehört. Das ist sinnvoll, denn üblicherweise möchte man von einem Konto auf ein anderes Konto überweisen. Also muss das Konto überweisen können (wenn man keine Klasse Bank erschafft, die die Konten verwaltet. Aber das ist ein Thema für später)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
abheben(betrag);&lt;br /&gt;
zielkonto.einzahlen(pBetrag);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Box|Wichtig!| Eigenschaften, die &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt; sind, sind nur für Objekte der gleichen Klasse sichtbar. D.h. theoretisch können wir von dem einen Konto auf die Eigenschaften des anderen Kontos zugreifen. Damit es nicht zu Verwechslungen kommt, sollten Sie sich das aber erst gar nicht angewöhnen. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Konvention:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Auf die Daten von fremden Objekten oder Klassen greifen wir immer über Methoden und nie über deren Eigenschaften zu. Dies gewährleistet, dass nichts Ungewolltes verändert wird (vgl. Waschmaschinenbeispiel). Nur innerhalb des Objektes selbst verändert man die eigenen Eigenschaften direkt.|Hervorhebung}}&lt;br /&gt;
&lt;br /&gt;
{{Übung|# Schreiben Sie die Methode &amp;lt;code&amp;gt;holeEinzug (double betrag, Konto zielkonto)&amp;lt;/code&amp;gt;, bei dem das Geld von einem fremden Konto überwiesen wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;vererben (Konto erbe)&amp;lt;/code&amp;gt;, bei dem das gesamte Geld eines Kontos auf ein anderes verbucht wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;binIchReich(Konto vergleichskonto)&amp;lt;/code&amp;gt;, das die Differenz aus dem eigenen Kontostand mit einem anderen Konto vergleicht.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; auf &amp;lt;/code&amp;gt;konto2&amp;lt;/code&amp;gt; überwiesen wird.&lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;stifteNochMehrVerwirrung(Konto konto1, Konto konto2)&amp;lt;/code&amp;gt;, bei der ein unbeteiligtes Konto dafür sorgt, dass das gesamte Geld von &amp;lt;code&amp;gt;konto1&amp;lt;/code&amp;gt; halbiert, das von &amp;lt;code&amp;gt;konto2&amp;lt;/code&amp;gt; aber verdoppelt wird. &lt;br /&gt;
# Schreiben Sie die Methode &amp;lt;code&amp;gt;bekommeZinsen(double zinsatz)&amp;lt;/code&amp;gt;, das entsprechend des Zinssatzes den Kontostand erhöht.&lt;br /&gt;
# Lassen Sie von einem Konto den Namen des Besitzers eines anderen Kontos ändern. Welche Probleme ergeben sich, wenn Sie die Methode &amp;lt;code&amp;gt;setBesitzerName&amp;lt;/code&amp;gt; weglassen?&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Fortsetzung|&lt;br /&gt;
vorher=Einstieg in die OOP|vorherlink=Java/Einstieg in die OOP|&lt;br /&gt;
weiter=Algorithmik&amp;lt;br&amp;gt;(Logische Operatoren)|weiterlink=Java/Algorithmik|&lt;br /&gt;
übersicht=Einstieg in Java&amp;lt;br&amp;gt;(Übersicht)|übersichtlink=Java#Übersicht|}}&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
&lt;br /&gt;
*vgl. {{wpde|Objektorientierte Programmierung#Klassen|Klassen}}&lt;br /&gt;
*vgl. {{wpde|Attribut (UML2)|Attribut (UML2)}}&lt;br /&gt;
*http://www.informatik.ursulaschule.de/index.php?cid=368&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
[[Kategorie:Unterrichtsidee]]&lt;/div&gt;</summary>
		<author><name>Ernst Schreier</name></author>
	</entry>
</feed>