WEBVTT

00:05.120 --> 00:08.780
Ich begrüße Sie zum dritten Termin vom Vorkurs Informatik V4.

00:09.480 --> 00:12.040
Wir haben uns beim letzten Termin angeschaut, wie elementare

00:12.040 --> 00:16.340
Datentypen in Java aussehen, wie sie angelegt werden und welche acht

00:16.340 --> 00:17.440
Typen zur Verfügung stehen.

00:17.540 --> 00:20.320
Aus denen müssen Sie auswählen, wenn Sie Aufgaben lösen.

00:20.800 --> 00:23.780
Und heute schauen wir uns insbesondere die bool'schen Datentypen ein

00:23.780 --> 00:27.180
bisschen genauer an, die bedingte Ausführung, aber vorher mache ich

00:27.180 --> 00:29.920
nochmal eine kurze Wiederholung und einen Einschub, wie diese

00:29.920 --> 00:33.320
Datenelemente eigentlich aufgebaut sind und wie man mit ihnen umgeht.

00:33.320 --> 00:36.900
Also technisch ist das so, dass in der Informatik immer noch alles im

00:36.900 --> 00:38.240
Binärsystem gespeichert wird.

00:38.600 --> 00:41.140
Die kleinste Informationseinheit ist das Bit.

00:41.440 --> 00:43.120
Das hat entweder den Wert 0 oder 1.

00:43.680 --> 00:46.820
Und physikalisch wird das im Speicher eines Rechners dadurch

00:46.820 --> 00:50.120
repräsentiert, dass eine elektrische Ladung vorhanden ist oder nicht

00:50.120 --> 00:54.280
oder dass an einer Leitung eine Spannung anliegt oder nicht bzw.

00:54.680 --> 00:57.520
auf einer Festplatte, dass ein bestimmter Bereich magnetisiert ist

00:57.520 --> 01:01.180
oder nicht oder auf einem optischen Datenträger, dass eine Einprägung

01:01.180 --> 01:03.340
vorgenommen wurde oder eben nicht.

01:03.800 --> 01:07.140
Und wenn man sehr viele von diesen Nullen und Einsen zusammensetzt,

01:07.260 --> 01:10.060
kann man daraus die elementaren Datentypen zusammenbauen.

01:10.160 --> 01:14.920
Zum Beispiel das Byte besteht aus 8 Bits und wenn man jedem Bit im

01:14.920 --> 01:19.180
Zweiersystem eine Zweierpotenz zuordnet, dann kann man damit Zahlen

01:19.180 --> 01:23.900
von 0 bis 255 aufnehmen und Sie haben aber gestern schon gesehen, dass

01:23.900 --> 01:31.080
es in Java nicht die Zahlen von 0 bis 255 sind, sondern von minus 128

01:31.080 --> 01:36.300
bis plus 127, da ein Bit für das Vorzeichen weggegeben wird.

01:36.780 --> 01:42.380
Also hier ein Beispiel, die Bitkombination 10110010.

01:43.060 --> 01:46.880
Wenn Sie die Zweierpotenzen addieren, stellt den Bytewert 77 dar.

01:46.880 --> 01:50.880
Damit kann man natürliche Zahlen darstellen und wir haben ja schon

01:50.880 --> 01:54.120
gesehen, dass man daraus dann auch die höheren Datentypen durch

01:54.120 --> 01:57.480
Anhängen von weiteren Bits oder durch andere Formate darstellen kann.

01:58.640 --> 02:01.840
Damit arbeiten Sie natürlich in richtigen Programmen dann nicht, also

02:01.840 --> 02:05.440
nicht mit Einzelbytes, sondern mit höheren Datenmengen und da haben

02:05.440 --> 02:07.820
wir die typischen Vorsilben, die Sie vielleicht aus dem

02:07.820 --> 02:08.880
Physikunterricht noch kennen.

02:09.520 --> 02:12.600
Jetzt ist es so, dass in der Informatik alles bezüglich der Basis 2

02:12.600 --> 02:13.360
gerechnet wird.

02:13.360 --> 02:16.420
Das heißt, wenn wir von einem Kilobyte sprechen, sind das nicht 1000

02:16.420 --> 02:21.460
Bytes, sondern 2 hoch 10 gleich 1024 Bytes, etwa der Umfang einer

02:21.460 --> 02:22.140
Textnachricht.

02:22.400 --> 02:26.560
Die nächstgrößere Einheit ist das Megabyte mit 2 hoch 20, da würde ich

02:26.560 --> 02:28.020
mir den Zahlenwert jetzt nicht mehr merken.

02:29.080 --> 02:31.100
Das ist etwa eine Minute MP3-Musik.

02:31.720 --> 02:36.140
Die nächste höhere Einheit ist das Gigabyte mit 2 hoch 30 und dann das

02:36.140 --> 02:37.580
Terabyte mit 2 hoch 40.

02:37.780 --> 02:40.120
Das sind die Kapazitäten, bei denen wir heute sind.

02:40.120 --> 02:44.140
Die integrierten Schaltkreise in Ihren mobilen Geräten oder in Ihren

02:44.140 --> 02:46.580
Notebooks sind typischerweise im Gigabyte-Bereich.

02:46.960 --> 02:49.500
Die Festplatten, die Sie heute, die magnetischen Festplatten, die Sie

02:49.500 --> 02:53.300
haben, sind im Terabyte-Bereich und die optischen Medien sind im

02:53.300 --> 02:55.540
Moment im Gigabyte-Bereich.

02:57.440 --> 03:00.840
Das ist nicht das Ende der Entwicklung und auch nicht der Anfang.

03:01.000 --> 03:03.920
Ich stelle mal kurz dar, wie sich es historisch entwickelt hat und wie

03:03.920 --> 03:06.240
man daraus ableiten kann, wie es in den nächsten Jahrzehnten

03:06.240 --> 03:07.020
weitergehen wird.

03:07.020 --> 03:11.180
Also so richtig von Speicher kann man erst seit den 50er Jahren

03:11.180 --> 03:14.920
sprechen, wo man angefangen hat mit Lochkarten in den ersten

03:14.920 --> 03:17.280
maschinellen und elektronischen Computern zu arbeiten.

03:17.380 --> 03:21.240
Die konnten etwa 80 Byte pro Karte abspeichern und da war ein Bit

03:21.240 --> 03:25.240
tatsächlich ein in diese Karte gestanztes Loch und wenn das Loch nicht

03:25.240 --> 03:26.980
da war, dann war das Bit eben nicht gesetzt.

03:27.560 --> 03:30.700
In den 60er Jahren kamen dann die integrierten Transistoren auf den

03:30.700 --> 03:35.920
Leiterplatinen, mit denen man bis zu ein paar Kilobytes pro Chip dann

03:35.920 --> 03:36.800
abspeichern konnte.

03:36.800 --> 03:39.720
In den ersten kommerziellen Rechnersystemen.

03:39.800 --> 03:43.540
In den 70er Jahren kamen die Disketten, die ersten kommerziell

03:43.540 --> 03:48.340
verwertbaren magnetischen Datenträger mit 120 Kilobyte pro Diskette

03:48.340 --> 03:48.760
maximal.

03:48.980 --> 03:53.140
In den 80er Jahren wurde das weiter verdichtet auf 1.2 Megabyte pro

03:53.140 --> 03:53.980
Diskette maximal.

03:54.680 --> 03:58.500
Und in den 90er Jahren kamen die CDs heraus mit optischen Einprägungen

03:58.500 --> 04:03.420
und Laserabtastung, die bis zu 700 Megabyte pro CD oder eben 45

04:03.420 --> 04:06.000
Minuten Musik in der Regel abspeichern können.

04:06.000 --> 04:10.420
In den Nullerjahren des nächsten Jahrtausends kamen dann die

04:10.420 --> 04:13.620
hochintegrierten Schaltkreise, die mehrere Gigabytes auf einem Chip

04:13.620 --> 04:14.680
ablegen konnten.

04:14.780 --> 04:18.200
Die sind auch die Grundlage für die Schaltkreisdatenträger,

04:18.300 --> 04:20.620
insbesondere die SSD-Laufwerke, die sie heute haben.

04:21.280 --> 04:26.780
Die DVDs als optische Datenträger mit bis zu 4,5 Gigabyte pro Disk und

04:26.780 --> 04:30.860
dann die Blu-rays mit einer optischen Abtastung durch einen blauen

04:30.860 --> 04:33.960
Laser mit sehr kurzer Wellenlänge, der bis zu 50 Gigabyte pro Disk

04:33.960 --> 04:35.120
erreichen kann.

04:35.120 --> 04:39.080
Dann ist man in eine physikalische Barriere gelaufen bei allen drei

04:39.080 --> 04:40.160
Datenträgertypen.

04:40.420 --> 04:42.940
Die werde ich später vorstellen, aber letztlich hat man da Wege

04:42.940 --> 04:44.700
gefunden, drum herum zu kommen.

04:45.100 --> 04:47.080
Und jetzt könnte man die Frage stellen, wie das weitergeht.

04:47.820 --> 04:50.660
Das ist nicht nur bei den Speicherkapazitäten, sondern auch bei der

04:50.660 --> 04:53.440
Rechengeschwindigkeit ein entsprechender Fortschritt gewesen.

04:53.680 --> 04:56.660
Also während Sie in den 50er Jahren in den Lochkartenrechnern durch

04:56.660 --> 04:59.820
Einsetzen der Lochkarte und durch Drücken eines Hebels vielleicht eine

04:59.820 --> 05:03.380
Lochkarte pro Minute bearbeiten konnten, hatten Sie in den 60er Jahren

05:03.380 --> 05:07.620
erste kleine externe Taktraten und in den 70er Jahren die ersten

05:07.620 --> 05:09.280
Taktraten im Megahertz-Bereich.

05:10.140 --> 05:14.840
In den 80er Jahren, als die PCs aufgetaucht sind und die 8086er

05:14.840 --> 05:18.780
Familie von Intel vorgestellt wurde, die die Grundlage bis heute für

05:18.780 --> 05:23.100
die PC-Prozessoren ist, gab es Taktraten im Bereich von 1 bis zu 10

05:23.100 --> 05:26.080
Megahertz, also 10 Millionen Takte pro Sekunde.

05:26.080 --> 05:30.880
In den 90er Jahren gab es die ersten 386er und dann die Pentium

05:30.880 --> 05:35.200
-Prozessoren mit Taktraten im Bereich von 32 bis zu 166 Megahertz.

05:35.660 --> 05:38.140
In den Nullerjahren dann die ersten Gigahertz-Prozessoren.

05:38.500 --> 05:40.900
Dann ist man in eine physikalische Barriere gelaufen.

05:41.440 --> 05:44.800
In diesem Fall lag das einfach daran, dass eine noch höhere Taktung

05:44.800 --> 05:47.520
der Prozessoren dazu geführt hätte, dass sie durchbrennen, weil sie

05:47.520 --> 05:50.500
sich zu stark erhitzen, egal wie viele Kühler man draufsetzt.

