Sie sind auf Seite 1von 30

Kapitel 1: Grundlagen

Variablen & Datentypen

Wintersemester 2022/23
Stand 10. Oktober 2022, 02:32 Uhr
Vorlesungsfeedback

2 hhu.de
Übungsblatt 1

wenn grün: alles super


• typische Fehlerquellen: Groß-/Kleinschreibung, fehlendes Leerzeichen, Hallo statt Hello
• bei Problemen mit dem Abgabeprozess gerne melden (Forum, Sprechstunde, Tutorium,
Hilfe-bei-Einrichtung-Termine)

3 hhu.de
Wo stehen wir gerade?

4 hhu.de
Algorithmus

Definition
Ein Algorithmus ist eine eindeutige Handlungsanweisung zum Lösen eines Problems, die
aus wohldefinierten, endlich vielen Schritten besteht.

Beispiele:
• Die pq-Formel ist eine Anweisung, um das Problem „Was sind die Nullstellen der Funktion
f (x) = x 2 + px + q?“ zu lösen.
• Ein Kuchen-Rezept ist eine (hoffentlich eindeutige) Anweisung, um das Problem „Ich
habe hunger und möchte Kuchen haben“ zu lösen.

5 hhu.de
Kommandozeilen-Argumente1

• Motivation: Berechnungen nicht im Programmcode fest vorgeben, sondern abhängig von


Benutzereingabe
• Lösung: Zusätzliche Informationen als Argumente beim Programmaufruf angeben

% java HelloWorld Sascha Kim


Hallo Sascha und Kim

HelloWorld.java Java
1 public class HelloWorld {
2 public static void main(String[] args) {
3 System.out.println("Hallo " + args[0] + " und " + args[1]);
4 }
5 }

1 command line arguments


6 hhu.de
Programmabsturz bei zu wenigen Argumenten

% java HelloWorld Sascha


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out
of bounds for length 1
at HelloWorld.main(HelloWorld.java:3)

→ Fehler in Code-Zeile 3 durch Zugriff auf args[1]

7 hhu.de
Variablen2

• Motivation:
• Speichern von Zwischenergebnissen
• weniger potentielle Fehler
• bessere Übersicht

Definition
Eine Variable ist ein Name für ein Stück Arbeitsspeicher, in dem Werte gespeichert werden
können. In Java hat jede Variable einen beim Programmieren festgelegten Datentypen.

2 Variables
8 hhu.de
Datentypen3

Definition
Ein Datentyp hat einen Namen, eine Wertemenge und eine Menge von erlaubten
Operationen. Der Compiler prüft anhand der angegebenen Datentypen, ob die verwendeten
Operationen erlaubt sind.

Beispiel von eben: Integer


• ganze Zahlen
• Addition, Multiplikation, . . .

3 Data Types
9 hhu.de
Identifier4

Definition
Ein Identifier ist der Name, mit dem Variablen (und Methoden, Klassen, Schnittstellen)
angesprochen werden. Identifier dürfen in Java beliebig aus Buchstaben, Ziffern und
Unterstrichen zusammengesetzt werden, aber nicht mit einer Ziffer beginnen. Java
unterscheidet zwischen Groß- und Kleinschreibung.

gültige Identifier ungültige Identifier


• result1 • 1stResult
• ExampleProgram • public (Warum?)
• PI_SQUARED

4 Bezeichner
10 hhu.de
Schlüsselwörter5

Defintion
Schlüsselwörter haben für den Compiler eine besondere Bedeutung und können nicht als
Identifier benutzt werden.

Beispiele für Schlüsselwörter in Java keine Schlüsselwörter


• int • void • 2
• class • true • result1
• static • if • main
• public • args

5 Keywords
11 hhu.de
Namenswahl bei Variablen

• Ziel: gute und schnelle Verständlichkeit von Code


• sprechende Namen, die Zweck der Variablen verdeutlichen
• nicht: i , j , s , tmp
• besser: columnIndex , rowIndex , sum , partialSum

• einheitlich in einer Sprache


• lowerCamelCase für Variablennamen
• UpperCamelCase für Programmnamen (Klassennamen)
• SNAKE_CASE für Konstanten (→ später)

12 hhu.de
Datenrepräsentation

• Informationen als Folge von 0 und 1 (Bits) repräsentiert (→ VL Rechnerarchitektur)


• Datentyp gibt vor, wie Bit-Daten zu interpretieren sind
• 0000 0000 0000 0000 0000 0000 0010 0001 als Integer interpretiert: 65
• 0000 0000 0000 0000 0000 0000 0010 0001 als Float interpretiert: 4,62 × 10−44