05:50.500 --> 05:54.180
Und das Problem hat man kommerziell jetzt erstmal dadurch gelöst, dass

05:54.180 --> 05:58.180
die Hersteller eben mehrere Prozessoren, die jeweils 2 Gigahertz

05:58.180 --> 06:01.200
haben, zusammenschrauben und als einen Prozessor oder als einen

06:01.200 --> 06:02.560
Multicore -Prozessor verkaufen.

06:03.640 --> 06:06.640
Auch da, trotz der physikalischen Barriere, wird die Entwicklung

06:06.640 --> 06:07.200
weitergehen.

06:08.240 --> 06:12.080
Die gleiche Entwicklung gibt es auch beim Netzverkehr, also bei der

06:12.080 --> 06:14.760
Kommunikationskapazität zwischen einzelnen Rechnern.

06:14.980 --> 06:18.080
Das hat in den 50er Jahren damit angefangen, dass man Lochkarten von

06:18.080 --> 06:20.140
einem Rechner zum anderen schleppen musste.

06:20.140 --> 06:24.340
In den 60er Jahren gab es die ersten Netzverbindungen an Unis und

06:24.340 --> 06:26.360
großen Unternehmen im Kilobyte-Bereich.

06:26.780 --> 06:30.120
In den 70er Jahren gab es die ersten Telefonkoppler und damit die

06:30.120 --> 06:33.900
Möglichkeit, im Byte-pro-Sekunde- oder Bits-pro-Sekunde-Bereich

06:33.900 --> 06:36.940
Textnachrichten privat auszutauschen.

06:37.420 --> 06:40.780
In den 80er Jahren gab es die ersten echten Modems im Kilobyte-pro

06:40.780 --> 06:41.500
-Sekunde -Bereich.

06:41.640 --> 06:45.140
Dadurch gab es die ersten vernünftigen Textforen und das

06:45.140 --> 06:46.100
Bildschirmtextsystem.

06:46.100 --> 06:50.100
In den 90er Jahren kamen dann die DSL-Modems mit dem Megabyte-pro

06:50.100 --> 06:51.100
-Sekunde -Bereich.

06:51.960 --> 06:54.860
Ab dann war es möglich, tatsächlich Bilder auf Webseiten einzustellen,

06:54.920 --> 06:58.520
die optisch ansprechend zu gestalten und mehr Interaktionen mit dem

06:58.520 --> 06:59.480
Benutzer durchzuführen.

07:00.040 --> 07:02.780
Und jetzt in den Nullerjahren, das wissen Sie ja, gibt es Glasfaser

07:02.780 --> 07:06.700
-Verbindungen, ISDN- und UMDS-Verbindungen im 100 Megabyte-pro-Sekunde

07:06.700 --> 07:07.060
-Bereich.

07:07.200 --> 07:10.440
Dadurch wird es möglich, Filme zu streamen, Vollgrafische Seiten

07:10.440 --> 07:12.900
anzuzeigen, komplette Fernsehprogramme zu übertragen.

07:12.900 --> 07:16.160
Und jetzt aktuell sind wir im Highspeed-DSL- bzw.

07:16.420 --> 07:19.900
LTE-Bereich mit wieder entsprechend erhöhten Übertragungsraten.

07:20.700 --> 07:23.400
Auch hier könnte man jetzt fragen, wie geht denn diese Entwicklung

07:23.400 --> 07:23.780
weiter?

07:24.420 --> 07:27.100
Und darüber hat man sich schon sehr früh Gedanken gemacht und das

07:27.100 --> 07:29.200
sogenannte Moorische Gesetz aufgestellt.

07:29.860 --> 07:34.540
Die bestmögliche Kapazität verdoppelt sich im Schnitt alle 18 Monate.

07:34.540 --> 07:39.400
Das ist eine mathematisch richtige Vorhersage im Schnitt seit 1960.

07:39.720 --> 07:42.400
Für die Geschwindigkeit, für die Datenkapazität, für die

07:42.400 --> 07:43.680
Übertragungskapazität.

07:44.120 --> 07:47.160
Trotz aller physikalischen Barrieren, in die man da hineingelaufen

07:47.160 --> 07:47.440
ist.

07:47.600 --> 07:48.860
Also ich stelle Ihnen mal drei vor.

07:49.640 --> 07:53.360
Zum Beispiel bei der Verkleinerung der Chips ist das ja so, dass Sie

07:53.360 --> 07:55.300
ab einer bestimmten Größe, das haben Sie vielleicht im

07:55.300 --> 07:58.000
Physikunterricht gehabt, kommt drauf an, ob Sie Quantenmechanik hatten

07:58.000 --> 08:01.280
oder nicht, haben Sie gelernt, dass ab einer bestimmten Größe nicht

08:01.280 --> 08:04.040
mehr die Gesetze der klassischen Mechanik gelten, sondern die Gesetze

08:04.040 --> 08:07.260
der Quantenmechanik, die für das Rechnen mit Bits sehr sehr schlecht

08:07.260 --> 08:10.120
sind, weil es keine eindeutige 0 und keine eindeutige 1 mehr gibt.

08:11.000 --> 08:13.420
Das heißt, ab dieser Stelle kann man keine klassischen

08:13.420 --> 08:15.400
Computerbausteine mehr konstruieren.

08:16.300 --> 08:19.100
Dann gibt es die thermische Grenze beim Hochtakten von Prozessoren.

08:19.200 --> 08:22.120
Wenn Sie die Taktrate weiter erhöhen, erhöht sich die Temperatur so

08:22.120 --> 08:24.180
weit, dass die Bauteile anfangen zu schmelzen.

08:24.180 --> 08:29.180
Und bei den optischen Datenträgern ist man beim Blu-Ray-Laser jetzt

08:29.180 --> 08:31.580
auch in einer physikalischen Barriere gelandet.

08:32.020 --> 08:34.740
Denn wie Sie ja aus dem Physikunterricht wissen, hat das sichtbare

08:34.740 --> 08:39.420
Lichtspektrum von der hohen Wellenlänge Rot bis zur kleinen

08:39.420 --> 08:43.140
Wellenlänge Blau keine weiteren Einträge.

08:43.560 --> 08:46.520
Also man kann die Wellenlänge jetzt schon weiter verkürzen, aber was

08:46.520 --> 08:49.740
kommt denn nach dem blauen Wellenspektrum, wenn Sie die Wellenlänge

08:49.740 --> 08:50.540
weiter einschränken?

08:51.800 --> 08:55.240
Ja genau, dann kommen die Ultravioletten und danach die Röntgen und

08:55.240 --> 08:55.960
die Gammastrahlen.

08:56.080 --> 08:58.640
Das geht zwar technisch, aber das wollen Sie nicht unbedingt in Ihrem

08:58.640 --> 08:59.300
PC haben.

09:01.520 --> 09:04.840
Die Wellenlänge möchte man deshalb klein haben, damit man noch

09:04.840 --> 09:06.900
kleinere Bereiche abtasten bzw.

09:07.180 --> 09:10.040
in noch kleinere Bereiche diese Nullen und Einsen einbrennen kann.

09:10.560 --> 09:12.960
Und wenn man die Wellenlänge nicht weiter verkleinern kann, dann kann

09:12.960 --> 09:16.220
man den Bereich nicht kompakter machen und nicht mehr Bits auf die

09:16.220 --> 09:17.060
gleiche Fläche bringen.

09:17.060 --> 09:20.480
Aber auch da bin ich mir sicher, dass man eine Lösung finden wird, das

09:20.480 --> 09:21.020
zu umgehen.

09:21.520 --> 09:24.520
Denn das Mooresche Gesetz basiert nicht nur auf technischen, sondern

09:24.520 --> 09:26.140
auch auf ökonomischen Faktoren.

09:26.780 --> 09:31.680
Nämlich der Bedarf an Übertragungs-, Speicher- und Prozessorkapazität

09:31.680 --> 09:34.060
hat sich auch alle 18 Monate verdoppelt.

09:34.520 --> 09:37.720
Also wenn Sie mal zurückdenken, vor 10 Jahren war das noch nicht

09:37.720 --> 09:40.840
üblich, dass man komplette Fernsehereignisse im Internet übertragen

09:40.840 --> 09:41.080
hat.

09:41.080 --> 09:45.800
Und vor 40 Jahren war das sozusagen das Höchste der Gefühle, dass man

09:45.800 --> 09:48.680
eine Textnachricht mit 20 Buchstaben von einem Telefon aufs andere

09:48.680 --> 09:49.580
übertragen konnte.

09:50.060 --> 09:52.400
Diese Entwicklung wird weitergehen und dem muss sich die Technik

09:52.400 --> 09:55.060
anpassen, entsprechend dem Moorischen Gesetz.

09:55.400 --> 09:58.820
Und man wird Lösungen finden, um diese drei Barrieren zu umgehen.

10:00.020 --> 10:02.580
Das ist für Sie in Java jetzt natürlich noch ein bisschen früh.

10:02.900 --> 10:05.540
Sie können ja im Moment nur einzelne Datenwerte anlegen.

10:05.640 --> 10:09.360
Wie man viele von einem Typ anlegt, werden wir am fünften Termin

10:09.360 --> 10:09.860
durchnehmen.

10:09.860 --> 10:13.620
Einen einzelnen Datenwert legen Sie an mit dieser Deklaration.

10:13.920 --> 10:16.160
Sie schreiben den Datentyp auf, also z.B.

10:16.360 --> 10:20.860
int oder byte, geben dem einen Namen, dürfen Sie selber aussuchen, und

10:20.860 --> 10:23.060
weisen mit dem Gleichheitszeichen einen Wert zu.

10:23.840 --> 10:26.600
Sobald Sie mit dem Wert belegt ist, dürfen Sie diese Variable mit

10:26.600 --> 10:30.340
Ihrem Namen ansprechen und in Rechnungen oder Ausgaben verwenden.

10:31.060 --> 10:34.280
Dabei müssen Sie ab jetzt immer unterscheiden zwischen dem Bezeichner

10:34.280 --> 10:36.300
oder dem Namen, den die Variable hat.

10:36.300 --> 10:41.760
Den Datentyp, der ist fest, also wenn Sie ein int deklarieren, dann

10:41.760 --> 10:43.540
ist das ein int und Sie können das nicht verändern.

10:44.960 --> 10:49.160
Und den Werten, die Sie in diese Variable hineinschreiben.

10:49.700 --> 10:51.940
Also wenn Sie ein int deklarieren, können Sie da z.B.

10:52.080 --> 10:53.280
eine 2 hineinschreiben.

10:53.940 --> 10:58.880
Der Wert ist veränderlich, Name und Datentyp sind fest und Datentyp

10:58.880 --> 11:03.220
dürfen Sie nur im Moment aus den acht elementaren Typen auswählen, die

11:03.220 --> 11:04.540
wir gestern angeschaut haben.

11:04.540 --> 11:08.640
Neben den elementaren Datentypen, die Sie kennen, gibt es später noch