13 hhu.de
Deklaration von Variablen

Beispiele Java
1 // Deklaration und Initialisierung einer Variablen vom Typ Integer
2 int a = 1;
3 // Deklaration von zwei Variablen desselben Typs (ohne Initialisierung)
4 int b, c;
5 // Initialisierung der Variablen b
6 b = 99; // Zuweisungsanweisung (assignment statement)
7 // Initialisierung der Variablen c mit einem arithmetischen Ausdruck
8 c = a + b; // rechnet 1 + 99, speichert Ergebnis in c
9 // Wert einer Variablen kann verändert werden
10 c = c + 1; // rechnet 100 + 1, speichert Ergebnis in c

• Deklaration in Praxis eine der folgenden Formen:


• Datentyp Variablennamen;
• Datentyp Variablennamen = Ausdruck;
• Compilerfehler bei:
• Zugriff vor Deklaration
• lesender Zugriff vor erster Wertzuweisung („Initialisierung“)
14 hhu.de
Ausdrücke

Definition
Ein Ausdruck6 ist eine Literal, eine Variable oder eine Verknüpfung von Ausdrücken durch
Operatoren. Ein Ausdruck berechnet also einen Wert7 und hat deshalb einen Datentyp.
Ausdrücke werden ausgewertet8 .

Beispiele in Java:
• 13.37 + 21 Additions-Operation, Wert: 34,37
• 2 * a Multiplikations-Operation, Wert: das Doppelte von a
• 42 Wert: 42

6 Expression; wer es genau wissen möchte:

https://docs.oracle.com/javase/specs/jls/se16/html/jls-15.html
7 value
8 evaluate
15 hhu.de
Anweisungen

Definition
Eine Anweisung9 beschreibt eine Aktion, ändert (oft) den Programmzustand und kann
Ausdrücke enthalten. In Java enden die meisten Anweisungen mit einem Semikolon.

Beispiele in Java:
• b = 2 * a; speichert in b den Wert von 2 · a
• System.out.print(13.37 + 21); gibt 34.37 aus

9 Statement; wer es genau wissen möchte:

https://docs.oracle.com/javase/specs/jls/se16/html/jls-14.html#jls-14.5
16 hhu.de
Wert, Operation, Operator

Zahlen im echten Leben:


• Der Wert 31 ist ein abstraktes Objekt. Er kann z. B. als 31, 3,1 × 101 oder XXXI
geschrieben werden.
• Die Addition ist eine Operation (Funktion) mit Zahlen (R × R → R). Der Operator +
repräsentiert diese Operation.

17 hhu.de
Werte & Operationen vs. Literale & Operatoren10

am Beispiel Kommazahlen in Java:


• Der Wert 3,14 ist ein abstraktes Objekt. Das Literal 3.14 (oder aber auch 314e-2 )
repräsentieren diesen Wert in Java.
• Die Addition ist eine Operation (Funktion) mit Zahlen. Der Operator + repräsentiert die
Operation in Java.
• „Operation“ verhält sich zu „Operator“ wie „Wert“ zu „Literal“.

10 Values, Operations; Literals, Operators


18 hhu.de
Integer11

• Bezeichnung in Java: int


• Wertebereich: −231 bis 231 − 1
• Operationen: + , - , * , / , % (Modulo)
• Beispiele für Ausdrücke:
Ausdruck Wert Bemerkung
5 + 3 8
5 / 3 1 Abschneiden von Nachkommastellen
5 % 3 2 Rest der ganzzahligen Division
1 / 0 führt zu Laufzeitfehler
2 + 3 * (4 + 5) 29 übliche Regeln der Mathematik
0xAFFE 45054 Hexadezimalzahl
017 15 Oktalzahl (führende Null)
0b10101 21 Binärzahl
11 Ganze Zahlen
19 hhu.de
für größere ganze Zahlen: long

• Bezeichnung in Java: long


• Wertebereich: −263 bis 263 − 1
• Literale: 12345678901L
• funktioniert ansonsten analog zu Integern
• für noch größere Zahlen: BigInteger

20 hhu.de
Double12

• Bezeichnung in Java: double


• Wertebereich: Beträge 4,9 × 10−324 bis 1,8 × 10308 , 0, ∞, NaN
• Operationen: + , - , * , / , % (Modulo)
• Beispiele für Ausdrücke:
Ausdruck Wert Bemerkung
3.141 + .03 3,171 führende 0 darf entfallen
6.02e23 / 2. 3,01 × 1023 e-Schreibweise für Potenzen
5.0 / 3.0 1 32 Division (mit Rundungsfehlern!)
5.0 % 2.4 0,2 Modulo
1.0 / 0.0 ∞ gemäß IEEE754-Standard
Math.sqrt(-1.0) NaN Not a Number nach IEEE754