11:08.640 --> 11:12.780
die zusammengesetzten Datentypen und die Klassendatentypen.

11:12.940 --> 11:13.360
Z.B.

11:13.600 --> 11:16.580
den Datentyp String, den Sie jetzt schon benutzt haben, das ist keine

11:16.580 --> 11:20.140
elementare Variable, sondern der besteht aus mehreren Schriftzeichen,

11:20.200 --> 11:21.420
die aneinander gesetzt sind.

11:21.860 --> 11:24.880
Wie man genau mit diesem Typ von Variablen umgeht, wie man sie

11:24.880 --> 11:28.040
deklariert und wie man sie benutzt, werden wir uns später anschauen.

11:28.040 --> 11:31.520
Jetzt im Moment fokussieren wir uns auf die elementaren Datentypen,

11:31.620 --> 11:33.740
die acht Stück, die Sie gestern gelernt haben.

11:33.820 --> 11:37.880
Die sind in der Regel aus der Mathematik übernommen und können als

11:37.880 --> 11:41.760
Bausteine verwendet werden, um Rechnungen oder Zwischenprobleme zu

11:41.760 --> 11:42.060
lösen.

11:42.860 --> 11:43.740
Diese acht sind das.

11:43.860 --> 11:47.520
Boolean, Byte, Short, Int, Long, Float, Double und der Character.

11:47.520 --> 11:51.920
Mit den hier angegebenen Bereichen, bei den reellen Zahlen mit einer

11:51.920 --> 11:55.560
festgelegten Genauigkeit und bei den Schriftzeichen, wenn Sie sind 16

11:55.560 --> 12:00.260
-Bit, können Sie also 2 hoch 16, das sind etwa 65.000 verschiedene

12:00.260 --> 12:01.460
Schriftzeichen darstellen.

12:01.620 --> 12:04.520
Diese acht dürfen Sie verwenden mit den erlaubten Werten.

12:06.760 --> 12:10.080
Ich stelle nochmal kurz zusammen, wie man mit diesen Datentypen dann

12:10.080 --> 12:10.380
rechnet.

12:10.380 --> 12:14.400
Die ganzzahligen Datentypen Byte, Short, Int und Long eignen sich für

12:14.400 --> 12:18.620
exaktes Rechnen bei ganzzahligen Problemen, bei Zählproblemen, für

12:18.620 --> 12:21.000
Zählvariablen später, wenn wir die Schleifen anschauen.

12:22.120 --> 12:24.080
Diese Variablen haben allerdings Grenzen.

12:24.320 --> 12:27.140
Wenn Sie über diese Grenzen hinauslaufen, bekommen Sie einen Überlauf.

12:27.820 --> 12:30.300
Und Sie können mit diesen Variablen die arithmetischen

12:30.300 --> 12:34.240
Grundoperationen, Addition, Subtraktion, Multiplikation und Division

12:34.240 --> 12:35.920
mit diesen vier Symbolen durchführen.

12:35.920 --> 12:39.840
Den Rest der Division bekommen Sie mit dem Prozentzeichen.

12:40.420 --> 12:43.320
Wenn Sie auf den beiden Seiten von dem Divisionsstrich einen

12:43.320 --> 12:46.720
ganzzahligen Datentyp stehen haben, also hier zum Beispiel 17 durch 4,

12:47.220 --> 12:49.620
dann wird Java eine Division mit Rest vornehmen.

12:49.840 --> 12:53.380
Dann ist 17 durch 4 zum Beispiel 4 mit Rest 1.

12:53.640 --> 12:58.920
Also 17 durch 4 hätte den Wert 1 in Java und 17% 4, das ist der Rest,

12:59.460 --> 13:00.840
hätte den Wert 1.

13:00.840 --> 13:04.160
Denn 17 ist 16 plus 1.

13:04.940 --> 13:06.480
Da gibt es auch einen Fachbegriff für.

13:06.560 --> 13:08.800
Dieses Prozentzeichen bezeichnen wir auch als Modulo.

13:09.200 --> 13:12.760
Also 17 Modulo 4 ist 1, hat den Rest 1.

13:13.840 --> 13:17.080
Das führt zu einigen Problemen, insbesondere zu diesem beliebten

13:17.080 --> 13:19.540
Fehler, den Sie auf dem letzten Übungsblatt vielleicht schon gesehen

13:19.540 --> 13:19.880
haben.

13:20.560 --> 13:28.020
1,5 ist 0 in Java und 127 plus 1 ist minus 128 in Java wegen dem

13:28.020 --> 13:28.980
Variablenüberlauf.

13:28.980 --> 13:32.240
Das Problem dabei ist, dass Java Ihnen diese Fehler in

13:32.240 --> 13:34.920
Anführungsstrichen nicht anzeigt und dass es sogar Situationen gibt,

13:34.980 --> 13:35.620
wo Sie das wollen.

13:36.440 --> 13:39.580
Und wenn Sie das ausschließen möchten, dass Ihnen das passiert in

13:39.580 --> 13:43.040
Ihrem Programm, können Sie entweder Java durch das Anhängen von

13:43.040 --> 13:47.780
Nachkommastellen zwingen, das als Fließkommadatentyp, als Double zu

13:47.780 --> 13:51.980
speichern oder durch das Anhängen eines Kürzels, kleines d für Double,

13:52.160 --> 13:57.160
kleines l für Long, zu erzwingen, dass das Double-Variablen sind, auch

13:57.160 --> 13:58.760
wenn Sie keine Nachkommastellen haben.

13:59.180 --> 14:03.520
In der Mathematik ist 1 und 1,0 dasselbe, in Java ist es nicht

14:03.520 --> 14:04.000
dasselbe.

14:04.280 --> 14:09.440
In Java ist 1,0 eine Fließkommazahl und die 1 ohne das Punkt 0 ist

14:09.440 --> 14:11.840
eine ganze Zahl, die sich bei Divisionen anders verhält.

14:13.260 --> 14:16.680
Dazu ein paar ganz typische Beispiele, also hier Short a gleich 6,

14:17.360 --> 14:20.960
dann wird es ausgegeben, erscheint die 6 auf dem Bildschirm, a gleich

14:20.960 --> 14:24.620
a mal 2 plus 1, wenn Sie das richtig auswerten, entsteht in der

14:24.620 --> 14:28.120
Klammer eine 12, wird zuerst ausgewertet, dann plus 1 gibt hier die

14:28.120 --> 14:28.500
13.

14:29.140 --> 14:31.900
Bool'sche Werte können Sie auch über Print ausgeben lassen, kriegen

14:31.900 --> 14:34.660
Sie das Schlüsselwort False oder das Schlüsselwort True.

14:35.240 --> 14:38.940
Und Characters können Sie genauso über Print ausgeben lassen, dann

14:38.940 --> 14:41.620
kriegen Sie das entsprechende Schriftzeichen ausgegeben, wobei das

14:41.620 --> 14:44.040
jetzt ein bisschen von Ihrem Betriebssystem und Ihrer

14:44.040 --> 14:47.340
Ländereinstellung abhängt, ob das Schriftzeichen verfügbar ist oder

14:47.340 --> 14:47.660
nicht.

14:49.660 --> 14:53.240
Die Grenzen, die Sie auswendig kennen sollten, passieren immer bei den

14:53.240 --> 14:57.460
Zweierpotenzen, also ein Byte hat 8 Bits, hat 2 hoch 8 gleich 256

14:57.460 --> 15:01.580
mögliche Werte, also von minus 128 bis plus 127.

15:02.780 --> 15:09.520
Das Short hat 2 hoch 16 mögliche Werte, von minus 32.768 bis 32.767,

15:09.660 --> 15:12.420
ab der Stelle sollten Sie sich diese Zahlen nicht mehr merken.

15:12.960 --> 15:17.360
Das Int hat entsprechend 2 hoch 32 Möglichkeiten und das Long 2 hoch

15:17.360 --> 15:17.840
64.

15:18.420 --> 15:22.060
Und wenn Sie mehr möchten, müssen Sie Double oder Float benutzen.

15:22.060 --> 15:26.720
Die ganzzahligen Datentypen, zumindest die in Java eingebauten, können

15:26.720 --> 15:28.220
nicht höhere Zahlen speichern.

15:28.880 --> 15:33.120
Es gibt später noch effiziente Datentypen zum Rechnen mit größeren

15:33.120 --> 15:36.440
natürlichen Zahlen, die sind aber nicht mehr Teil von Java und sind

15:36.440 --> 15:38.780
sozusagen von außen dran programmiert worden.

15:39.660 --> 15:43.000
Der einfachste Datentyp, den Sie in Java haben, ist Boolean.

15:43.120 --> 15:44.260
Das ist ein Wahrheitswert.

15:45.180 --> 15:49.040
Der hat entweder den Wert True oder 1 bzw.

15:49.240 --> 15:51.580
Wahr und False oder 0 bzw.

15:51.860 --> 15:52.320
Falsch.

15:52.820 --> 15:56.500
So einen Datentyp brauchen Sie, wenn Sie Bedingungen speichern

15:56.500 --> 15:56.840
möchten.

15:57.340 --> 16:00.440
Also wenn Sie einen Code-Bereich durch eine Bedingung kontrollieren

16:00.440 --> 16:03.760
wollen oder wenn Sie sich merken möchten, ob eine Rechnung erfolgreich

16:03.760 --> 16:04.520
war oder nicht.

16:04.520 --> 16:07.520
Mit booleanen Datentypen können Sie aber auch rechnen.

16:07.560 --> 16:08.640
Da gibt es Arithmetik.

16:09.140 --> 16:12.920
Sie können die mit und, oder bzw.

16:13.420 --> 16:14.360
nicht verknüpfen.

16:14.660 --> 16:16.320
Da gibt es diese drei Symbole.

16:16.520 --> 16:19.300
Das Doppel-und-Zeichen kriegen Sie auf einer Windows-Tastatur mit

16:19.300 --> 16:19.820
Shift -6.

16:20.420 --> 16:23.500
Das Doppel-oder-Zeichen, den senkrechten Strich, kriegen Sie mit der

16:23.500 --> 16:25.360
Alt -Groß-Plus-die-Kleiner-Taste.

16:26.020 --> 16:28.800
Und das Ausrufezeichen kriegen Sie mit Shift-1.

16:28.960 --> 16:31.960
Diese drei Symbole benutzen Sie für die logische Arithmetik.

16:32.060 --> 16:35.540
Beachten Sie, dass das Ausrufezeichen für die Negation vor dem A

16:35.540 --> 16:35.900
steht.

16:36.300 --> 16:38.720
Das Ausrufezeichen hinter dem A ist etwas anderes.

16:38.880 --> 16:41.000
Das ist das Fakultätssymbol aus der Mathematik.

16:41.460 --> 16:43.640
Und dieses Ausrufezeichen hier ist wieder etwas anderes.

16:43.780 --> 16:46.180
Das ist das Ausrufezeichen aus dem Deutschunterricht.

16:46.460 --> 16:47.960
Da muss man ab und zu etwas trennen.

16:49.340 --> 16:53.000
Boolean können Sie wie alle anderen elementaren Datentypen zuweisen,

16:53.140 --> 16:56.200
über Print ausgeben oder als Parameter verwenden, wo immer ein

16:56.200 --> 16:58.140
Wahrheitswert gefordert ist.

16:58.740 --> 17:01.100
Ich stelle die einzelnen Operationen mal kurz vor.

17:02.380 --> 17:06.880
Und da sollten Sie sich gleich angewöhnen, nicht die Alltagsbedeutung

17:06.880 --> 17:11.020
dieser Wörter nicht und oder zu benutzen, sondern die Fachbegriffe.

17:11.980 --> 17:16.360
Das Nicht heißt eigentlich Negation, denn es dreht den Wert der

17:16.360 --> 17:17.100
Variablen um.

17:17.100 --> 17:20.300
Wenn A false ist, dann ist das Negative von A true.

17:20.860 --> 17:23.720
Und wenn A true ist, dann ist das Negative von A false.

17:24.720 --> 17:27.180
Statt und benutzen wir den Fachbegriff Konjunktion.

17:28.220 --> 17:33.380
Also die Konjunktion von A und B ist eben true, wenn A und B true sind

17:33.380 --> 17:35.320
und in allen anderen Fällen false.

17:35.420 --> 17:36.680
Das führt zu dieser Tabelle hier.

17:37.300 --> 17:38.560
Und das dritte ist das oder.

17:38.840 --> 17:41.360
Der Fachbegriff dafür lautet Disjunktion.

17:42.180 --> 17:46.240
A oder B ist dann true, wenn A oder B true ist.

17:46.240 --> 17:50.120
Wie würde denn diese Tabelle jetzt aussehen, wenn man sie entsprechend

17:50.120 --> 17:52.560
der beiden möglichen Eingaben hier ausfüllt?

17:54.320 --> 17:54.980
Ja, genau.

17:55.380 --> 17:59.200
Also es sind alle Zeilen true, bis auf die erste, wo beide false sind.

17:59.300 --> 18:02.760
Das oder können Sie sich auch so vorstellen, dass eben mindestens

18:02.760 --> 18:04.480
einer von beiden true sein muss.

18:04.620 --> 18:07.720
Und das false können Sie dann nur bekommen, wenn beide false sind.

18:08.100 --> 18:10.780
Das war jetzt einfach, aber schauen Sie sich mal diesen

18:10.780 --> 18:15.940
zusammengesetzten Ausdruck an und versuchen Sie auszurechnen, welche

18:15.940 --> 18:19.100
Werte in diese vier Einträge von der dritten Spalte kommen.

18:21.280 --> 18:24.500
Wenn Sie keine Klammern haben, gilt hier auch Punkt vor Strich.

18:24.740 --> 18:28.740
Also diese Konjunktion wird ausgeführt, bevor diese Disjunktion

18:28.740 --> 18:29.500
ausgeführt wird.

18:29.580 --> 18:32.580
Ich lasse Ihnen ein paar Minuten Zeit, das auszurechnen und dann

18:32.580 --> 18:36.400
diskutieren wir vielleicht, welche möglichen Wege es gibt, da auf die

18:36.400 --> 18:37.220
Lösungen zu kommen.

18:43.780 --> 18:45.660
Gut, also das ist die richtige Lösung.

18:46.140 --> 18:50.000
Wenn beide false sind, bekommen Sie false heraus und ansonsten immer

18:50.000 --> 18:50.300
true.

18:51.040 --> 18:53.140
Welche Möglichkeiten gibt es, da drauf zu kommen?

18:54.260 --> 18:57.160
Also die erste, ja, haben Sie recht, die erste Möglichkeit ist

18:57.160 --> 19:00.740
natürlich, dass man die Werte einsetzt und dann die Klammer auflöst,

19:01.560 --> 19:04.300
dann hier für B und A die Werte einsetzt und guckt, was am Ende

19:04.300 --> 19:04.780
rauskommt.

19:04.900 --> 19:06.560
Sie werten das also sukzessive aus.

19:07.260 --> 19:10.320
Wenn zum Beispiel alle Variablen false sind, habe ich hier false oder

19:10.320 --> 19:14.860
false, gibt die Klammer false und false gibt wieder false und oder

19:14.860 --> 19:17.320
false gibt letztlich das false, was hier steht.

19:17.920 --> 19:20.220
Das funktioniert immer, aber das ist natürlich aufwendig.

19:20.320 --> 19:21.280
Geht das ein bisschen kürzer?

19:24.400 --> 19:28.040
Ja, genau, also er hat gesagt, dass wenn man schon weiß, dass das a

19:28.040 --> 19:31.420
true ist, dann weiß man, dass der ganze Ausdruck true ist.

19:31.480 --> 19:34.220
Dann ist es nämlich egal, was hier auf der linken Seite von dieser

19:34.220 --> 19:35.080
Disjunktion steht.

19:35.260 --> 19:36.560
Dann kommt immer true heraus.

19:36.560 --> 19:40.980
Das heißt, bei allen Zeilen, wo das a true ist, kann ich hier sofort

19:40.980 --> 19:43.620
true in die letzte Spalte schreiben und muss gar nichts rechnen.

19:44.940 --> 19:48.860
Genau, das ist genauso wie bei gewöhnlichen mathematischen Ausdrücken

19:48.860 --> 19:49.180
auch.

19:49.280 --> 19:51.980
Wenn Sie irgendwas mit null multiplizieren, dann wissen Sie, dass null

19:51.980 --> 19:54.020
herauskommt und müssen den Rest gar nicht mehr anschauen.

19:54.420 --> 19:56.120
Das geht bei logischen Ausdrücken genauso.

19:57.020 --> 20:00.560
Disjunktion mit true gibt immer true und Konjunktion mit false gibt

20:00.560 --> 20:02.720
immer false und Sie müssen den Rest nicht mehr auswerten.

20:02.720 --> 20:06.840
Gibt es noch eine Möglichkeit, das auszuwerten, wenn Ihnen diese

20:06.840 --> 20:08.980
beiden Ansätze nicht zur Verfügung stehen?

20:11.200 --> 20:13.920
Da bin ich nicht mehr sicher, ob das an der Schule noch so gemacht

20:13.920 --> 20:14.160
wird.

20:14.560 --> 20:16.140
Sie können das ausmultiplizieren.

20:16.280 --> 20:19.200
Auch logische Ausdrücke können Sie ausmultiplizieren.

20:19.420 --> 20:23.940
Also zum Beispiel hier würden Sie a und b oder b und b herausbekommen.

20:24.520 --> 20:28.000
Durch ausmultiplizieren und ablesen können Sie dann auch sehen, wo das

20:28.000 --> 20:28.860
false oder true ist.

20:28.860 --> 20:31.680
Wobei hier durch ausmultiplizieren würden Sie den Ausdruck ja länger

20:31.680 --> 20:32.440
als kürzer machen.

20:32.520 --> 20:34.580
Das bringt also vielleicht nicht wirklich was.

20:35.000 --> 20:38.380
Was würden Sie denn statt ausmultiplizieren mathematisch tun wollen,

20:38.480 --> 20:39.780
damit das kürzer wird statt länger?

20:41.240 --> 20:42.120
Genau, zusammenfassen.

20:42.500 --> 20:44.940
Und da müssen Sie jetzt halt schauen, wo Sie gemeinsame Faktoren

20:44.940 --> 20:45.180
haben.

20:45.300 --> 20:48.480
Wobei sich das Unzeichen wie ein Malpunkt und das Oderzeichen wie ein

20:48.480 --> 20:49.000
Plus verhält.

20:49.400 --> 20:52.040
Und dann können Sie ausklammern oder zusammenfassen.

20:52.160 --> 20:54.880
Das wäre die dritte Möglichkeit, diesen Ausdruck auszuwerten.

20:55.640 --> 20:58.580
Gut, das haben wir uns jetzt angeschaut.

20:58.700 --> 21:01.220
Aber Sie müssen nicht nur dieses auswerten können, das macht ja in der

21:01.220 --> 21:02.420
Regel der Rechner nachher für Sie.

21:02.900 --> 21:06.060
Sondern Sie müssen vor allem in Umgangssprache formulierte

21:06.060 --> 21:11.520
Aufgabenstellungen oder Aussagen in bulsche Ausdrücke übersetzen

21:11.520 --> 21:11.820
können.

21:11.980 --> 21:14.220
Das ist nicht ganz einfach, weil die deutsche Sprache nicht so

21:14.220 --> 21:17.740
eindeutig definiert ist wie die bulsche Logik in Java.

21:18.320 --> 21:19.780
Schauen Sie sich mal diesen Satz hier an.

21:19.780 --> 21:24.280
Sie dürfen das Fach Informatik studieren, falls Sie ein Abitur in

21:24.280 --> 21:28.560
Deutschland oder einen gleichwertigen Abschluss haben und Informatik

21:28.560 --> 21:30.080
nicht vorher schon studiert haben.

21:31.100 --> 21:33.620
Da gibt es also vier Wahrheitswerte drin.

21:34.100 --> 21:35.840
Sie dürfen Informatik studieren, ja oder nein.

21:35.920 --> 21:37.260
Sie haben Abitur, ja oder nein.

21:37.820 --> 21:39.980
Sie haben einen gleichwertigen Abschluss, ja oder nein.

21:40.100 --> 21:42.060
Sie haben schon mal studiert, ja oder nein.

21:42.500 --> 21:46.340
Versuchen Sie mal einen aussagenlogischen Ausdruck mit den Symbolen

21:46.340 --> 21:50.240
von Java zusammenzuschreiben, der genau diesen Satz hier darstellt.

21:51.440 --> 21:54.420
Lasse ich Ihnen wieder ein paar Minuten Zeit und dann diskutieren wir

21:54.420 --> 21:54.680
das.

21:59.960 --> 22:01.260
So, schlagen Sie mir mal was vor.

22:02.860 --> 22:04.380
Jawohl, das ist auch meine Lösung.

22:04.960 --> 22:09.260
Klammer auf, Abitur oder gleichwertig, Klammer zu und nicht studiert.

22:10.040 --> 22:13.820
Sie dürfen Informatik studieren, wenn Sie ein Abitur oder einen

22:13.820 --> 22:16.920
gleichwertigen Abschluss haben und noch nicht studiert haben.

22:16.920 --> 22:20.320
Ist das die einzige Möglichkeit, das zu übersetzen oder gibt es

22:20.320 --> 22:20.660
andere?

22:22.320 --> 22:23.780
Das ist die einzig sinnvolle.

22:24.480 --> 22:27.440
Woher wissen Sie denn, dass hier Klammern um das Abitur oder

22:27.440 --> 22:28.340
gleichwertig stehen?

22:28.420 --> 22:31.220
Wenn die Klammern nicht da wären, würde wegen der Punkt-vor-Strich