• Warnung: Beschränkte Genauigkeit!


12 Fließkommazahl mit doppelter Genauigkeit (im Vergleich zu Floats)
21 hhu.de
für halbe Genauigkeit: float

• Bezeichnung in Java: float


• Wertebereich: Beträge 1,4 × 10−45 bis 3,4 × 1038 , 0
• Literale: 3.14f
• funktioniert ansonsten analog zu Doubles

22 hhu.de
Umwandlung zwischen Zahlen

• automatische Umwandlung13 , wenn Ziel-Datentyp genauer:


double a = 5 / 2; ⇒ Double mit Wert 2,0
double b = 5.0 / 2; ⇒ Double mit Wert 2,5
• explizite Umwandlung14 nötig, wenn Ziel-Datentyp ungenauer:
int c = (int)(5.0 / 2); ⇒ Integer mit Wert 2
float d = (float)3.14; ⇒ Float mit Wert 3,14
int e = (int)1337L; ⇒ Integer mit Wert 1337
• Bemerkung: 1337L Literal vom Typ long

! grobe Faustregeln, die Wahrheit15 ist komplexer

13 implicit
cast
14 explicit
cast
15 https://docs.oracle.com/javase/specs/jls/se16/html/jls-5.html
23 hhu.de
Umwandlung von Text in Zahlen16

Parsing.java Java
1 public class Parsing {
2 public static void main(String[] args) {
3 // erstes und zweites Kommandozeilenargument als Double interpretieren
4 double a = Double.parseDouble(args[0]); // Bsp.: a bekommt den Wert 1,2
5 double b = Double.parseDouble(args[1]); // Bsp.: b bekommt den Wert 2,4
6 // Zeichenketten können mit + verkettet werden
7 // Zahlen werden dabei automatisch umgewandelt
8 System.out.println(a + "+" + b + "=" + (a + b));
9 }
10 }

% java Parsing 1.2 2.4


1.2+2.4=3.5999999999999996

16 Parsen/Parsing: Interpretation einer Zeichenfolge


24 hhu.de
Anmerkungen zum Parsen

• Analog für Integer: int input = Integer.parseInt("42");


• Laufzeitfehler (Programmabsturz), falls Eingabe nicht als Zahl interpretierbar:

% java Parsing 1,2 2,4


Exception in thread "main" java.lang.NumberFormatException: For input string:
"1,2"
at java.base/jdk.internal.math.FloatingDecimal
.readJavaFormatString(FloatingDecimal.java:2054)
at java.base/jdk.internal.math.FloatingDecimal
.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:549)
at Parsing.main(Parsing.java:4)

• Fehler in Code-Zeile 4 entstanden


→ später: sinnvoller Umgang mit solchen Fehlern

25 hhu.de
Eingebaute Math-Funktionalitäten (Auszug)17

Datentyp des Ergebnisses Name & Parameter Ergebnis


double abs(a) Betrag von a
double max(a, b) Maximum von a und b
double min(a, b) Minimum von a und b
double sin(theta) Sinus von θ (Bogenmaß!)
double cos(theta) Cosinus von θ (Bogenmaß!)
double pow(a, b) Potenz ab
double random() zufällige Zahl aus [0,1)
double sqrt(a) Quadratwurzel von a
double E eulersche Zahl
double PI Kreiszahl π
Beispiele:
• Math.max(10, 20) ⇒ 20
• Math.sin(1.5 * Math.PI) ⇒ −1,0
17 vollständig unter https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html
26 hhu.de
Lernziele

Sie können am Ende der Woche . . .


• Kommandozeilenargumente in Zahlen umwandeln und für Berechnungen verwenden.
• Variablen und Datentypen verwenden, um Zwischenergebnisse zu speichern.
• Werte in andere Datentypen umwandeln.
• in Java eingebaute Math-Funktionen benutzen.

27 hhu.de
Wichtige Begriffe

Argument args[0] Variable


Datentyp Identifier Schlüsselwort
camelCase Deklaration Zuweisung
Initialisierung Ausdruck Anweisung
Wert Operator Literal
Integer Modulo Double
Cast (double) Integer.parseInt
Math.max Math.sqrt

28 hhu.de
Übungsblatt

• Quadrat
• Ballistische Kurve
• Würfelsimulator

29 hhu.de
Linux Install Party der Fachschaft Informatik

Donnerstag, 20.10., ab 14:30 Uhr, HS TBA, fscs.hhu.de

30 hhu.de

Das könnte Ihnen auch gefallen