22:31.220 --> 22:34.340
-Regel das gleichwertig mit dem nicht studiert verknüpft.

22:35.000 --> 22:36.460
Warum haben Sie das so gemacht?

22:36.780 --> 22:38.360
Woran sehen Sie das in dem Satz?

22:38.720 --> 22:40.480
Gibt es zwei Gründe, das zu sehen?

22:41.280 --> 22:42.800
Ja, das ist der erste Grund.

22:43.020 --> 22:46.720
Durch das Komma ist klar, dass dieses, falls Sie ein Abitur oder einen

22:46.720 --> 22:50.700
gleichwertigen Abschluss haben, dass das ein Relativsatz ist und der

22:50.700 --> 22:51.960
landet hier in dieser Klammer.

22:52.200 --> 22:54.620
Das Komma trennt diesen Teilsatz ab.

22:55.060 --> 22:56.040
Das lernen Sie in der 8.

22:56.120 --> 22:59.320
Klasse im Deutschunterricht, falls Sie sich noch daran erinnern.

22:59.460 --> 23:05.000
Und das macht hier in Java die Wirkung, dass Abituren gleichwertig

23:05.000 --> 23:07.420
zusammengehören und deshalb eingeklammert werden müssen.

23:07.420 --> 23:10.720
Wenn Sie jetzt keine Ahnung von deutscher Grammatik hätten, wie

23:10.720 --> 23:13.220
könnten Sie dann auch darauf kommen, dass Sie das einklammern müssen?

23:16.280 --> 23:16.740
Ja, genau.

23:17.180 --> 23:19.860
Weil es einfach keinen Sinn macht, die Klammern andersherum zu setzen.

23:19.960 --> 23:23.380
Dann könnten Sie, wenn Sie ein Abitur haben, Informatik studieren,

23:23.480 --> 23:25.020
obwohl Sie es schon mal studiert haben.

23:25.360 --> 23:27.060
Was Sie da benutzen, ist Kontextwissen.

23:27.600 --> 23:28.680
Das ist jetzt nicht so einfach.

23:28.800 --> 23:31.100
Das kann auch sein, dass in anderen Ländern die Prüfungsordnungen

23:31.100 --> 23:31.860
anders aussehen.

23:32.220 --> 23:34.020
Das ist jetzt vielleicht nur in Deutschland so, dass Sie das nicht

23:34.020 --> 23:35.060
zweimal studieren dürfen.

23:35.060 --> 23:36.520
Das ist Kontextwissen.

23:36.640 --> 23:39.020
Das hat jetzt nichts mit Logik und nichts mit deutscher Sprache zu

23:39.020 --> 23:41.680
tun, sondern da müssen Sie einfach wissen, wie ein Studium in

23:41.680 --> 23:42.520
Deutschland funktioniert.

23:42.740 --> 23:45.420
Ohne das können Sie dann die Aufgabe hier gar nicht lösen.

23:46.040 --> 23:47.400
Und das war noch ein einfacher Satz.

23:47.540 --> 23:49.480
Gucken Sie sich mal diesen hier an.

23:50.460 --> 23:54.440
Sie können an einer Klausur teilnehmen, wenn Sie angemeldet, aber

23:54.440 --> 23:56.520
nicht krank oder ausgeschlossen sind.

23:56.520 --> 24:01.120
Sie können jetzt nicht einfach hergehen und diese ganzen Wörter aber,

24:01.320 --> 24:05.220
oder, wenn direkt in logische Symbole übersetzen.

24:05.320 --> 24:08.740
Das geht nicht so einfach, sondern je nach Kontext können diese Wörter

24:08.740 --> 24:10.040
verschiedene Bedeutungen haben.

24:10.800 --> 24:14.260
Versuchen Sie mal, den logischen Ausdruck richtig zusammenzubauen und

24:14.260 --> 24:17.120
dann diskutieren wir, wie die Wörter übersetzt worden sind.

24:23.830 --> 24:25.550
Genau, das ist auch meine Lösung.

24:26.110 --> 24:30.770
Sie dürfen teilnehmen, wenn Sie angemeldet sind und nicht krank oder

24:30.770 --> 24:31.750
ausgeschlossen sind.

24:32.210 --> 24:35.470
Da geht jetzt wieder hier Kontextwissen ein, dass krank und

24:35.470 --> 24:38.090
ausgeschlossen sein eben beides Bedingungen sind, die dazu führen,

24:38.170 --> 24:39.310
dass Sie nicht teilnehmen dürfen.

24:39.970 --> 24:42.570
Deshalb müssen Sie die einklammern, sonst wirkt sich das Nicht-Zeichen

24:42.570 --> 24:44.070
nur auf das krank aus.

24:44.870 --> 24:47.010
Sie sehen es auch wieder an der deutschen Grammatik.

24:47.090 --> 24:49.190
Da ist ein Komma, das leitet einen Relativsatz ein.

24:49.190 --> 24:51.530
Alles, was danach kommt, gehört in eine Klammer.

24:52.210 --> 24:55.150
Sie können allerdings nicht, und das ist eine Schwierigkeit beim

24:55.150 --> 24:58.550
Aufbau logischer Systeme oder künstlicher Intelligenzsysteme, Sie

24:58.550 --> 25:02.050
können nicht einfach dieses Nicht nehmen und das in dieses

25:02.050 --> 25:03.450
Ausrufezeichen übersetzen.

25:04.090 --> 25:07.210
Dann hätten Sie jetzt nämlich hier den Ausdruck Klammer auf, nicht

25:07.210 --> 25:09.350
krank oder ausgeschlossen Klammer zu.

25:09.670 --> 25:11.330
Und das ist nicht das, was da unten steht.

25:12.050 --> 25:15.390
Sie hören auch an meiner Redeweise, dass die Wörter nicht, oder und

25:15.390 --> 25:18.450
andauernd in der deutschen Sprache auftauchen, obwohl sie manchmal

25:18.450 --> 25:19.770
eine ganz andere Bedeutung haben.

25:20.170 --> 25:21.590
Also hier dieses Aber zum Beispiel.

25:22.250 --> 25:24.730
Welches Symbol in unserem Ausdruck entspricht denn diesem Aber?

25:25.790 --> 25:26.870
Genau das Und hier unten.

25:27.410 --> 25:30.810
Dieses Aber könnte man auch als Und schreiben, wenn sie angemeldet

25:30.810 --> 25:33.150
sind und nicht krank oder ausgeschlossen.

25:33.250 --> 25:35.770
Das ist eine Bedeutung, die man dem Wort Aber jetzt hier gar nicht

25:35.770 --> 25:36.930
zugetraut hätte.

25:37.390 --> 25:40.470
Das führt dazu, dass Sie nicht einfach ein Programm schreiben können,

25:40.550 --> 25:43.330
das diese deutschen Wörter durch bestimmte Symbole ersetzt, sondern da

25:43.330 --> 25:44.750
müssen Sie Denkarbeit reinstecken.

25:44.750 --> 25:47.710
Es ist nicht so einfach und ab und zu ist es auch mehrdeutig.

25:48.110 --> 25:51.030
Dass das jetzt so geklammert werden muss und nicht anders, ist

25:51.030 --> 25:52.330
letztlich wieder Kontextwissen.

25:52.990 --> 25:55.590
Die andere Klammerung würde keinen Sinn machen, dann dürften Sie

25:55.590 --> 25:57.290
teilnehmen, wenn Sie ausgeschlossen sind.

25:58.010 --> 26:01.810
Das ist aber Kontextwissen und das ist vielleicht auch nur in unserem

26:01.810 --> 26:02.470
Studium so.

26:02.990 --> 26:06.050
Ich erkläre vielleicht mal kurz, was der Unterschied zwischen den

26:06.050 --> 26:08.710
einfachen und den doppelten logischen Symbolen ist.

26:08.810 --> 26:10.630
Das ist in Java ein ganz wichtiger Unterschied.

26:11.470 --> 26:16.350
Die doppelten Symbole sind logische Verknüpfungen.

26:17.110 --> 26:20.630
Logische Verknüpfungen verbinden Wahrheitswerte, die entweder true

26:20.630 --> 26:21.390
oder false sind.

26:22.030 --> 26:25.910
Die einfachen Symbole, also das einfache Unzeichen und das einfache

26:25.910 --> 26:29.090
Oderzeichen, sind logische Operatoren, die Zahlen verarbeiten.

26:29.790 --> 26:30.750
Und zwar bitweise.

26:31.290 --> 26:35.070
Bitweise bedeutet, wenn Sie also 65 oder 3 mit dem einfachen Oder

26:35.070 --> 26:39.850
hinschreiben, dass Sie die 65 in Ihre Binärdarstellung zerlegen.

26:39.850 --> 26:44.110
Das ist hier die 2 hoch 6 und hier ist das die 2 hoch 0.

26:44.970 --> 26:48.130
Oder, die 3, das ist 2 hoch 1 plus 2 hoch 0.

26:48.910 --> 26:52.070
Die verknüpfen Sie mit dem Oder und jetzt wird jedes Bit mit jedem

26:52.070 --> 26:52.850
Oder verknüpft.

26:53.150 --> 26:55.910
Diese 1 oder dieses 1 gibt diese 1.

26:56.850 --> 26:59.370
Diese 1 oder diese 0 gibt diese 1.

27:00.350 --> 27:04.010
Diese 0 oder diese 0 gibt diese 0.

27:04.650 --> 27:07.830
Java geht das bitweise durch und dann erhalten Sie ein neues Bitmuster

27:07.830 --> 27:11.590
und das wird wieder zu einer neuen Zahl zusammengesetzt, hier zu 67.

27:12.310 --> 27:13.270
Damit können Sie rechnen.

27:13.450 --> 27:16.450
Also Sie können 65 oder 3 ausrechnen, das gibt 67.

27:17.490 --> 27:21.670
Das wird in Java strikt getrennt von den logischen Symbolen für

27:21.670 --> 27:22.350
Wahrheitswerte.

27:22.470 --> 27:26.550
Das hat seinen Grund, weil Sie nicht möchten, dass die 1 einfach in

27:26.550 --> 27:27.450
true übersetzt wird.

27:27.550 --> 27:30.510
Es gibt ganz einfache Situationen, wo das schief geht.

27:32.790 --> 27:36.170
An sich werden wir für die weiteren Rechnungen nur diese Doppelsymbole

27:36.170 --> 27:36.690
benötigen.

27:36.850 --> 27:39.010
Es wird vielleicht ein, zwei Fälle geben, wo Sie die bitweisen

27:39.010 --> 27:40.050
Operatoren brauchen.

27:40.630 --> 27:43.210
Und für beide gelten die Punkt-vor-Strich-Regeln.

27:43.630 --> 27:47.170
Das heißt, zuerst kommt die Negation, die wirkt immer zuerst.

27:47.750 --> 27:51.490
Dann kommt die Konjunktion und zuletzt die Disjunktion.

27:52.430 --> 27:55.890
Wenn Sie das steuern möchten, können Sie Klammern um die Operation

27:55.890 --> 27:56.430
setzen.

27:56.430 --> 28:00.870
Und ansonsten, Styleguide am KIT verlangt von Ihnen, dass Sie Klammern

28:00.870 --> 28:04.530
um alle Operatoren setzen.

28:05.370 --> 28:07.150
Dazu gehören jetzt auch diese beiden hier.

28:07.510 --> 28:10.370
Das Nicht-Zeichen gilt nicht als mehrwertiger Operator.

28:10.510 --> 28:12.290
Um das setzen Sie bitte keine Leerzeichen.

28:13.210 --> 28:13.810
Gut.

28:15.450 --> 28:18.410
Sobald Sie so einen Wahrheitswert zusammengebaut und aus einem

28:18.410 --> 28:21.670
deutschen Satz hergestellt haben, können Sie ihn verwenden mit der IF

28:21.670 --> 28:24.170
-Anweisung, um Befehlsblöcke zu kontrollieren.

28:24.170 --> 28:26.210
Das ist die wichtigste Anwendung von diesen bool'schen

28:26.210 --> 28:26.990
Wahrheitswerten.

28:27.810 --> 28:29.490
Die Syntax ist relativ einfach.

28:29.930 --> 28:31.370
Englisches Schlüsselwort IF.

28:31.890 --> 28:33.710
Leerzeichen, Klammer auf, runde Klammern.

28:34.210 --> 28:36.790
Dann eine logische Bedingung oder eine bool'sche Variable, runde

28:36.790 --> 28:38.070
Klammer zu, Leerzeichen.

28:38.590 --> 28:40.830
Und dann in geschweiften Klammern ein Programmblock.

28:41.310 --> 28:44.650
Dieser Programmblock wird dann nur ausgeführt, wenn diese Bedingung

28:44.650 --> 28:45.650
true ergeben hat.

28:45.650 --> 28:48.770
Das ist also ein Testausdruck in diesen runden Klammern, der

28:48.770 --> 28:51.710
entscheidet, ob der Programmcode in den geschweiften Klammern

28:51.710 --> 28:54.030
ausgeführt wird oder nicht.

28:55.510 --> 28:58.670
Typischerweise besteht diese Bedingung aus bool'schen Variablen oder

28:58.670 --> 29:02.390
arithmetischen Vergleichen oder Rückgaben von Methoden, die Sie später

29:02.390 --> 29:06.210
aufrufen, die dann entscheiden, ob der Block ausgeführt wird oder

29:06.210 --> 29:06.550
nicht.

29:07.570 --> 29:09.110
Ganz, ganz einfaches Beispiel.

29:09.290 --> 29:10.910
Sie deklarieren einen Integer a.

29:11.250 --> 29:13.590
Dann passiert irgendetwas mit dem, Sie wissen jetzt nicht was.

29:13.590 --> 29:19.030
Und jetzt möchten Sie diese Zeile hier ausführen, wenn a größer als 3

29:19.030 --> 29:19.370
ist.

29:19.470 --> 29:22.830
if, runde Klammer auf, a größer 3, runde Klammer zu.

29:23.330 --> 29:27.270
Die System.out.println wird ausgeführt, wenn a einen Wert zu diesem

29:27.270 --> 29:30.730
Zeitpunkt, einen Wert enthält, der echt größer als 3 ist.

29:31.770 --> 29:35.010
Dieses a größer 3 ist ein bool'scher Ausdruck, hat entweder den Wert

29:35.010 --> 29:37.270
false oder den Wert true.

29:38.410 --> 29:42.170
Sie können die if-Anweisung mit else kombinieren und das dann wirklich

29:42.170 --> 29:43.790
wie einen englischen Satz lesen.

29:44.130 --> 29:49.770
if, diese Bedingung hier, dann passiert Block 1, sonst, englisch else,

29:50.270 --> 29:51.270
passiert Block 2.

29:51.530 --> 29:54.350
Also wenn die Bedingung true ergibt, wird Block 1 ausgeführt.

29:54.890 --> 29:58.090
Wenn die Bedingung false ergibt, wird Block 2 ausgeführt.

29:58.530 --> 30:00.650
Das ist eine kombinierte if-Anweisung.

30:00.650 --> 30:02.310
Auch dazu ein Beispiel.

30:03.170 --> 30:06.150
Typisches Beispiel, Sie wollen, dass das Programm eine Wurzel

30:06.150 --> 30:08.930
ausrechnet von einer Zahl, die der Benutzer eingegeben hat.

30:09.410 --> 30:12.070
Sie fordern mit System.out.println den Benutzer auf, eine Zahl

30:12.070 --> 30:12.690
einzugeben.

30:13.250 --> 30:17.530
Sie benutzen den Eingabescanner von gestern, um eine reelle Zahl vom

30:17.530 --> 30:18.630
Benutzer einzulesen.

30:19.310 --> 30:23.790
Und jetzt prüfen Sie aber, ob diese Zahl nicht negativ ist.

30:24.090 --> 30:28.050
Wenn sie kleiner 0 ist, sagen Sie dem Benutzer, dass Sie keine Wurzel

30:28.050 --> 30:29.610
aus negativen Zahlen ziehen können.

30:30.410 --> 30:34.250
Else, das passiert also, wenn a größer gleich 0 ist, dann rechnen Sie

30:34.250 --> 30:38.250
die Wurzel aus und geben Sie mit print auf der Konsole aus.

30:38.510 --> 30:41.870
Das ist eine ganz typische Anwendung dieser if-else-Konstruktion zur

30:41.870 --> 30:46.390
Kontrolle einer Benutzereingabe und zur Kontrolle, ob diese Operation

30:46.390 --> 30:47.550
erlaubt ist oder nicht.

30:51.790 --> 30:52.770
Weiteres Beispiel.

30:53.470 --> 30:57.470
Wenn Sie komplizierte logische Ausdrücke haben, können Sie Bedingungen

30:57.470 --> 31:00.170
in den bool'schen Variablen abspeichern und später wiederverwenden.

31:00.170 --> 31:03.870
Also Sie können diese Bedingung, ob a größer 3 ist, in der bool'schen

31:03.870 --> 31:07.330
Variable b ablegen, die ist jetzt entweder true oder false, und später

31:07.330 --> 31:09.610
diese if-Anweisung durch b kontrollieren lassen.

31:10.490 --> 31:14.110
Wenn b an der Stelle true ist, wird das Print ausgeführt, sonst nicht.

31:14.270 --> 31:16.910
Das ist auch eine ganz typische Konstruktion, die Sie auch immer

31:16.910 --> 31:20.750
benutzen sollten, wenn Sie zusammengesetzte Ausdrücke haben, dann

31:20.750 --> 31:23.150
teilen Sie die in einzelne bool'sche Variablen auf.

31:24.230 --> 31:26.850
Die können Sie mit den logischen Operationen, die wir gerade

31:26.850 --> 31:28.250
angeschaut haben, zusammensetzen.

31:28.390 --> 31:31.010
Also jetzt habe ich hier drei bool'schen Variablen a, b, c.

31:31.770 --> 31:38.230
Und diese Anweisung wird ausgeführt, wenn a und b true ist oder c.

31:39.010 --> 31:42.190
Also falls c eingetreten ist oder a und b.

31:42.310 --> 31:45.710
Und eigentlich müsste ich grammatikalisch hier um a und b auch noch

31:45.710 --> 31:46.430
eine Klammer setzen.

31:46.430 --> 31:50.050
Dafür dürfen Sie die drei Symbole benutzen, Konjunktion, Disjunktion,

31:50.530 --> 31:53.170
Negation, um Ihre if-Bedingungen aufzubauen.

31:55.530 --> 31:59.070
Sie können statt größer und kleiner auch Gleichheit prüfen, da gibt es

31:59.070 --> 32:00.590
in Java aber eine Besonderheit.

32:00.730 --> 32:03.850
Wenn Sie prüfen wollen, ob zwei Variablen den gleichen Wert enthalten,

32:04.330 --> 32:07.050
benutzen Sie das doppelte Gleichheitszeichen, gleich gleich.

32:07.670 --> 32:11.730
Das gibt true zurück, wenn die Variablen a und b den gleichen Wert

32:11.730 --> 32:12.010
haben.

32:12.010 --> 32:14.970
Das einfache Gleichheitszeichen kennen Sie ja schon.

32:15.450 --> 32:18.330
Das ist kein Vergleich, wie in der Mathematik, sondern das ist eine

32:18.330 --> 32:19.050
Zuweisung.

32:19.850 --> 32:22.830
Die weist den Wert von b der Variablen a zu.

32:22.990 --> 32:25.110
So etwas sollten Sie in einer if-Bedingung nicht machen.

32:26.850 --> 32:30.050
Da wird Ihnen der Java-Compiler auch zumindest eine Warnung anzeigen,

32:30.110 --> 32:30.910
wenn Sie das versuchen.

32:30.990 --> 32:34.070
Wenn Sie so eine Warnung bekommen, müssen Sie es durch ein doppeltes

32:34.070 --> 32:35.330
Gleichheitszeichen ersetzen.

32:35.330 --> 32:39.150
Das doppelte Gleichheitszeichen ergibt einen Wert vom Tribulien und

32:39.150 --> 32:42.070
das hier unten ist eigentlich eine Anweisung und kein Vergleich.

32:43.630 --> 32:47.870
Ansonsten dürfen Sie für Zahlen die kleiner größer Zeichen benutzen,

32:48.330 --> 32:50.010
mit der gleichen Bedeutung wie in der Mathematik.

32:50.590 --> 32:53.730
Die kleiner gleich und größer gleich Zeichen kennt Java nicht, aber

32:53.730 --> 32:56.330
Sie können die umschreiben mit kleiner und dann im Gleichheitszeichen

32:56.890 --> 33:00.030
und größer und dann im Gleichheitszeichen für die kleiner gleich und

33:00.030 --> 33:02.190
größer gleich Vergleiche zwischen Zahlen.

33:02.190 --> 33:05.990
Die funktionieren mit allen ganzzahligen und reellen Datentypen.

33:06.710 --> 33:10.790
Den Gleichheitstest dürfen Sie für alle Variablen einsetzen, ohne dass

33:10.790 --> 33:13.990
Sie eine Fehlermeldung bekommen, auch für Char und Boolean, auch für

33:13.990 --> 33:14.310
String.

33:14.690 --> 33:17.730
Aber für String kommt nicht das heraus, was Sie erwarten.

33:17.950 --> 33:20.170
Das erkläre ich Ihnen am Ende heute nochmal kurz.

33:20.630 --> 33:24.010
Aber schreiben Sie es sich jetzt bitte groß und rot in Ihr Heft, das

33:24.010 --> 33:27.690
doppelte Gleichheitszeichen nicht mit Strings benutzen.

33:27.690 --> 33:31.290
String ist kein elementarer Datentyp und da verhalten sich die Werte,

33:31.390 --> 33:35.230
die drinstehen, grundsätzlich anders als bei elementaren Datentypen.

33:35.310 --> 33:37.370
Das werden wir aber erst nächste Woche genauer untersuchen können.

33:38.530 --> 33:41.770
Es gibt auch ein Symbol für das Ungleichheitszeichen, also wenn Sie

33:41.770 --> 33:45.810
fragen wollen, ob zwei Variablen ungleich sind, dann schreiben Sie

33:45.810 --> 33:46.450
nicht gleich.

33:46.590 --> 33:50.590
Das ist das gleiche, als wenn Sie sagen, nicht, A gleich gleich B.

33:51.570 --> 33:53.670
Damit können Sie testen, ob etwas ungleich ist.

33:53.670 --> 33:57.630
Und jetzt machen wir einfach eine Reihe von Beispielen, um abzuprüfen,

33:58.150 --> 33:59.210
ob Sie das verstanden haben.

33:59.350 --> 34:02.290
Also zunächst mal ganz einfach, wenn Sie mathematisch prüfen wollen,

34:02.450 --> 34:05.490
ob X gleich 3 ist, müssen Sie sich daran erinnern, dass das in Java

34:05.490 --> 34:07.090
mit einem Doppelgleichheitszeichen geht.

34:07.710 --> 34:08.550
Und dann sieht das so aus.

34:15.810 --> 34:18.330
Wie fragen Sie, ob eine ganze Zahl gerade ist?

34:19.070 --> 34:22.530
Dazu müssen Sie aus logischen Bedingungen eine Konstruktion

34:22.530 --> 34:25.930
zusammensetzen, ohne die Funktionen aus der Mathebibliothek von Java

34:25.930 --> 34:26.590
zu benutzen.

34:27.030 --> 34:29.350
Überlegen Sie mal ein paar Minuten, wie Sie das machen können.

34:30.110 --> 34:32.550
Ich gebe Ihnen da etwas Zeit, es gibt mehrere Möglichkeiten.

34:32.790 --> 34:34.490
Benutzen Sie nicht die Mathefunktion.

34:37.980 --> 34:38.440
Ja, genau.

34:39.800 --> 34:44.140
Sie teilen die einfach durch 2 und gucken, ob sie den Rest 0 ergibt.

34:44.140 --> 34:47.300
Den Rest bekommen Sie in Java mit dem Prozentzeichen, also Sie fragen

34:47.300 --> 34:49.600
a %2 == 0.

34:49.680 --> 34:52.960
Wenn das bei Division durch 2 den Rest 0 ergibt, ist das gerade

34:52.960 --> 34:53.280
gewesen.

34:53.440 --> 34:56.880
Eigentlich müsste ich das hier noch klammern, um Missverständnisse zu

34:56.880 --> 34:57.320
vermeiden.

34:58.000 --> 34:59.100
Das ist eine richtige Lösung.

35:00.220 --> 35:02.920
Wie fragen Sie denn, ob eine ganze Zahl ungerade ist?

35:04.240 --> 35:07.260
Naja, das ist einfach die Negation der vorhergehenden Aussage.

35:07.800 --> 35:11.320
Das heißt, Sie machen einfach ein Nicht-Symbol vor die Aussage von

35:11.320 --> 35:11.640
vorhin.

35:11.820 --> 35:13.440
Dann ist sie ungerade, wenn das wahr wird.

35:14.560 --> 35:19.120
Alternativ können Sie auch einfach fragen, ob der Rest a%2 == 0 ist.

35:19.180 --> 35:20.000
Hat die gleiche Wirkung.

35:20.440 --> 35:23.020
Oder, wenn Sie schon wissen, dass der Rest hier nun 0 oder 1 sein

35:23.020 --> 35:26.360
kann, können Sie auch fragen, ob der Rest gleich gleich 1 ist.

35:27.080 --> 35:29.380
In diesem Fall ist a ungerade.

35:31.020 --> 35:34.020
Wie fragen Sie denn, ob x im Intervall von 5 bis 10 liegt?

35:35.020 --> 35:36.220
Ein Tipp dazu von mir.

35:36.420 --> 35:40.960
Sie dürfen in Java nicht Konstruktionen der Form 5!x!10 benutzen.

35:41.060 --> 35:42.560
Das ist nicht erlaubt.

35:42.560 --> 35:47.420
Java kann immer nur zwei Operanten für eine Operation verarbeiten.

35:49.720 --> 35:51.680
Ja, genau so wird es gemacht.

35:51.800 --> 35:55.680
Sie fragen, ob x!5 ist und x!10.

35:56.020 --> 35:59.080
Diese logischen Bedingungen sollten Sie immer einklammern.

36:00.480 --> 36:01.860
Dass es keine Missverständnisse gibt.

36:01.940 --> 36:04.480
Sie verknüpfen nicht das 5 mit dem x, sondern Sie haben zwei

36:04.480 --> 36:07.120
Vergleiche, die werden mit der Konjunktion verbunden.

36:07.740 --> 36:11.000
Wenn das beides true ergibt, dann liegt a in diesem Intervall.

36:11.000 --> 36:14.840
Solche Mehrfachausdrücke, wie Sie sie im Mathe-Vorkurs gerade haben, 5

36:14.840 --> 36:20.240
!x!10, kennt Java nicht, werden teilweise auch fehlinterpretiert und

36:20.240 --> 36:23.640
Eclipse wird Ihnen da eine rote Fehlermarkierung drunter setzen, wenn

36:23.640 --> 36:24.260
Sie es versuchen.

36:26.520 --> 36:27.780
Versuchen Sie mal dieses hier.

36:27.900 --> 36:31.720
Geben Sie einen Text aus, falls a größer als b ist, aber nicht kleiner

36:31.720 --> 36:32.300
als c.

36:32.400 --> 36:34.380
Auch da müssen Sie jetzt wieder ein bisschen die deutsche Sprache

36:34.380 --> 36:34.880
übersetzen.

36:43.120 --> 36:44.680
Jawohl, das hat er richtig gesagt.

36:44.680 --> 36:50.860
Also a größer b in Klammern und Nichtzeichen davor a kleiner c, weil

36:50.860 --> 36:55.100
das Nichtzeichen die höchste Priorität hat, wird a durch c

36:55.100 --> 36:59.520
ausgerechnet, wegen den Klammern, dann wird das negiert und erst dann

36:59.520 --> 37:02.040
wirkt die Konjunktion mit dem anderen Ausdruck hier.

37:02.500 --> 37:07.580
Auch hier a größer b wird einfach zu dieser Klammer, das aber wird zu

37:07.580 --> 37:13.640
einer Konjunktion, das nicht wird zu dem Ausrufezeichen, Woran sehen

37:13.640 --> 37:17.240
Sie das grammatikalisch, dass das c zu dem a gehört und nicht zu dem

37:17.240 --> 37:17.500
b?

37:18.020 --> 37:18.800
Woran sieht man das?

37:20.760 --> 37:23.540
Genau, weil das a in diesem Satz das Substantiv ist.

37:23.760 --> 37:26.480
Und dann kommt ein Relativsatz, der sich auf dieses Substantiv

37:26.480 --> 37:26.860
bezieht.

37:27.340 --> 37:29.420
Auch das haben Sie irgendwann mal in der 8.

37:29.500 --> 37:30.000
Klasse gehabt.

37:30.460 --> 37:31.800
Da müssen Sie sich einfach dran erinnern.

37:33.240 --> 37:35.940
Gut, wie prüfen Sie denn, das ist jetzt wieder ein mathematisches

37:35.940 --> 37:40.120
Problem, Wie prüfen Sie, ob das zweithöchste Bit, 2 hoch 6 gleich 64,

37:40.400 --> 37:41.980
im Byte b gesetzt ist?

37:42.440 --> 37:45.720
Da müssen Sie diese bitweisen Operationen benutzen, die wir vorhin

37:45.720 --> 37:46.520
angeschaut haben.

37:50.580 --> 37:53.740
Genau, Sie schalten einfach alle anderen Bits ab.

37:54.520 --> 37:58.640
Sie nehmen das Byte b, Sie nehmen den bitweisen Operator und

37:58.640 --> 38:00.600
verknüpfen das mit 2 hoch 6.

38:01.260 --> 38:04.560
Dadurch werden alle Bits bis auf das sechste auf 0 gesetzt.

38:04.560 --> 38:08.120
Jetzt gibt es nur noch die Möglichkeit, dass das sechste Bit gleich 1

38:08.120 --> 38:08.320
ist.

38:08.400 --> 38:09.500
Dann kommt 64 raus.

38:10.180 --> 38:11.900
Oder dass das sechste Bit gleich 0 ist.

38:12.520 --> 38:13.420
Dann kommt 0 heraus.

38:13.760 --> 38:14.940
Damit können Sie das testen.

38:15.420 --> 38:20.700
Wieso wäre es falsch, hier den binären Vergleich wegzulassen und

38:20.700 --> 38:22.720
einfach nur größer gleich 64 zu schreiben?

38:24.500 --> 38:28.160
Genau, dann würde es zum Beispiel für die 128, mal ganz abgesehen,

38:28.240 --> 38:32.020
dass Sie da bei Java die Gefahr eines Überlaufs haben, für die 128

38:32.020 --> 38:36.060
hätten Sie dann, dass das größer gleich 64 ist, obwohl das sechste Bit

38:36.060 --> 38:37.040
gar nicht gesetzt ist.

38:37.620 --> 38:40.440
Deshalb müssen Sie die anderen erst abschalten, erst dann können Sie

38:40.440 --> 38:41.220
den Vergleich machen.

38:41.540 --> 38:44.100
Das ist eine sehr wichtige Operation, die kriegen Sie in Java sehr

38:44.100 --> 38:44.320
oft.

38:44.800 --> 38:48.360
Wenn Sie elektronische Bauteile ansteuern oder irgendwelche Ports an

38:48.360 --> 38:51.440
Ihrem Rechner abfragen, werden Sie das sehr oft haben, dass diese

38:51.440 --> 38:54.640
Informationen in Form von gesetzten oder gelöschten Bits über

38:54.640 --> 38:56.040
Leitungen in Ihre Rechner kommen.

38:56.040 --> 39:00.560
Dann müssen Sie die Zahlenwerte, die in Ihren Variablen stehen, so

39:00.560 --> 39:03.320
auswerten, um zu prüfen, ob an der Leitung jetzt Spannung dran ist

39:03.320 --> 39:03.800
oder nicht.

39:05.700 --> 39:10.260
Wie ich vorhin schon gesagt habe, dürfen Sie nur elementare Datentypen

39:10.260 --> 39:13.160
mit dem Gleichheitszeichen und dem Ungleichheitszeichen auswerten.

39:14.380 --> 39:17.740
Für nicht-elementare Datentypen müssen Sie Methoden verwenden.

39:17.940 --> 39:20.320
Was Methoden sind, werden wir uns nächste Woche anschauen.

39:20.320 --> 39:22.160
Ich mache Ihnen mal ein Beispiel.

39:22.260 --> 39:25.740
Wenn Sie zwei Strings haben, in dem einen steht XYZ, in dem anderen

39:25.740 --> 39:29.960
steht 123, und Sie wollen die vergleichen, benutzen Sie die sogenannte

39:29.960 --> 39:30.840
Equals -Methode.

39:30.940 --> 39:34.900
Sie schreiben den einen String hin, S, dann den Referenzpunkt, dann

39:34.900 --> 39:38.380
rufen Sie Equals auf und geben T als Parameter hinzu.

39:39.060 --> 39:42.840
Das gibt entweder True zurück, wenn die gleichen Werte, die gleichen

39:42.840 --> 39:46.360
Texte in den Strings stehen, oder False, wenn nicht die gleichen Werte

39:46.360 --> 39:47.260
in den Strings stehen.

39:48.140 --> 39:51.120
Sie dürfen nicht S gleich gleich T schreiben.

39:51.420 --> 39:54.200
Sie dürfen das schon, aber da kommt nicht das heraus, was Sie wollen.

39:55.320 --> 39:59.220
Strings sind dann gleich, also geben hier mit der Equals-Methode True

39:59.220 --> 40:02.600
zurück, wenn die gleichen Zeichen drinstehen und die Reihenfolge und

40:02.600 --> 40:03.260
die Länge übereinstimmt.

40:04.440 --> 40:07.120
Dabei wird Groß- und Kleinschreibung unterschieden, also das kleine a

40:07.120 --> 40:10.500
ist was anderes als das große, und Sie können die Strings erstmal

40:10.500 --> 40:13.200
nicht mit diesen Symbolen kleiner und größer anordnen.

40:13.200 --> 40:16.980
Später werden wir auch dafür Methoden haben, im Moment können Sie es

40:16.980 --> 40:17.880
einfach noch nicht tun.

40:19.200 --> 40:23.960
Wenn Sie das vergessen und das Doppelgleich-Symbol für den String

40:23.960 --> 40:27.340
benutzen, dann bekommen Sie zufällige Aussagen.

40:27.440 --> 40:30.940
Das liegt daran, dass Textvariablen im Speicher den meisten Platz

40:30.940 --> 40:33.860
wegnehmen und deshalb von Java intern optimiert werden.

40:34.480 --> 40:38.220
Das heißt, wenn Sie einen langen Text in Ihrem Speicher als String

40:38.220 --> 40:41.820
haben, wissen Sie nicht, wo der im Speicher liegt, und Java wird den

40:41.820 --> 40:44.740
auch permanent hin- und herschieben, sodass der Zugriff auf diesen

40:44.740 --> 40:45.860
Text optimal ist.

40:46.880 --> 40:50.420
Das führt zu einigen Problemen, das heißt, verschiedene Strings können

40:50.420 --> 40:53.400
im gleichen Speicherbereich stehen, wenn der eine zum Beispiel ein

40:53.400 --> 40:54.940
Anfangsstück von dem nächsten ist.

40:55.920 --> 40:58.380
Andererseits, wenn die Optimierung noch nicht stattgefunden hat, kann

40:58.380 --> 41:01.580
es auch sein, dass gleiche Strings mit gleichen Inhalten an

41:01.580 --> 41:03.120
verschiedenen Speicherbereichen stehen.

41:03.900 --> 41:09.380
Dieser Vergleich, s==t, für frühe Java-Versionen, vergleicht nicht die

41:09.380 --> 41:13.260
Inhalte von den Strings, sondern vergleicht, ob die die gleiche

41:13.260 --> 41:14.480
Referenz im Speicher haben.

41:14.900 --> 41:17.360
Was eine Referenz ist, werden wir uns nächste Woche genau angucken.

41:17.960 --> 41:21.360
Je nachdem, wie diese Zeichenketten jetzt im Speicher liegen, kann da

41:21.360 --> 41:25.120
True oder False rauskommen, eigentlich unabhängig davon, ob der

41:25.120 --> 41:26.680
gleiche Wert da drin steht oder nicht.

41:27.440 --> 41:30.640
Das Dumme ist, dass Ihnen Eclipse das nicht als Fehler anzeigen wird,

41:30.640 --> 41:34.120
denn manchmal möchten Sie tatsächlich die Referenzen vergleichen.

41:35.080 --> 41:37.880
Deshalb jetzt, für die erste Woche im Vorkurs grundsätzlich,

41:38.500 --> 41:41.440
Vergleiche von Strings niemals mit dem Doppelgleichheitszeichen

41:41.440 --> 41:44.780
programmieren, sondern immer die Equals-Methode benutzen.

41:44.860 --> 41:48.180
In höheren Java-Versionen ist dieses Problem behoben worden, aber

41:48.180 --> 41:51.160
programmieren Sie es trotzdem so, dass Sie die Equals-Methode

41:51.160 --> 41:51.640
benutzen.

41:53.240 --> 41:56.020
Ich stelle Ihnen, bevor wir jetzt zu den Aufgaben kommen, nochmal kurz

41:56.020 --> 41:59.340
die häufigsten Fehler vor, die passieren, wenn Sie boolische Variablen

41:59.340 --> 42:00.700
und If-Anweisungen einsetzen.

42:01.500 --> 42:05.580
Der wichtigste Fehler, der Ihnen unterlaufen kann, ist die vergessene

42:05.580 --> 42:06.140
Mengen -Klammer.

42:06.260 --> 42:09.380
Wenn Sie einfach if irgendetwas schreiben und dann die geschweifte

42:09.380 --> 42:13.100
Klammer aufvergessen, dann kontrolliert die If-Anweisung nur die erste

42:13.100 --> 42:15.960
Anweisung, die danach kommt, also dieses double x1 gleich.

42:16.840 --> 42:19.820
Die Anweisung danach wird nicht mehr durch das if kontrolliert und

42:19.820 --> 42:23.140
immer ausgeführt, auch dann, wenn das d kleiner 0 ist, und dann

42:23.140 --> 42:24.460
kriegen Sie hier eine Fehlermeldung.

42:25.160 --> 42:27.520
Also nicht die geschweiften Klammern um den Block vergessen.

42:27.900 --> 42:30.280
Es interessiert Java auch überhaupt nicht, dass das hier eingerückt

42:30.280 --> 42:30.540
ist.

42:30.980 --> 42:33.600
Diese Einrückung ist hier optisch und nur für Sie und für den Style

42:33.600 --> 42:33.880
-Guide.

42:34.540 --> 42:37.320
Java entscheidet, ob das ein Block ist, einfach nur daran, ob da

42:37.320 --> 42:38.580
Klammern drumherum sind oder nicht.

42:39.520 --> 42:41.960
Der zweite Fehler, der sehr oft gemacht wird, ist, dass Sie ein

42:41.960 --> 42:43.320
Semikolon hinter if setzen.

42:44.100 --> 42:46.960
Wir haben ja gelernt, Semikolon muss hinter jedem Befehl stehen, aber

42:46.960 --> 42:48.320
if ist kein Befehl.

42:48.600 --> 42:51.960
if ist eine Kontrollanweisung, die den nachfolgenden Befehl

42:51.960 --> 42:52.580
kontrolliert.

42:53.020 --> 42:55.980
Wenn Sie ein Semikolon dahinter setzen, dann kontrolliert die if

42:55.980 --> 42:56.740
-Anweisung das Semikolon.

42:57.840 --> 43:00.020
Das Semikolon selbst an sich tut aber gar nichts.

43:00.140 --> 43:01.620
Das ist sozusagen nur ein Platzhalter.

43:02.280 --> 43:06.100
Wenn Sie if d größer 0 Semikolon schreiben, dann wird dieses Semikolon

43:06.100 --> 43:09.700
ausgeführt, wenn d größer 0 ist, und es wird nicht ausgeführt, wenn d

43:09.700 --> 43:10.360
kleiner 0 ist.

43:10.420 --> 43:13.540
Und der Block, der danach kommt, der wird immer ausgeführt, weil er

43:13.540 --> 43:15.120
nicht mehr durch das if kontrolliert ist.

43:15.820 --> 43:19.000
Auch ein beliebter Fehler, den Sie auch nicht angezeigt bekommen, weil

43:19.000 --> 43:20.580
es könnte ja sein, dass Sie es so gewollt haben.

43:22.100 --> 43:24.860
Der dritte Fehler, der oft gemacht wird, ist diese Leerzeichen

43:24.860 --> 43:25.480
-Kosmetik.

43:26.000 --> 43:29.780
Also Java interessiert es nicht, dass jetzt dieses a oder b nahe

43:29.780 --> 43:32.640
zusammensteht und dann ein Leerzeichen kommt und dann erst das und.

43:32.780 --> 43:36.300
Das sieht zwar optisch so aus, als ob erst diese oder-Operation und

43:36.300 --> 43:39.080
dann die Konjunktion ausgeführt wird, das ist aber nicht so.

43:39.160 --> 43:40.780
Die Leerzeichen interessieren Java nicht.

43:41.440 --> 43:44.980
Java benutzt die Punkt-vor-Strich-Regel oder die Klammern, wenn Sie

43:44.980 --> 43:45.660
welche setzen.

43:45.660 --> 43:49.500
Das ist ein Grund, warum wir Sie im Style-Guide zwingen, zwischen alle

43:49.500 --> 43:53.280
Operatoren genau ein Leerzeichen zu setzen, damit Sie nicht optisch

43:53.280 --> 43:57.240
verführt werden, durch so einen Ausdruck hier zu glauben, dass hier a

43:57.240 --> 43:58.540
oder b ausgerechnet wird.

43:58.620 --> 43:59.700
Es ist nämlich nicht so.

43:59.800 --> 44:03.680
In Wirklichkeit wird Java zuerst diese Konjunktion ausführen, das

44:03.680 --> 44:05.400
heißt diesen roten Ausdruck berechnen.

44:05.500 --> 44:08.720
Und den wollten Sie an der Stelle vermutlich nicht, wenn Sie es so

44:08.720 --> 44:09.540
optisch anordnen.

44:10.140 --> 44:13.900
Deshalb, Style-Guide, immer genau ein Leerzeichen, dann kommen Sie

44:13.900 --> 44:17.000
nicht in Versuchung, das irgendwie so zu gruppieren, obwohl Java das

44:17.000 --> 44:17.600
nicht versteht.

44:18.420 --> 44:21.080
Gut, dann teilen wir jetzt das Übungsblatt aus und ich lasse Ihnen

44:21.080 --> 44:24.540
diese bedingte Ausführung hier einfach als Vorlage auf dem Bildschirm.

44:25.000 --> 44:28.360
Wenn Sie einen einzeiligen Befehl haben, können Sie die Mengen

44:28.360 --> 44:30.860
-Klammern auch weglassen und das einfach alles in einer Zeile machen.

44:30.960 --> 44:34.060
Das ist zwar nicht so schön, aber für ganz kurze Sachen dürfen Sie das

44:34.060 --> 44:34.540
heute tun.

44:34.620 --> 44:36.000
Der Style-Guide verbietet das eigentlich.

