• Keine Ergebnisse gefunden

252-0027 Einführung in die Programmierung 2.2 Typen und Variable

N/A
N/A
Protected

Academic year: 2022

Aktie "252-0027 Einführung in die Programmierung 2.2 Typen und Variable"

Copied!
49
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

252-0027

Einführung in die Programmierung 2.2 Typen und Variable

Thomas R. Gross

Department Informatik ETH Zürich

(2)

Uebersicht

§ 2.2 Typen und Variable

§ Deklaration von Variablen

§ 2.3 Schleifen (Loops)

§ 2.3.1 “for” Loops

§ 2.3.2 Verschachtelte Schleifen

§ 2.4 “if”-Anweisungen

§ 2.5 Nochmals Schleifen

§ “while” Loops

§ 2.6 Input

2

(3)

Variable

(4)

public class Lohn{

public static void main(String[] args) {

// Calculate net wages based on weekly hours worke; deduct AHV 4.2%, IV 0.7%, ALV 1.0%

System.out.println("Hours worked:");

System.out.println(38 + 40 + 30 + 10);

System.out.println("AHV:");

System.out.println(30*(38 + 40 + 30 + 10) * .042);

System.out.println("IV:");

System.out.println(30*(38 + 40 + 30 + 10) * .007);

System.out.println("ALV:");

System.out.println(30*(38 + 40 + 30 + 10) * .01);

System.out.println("Lohn:");

System.out.println(30*(38 + 40 + 30 + 10) – ((30*(38 + 40 + 30 + 10) * .042 +

(30*(38 + 40 + 30 + 10) * .007 + (30*(38 + 40 + 30 + 10) * .01) );

} }

(5)

§ Der Ausdruck (Anzahl Stunden) (38 + 40 + 30 + 10) wird wiederholt

§ Abzüge werden mehrfach berechnet

§ So viele println Anweisungen

8

(6)

Variable

§ Variable (“variable”): Name der es erlaubt, auf einen gespeicherten Wert zuzugreifen

(7)

Variable

§ Variable (“variable”): Name der es erlaubt, auf einen gespeicherten Wert zuzugreifen

§ Wert muss (irgendwo) vom Programm gespeichert werden

§ In Speicherzelle(n) im Computer

§ Aehnlich Schnellwahl (Telefon)

(8)

Variable

§ Variable (“variable”): Name der es erlaubt, auf einen gespeicherten Wert zuzugreifen

§ Wert muss (irgendwo) vom Programm gespeichert werden

§ In Speicherzelle(n) im Computer

§ Aehnlich Schnellwahl (Telefon)

(9)

Variable

§ Wie man diese Wahlknöpfe benutzt:

§ Konfiguration

§ Einsatz

§ Aehnlicher Ablauf für Variablen in einem Programm

§ Deklaration - gibt Namen und Typ an

§ Initialisierung - speichert einen Wert in der Variablen

§ Gebrauch - in einem Ausdruck oder println Anweisung

(10)

Deklaration

Deklaration einer Variablen: Reserviert Speicher für Werte

§ Variable müssen deklariert sein bevor sie verwendet werden können.

§ Syntax:

type name;

name ist ein Bezeichner (“identifier”) type ist der Typ

§ int x;

§ double myGPA; x

myGPA

(11)

Deklaration

Variable müssen deklariert sein bevor sie verwendet werden können.

type name;

EBNF Description variabledeclaration

typeidentifier bezeichner variableidentifier bezeichner

variabledeclaration typeidentifier variableidentifier { , variableidentifier } ;

(12)

Zuweisungen (“Assignment”)

§ Zuweisung: Eine Anweisung die einen Wert in einer Variable speichert.

§ Der Wert kann ein Ausdruck sein, die Zuweisung speichert das Ergebnis

§ Syntax:

name = expression;

§ int x;

x = 3;

§ double myGPA;

myGPA = 1.0 + 2.25; x 3

myGPA 3.25

(13)

Assignment

§ Java verwendet = um eine Zuweisung auszudrücken

§ "Assignment operator"

name = expression;

EBNF Description assignment

variableidentifier bezeichner

assignment variableidentifier = expression ;

Die EBNF Beschreibung für expression kommt später.

(14)

19

(15)

String Operationen

§ String Verkettung (“concatenation”): Der Operator + erlaubt es, zwei Strings zu verketten (verknüpfen)

"hello" + ”world" ergibt "helloworld"

"a" + "b" + "c" ergibt "abc"

§ Der Operator + mit einem String und einem anderen Wert als Operanden ergibt einen längeren String.

"hello" + 42 ergibt "hello42"

1 + "abc" + 2 ergibt "1abc2"

"abc" + 1 + 2 ergibt "abc12”

(16)

22

(17)

String Operationen

§ Können + verwenden um einen String und den Wert eines Ausdrucks auszugeben.

§ System.out.println("Note: " + (4.8 + 5.4) / 2);

Output: Note: 5.1

• Warum brauchen wir ( und )?

(18)

Gebrauch von Variablen

§ Nachdem eine Variable einen Wert erhalten hat, kann die Variable in Ausdrücken verwendet werden:

int x;

x = 3;

System.out.println("x is " + x); // x is 3 System.out.println(5 * x - 1); // 5 * 3 - 1

§ Wiederholte Zuweisungen sind erlaubt:

int x;

x = 3;

System.out.println(x + " here"); // 3 here x = 4 + 7;

System.out.println("now x is " + x); // now x is 11

x 3

x 11

(19)

Deklaration/Initialisierung

§ Deklaration und Initialisierung können in einer Anweisung gemacht werden.

§ Syntax:

type name = value;

§ double myGPA = 3.95;

§ int x = (11 % 3) + 12;

x 14

myGPA 3.95

(20)

Deklaration mit Initialisierung

EBNF Description variabledeclaration

typeidentifier bezeichner variableidentifier bezeichner

variablelist variableidentifier { , variableidentifier } variableinitialization variableidentifier = expression variablespecification variableinitialization | variablelist variabledeclaration typeidentifier variablespecification ;

(21)

Zuweisung (Programm) und Algebra (Mathematik)

§ Zuweisung verwendet = , aber eine Zuweisung ist keine algebraische Gleichung!

= bedeutet: ”speichere den Wert der RHS in der Variable der LHS "

Die rechte Seite des Ausdrucks wird zuerst ausgewertet,

dann wird das Ergebnis in der Variable auf der linken Seite gespeichert

§ Was passiert hier?

int x = 3;

x = x + 2; // ??? xx 35

(22)

30

(23)

31

(24)

32

(25)

34

(26)

Compiler Fehler Meldungen

§ Eine Variable kann erst nach einer Zuweisung verwendet werden.

§ int x;

System.out.println(x); // ERROR: x has no value

§ Keine Doppeltdeklarationen.

§ int x;

int x; // ERROR: x already exists

§ int x = 3;

int x = 5; // ERROR: x already exists

(27)

Drucken des Wertes einer Variablen

Operator + zum Drucken eines String und des Wertes einer Variable in einer Zeile.

double punkte = (95.1 + 71.9 + 82.6) / 3.0;

System.out.println("Im Schnitt " + punkte + "Punkte");

int students = 11 + 17 + 4 + 19 + 14;

System.out.println("There are " + students +

" students in the course.");

(28)

Drucken des Wertes einer Variablen

Operator + zum Drucken eines String und des Wertes einer Variable in einer Zeile.

double punkte = (95.1 + 71.9 + 82.6) / 3.0;

System.out.println("Im Schnitt " + punkte + "Punkte");

int students = 11 + 17 + 4 + 19 + 14;

System.out.println("There are " + students +

" students in the course.");

• Output:

Im Schnitt 83.2 Punkte

There are 65 students in the course.

(29)

Beispiel Lohnabrechnung

Wir erinnern uns … wie können wir dieses Programm verbessern?

public class Lohn{

public static void main(String[] args) {

// Calculate net wages based on weekly hours worked // deduct AHV 4.2%, IV 0.7%, ALV 1.0%, 30 CHF/Stunde

System.out.println("Hours worked:");

System.out.println(38 + 40 + 30 + 10);

System.out.println("AHV:");

System.out.println(30*(38 + 40 + 30 + 10) * .042);

System.out.println("IV:");

System.out.println(30*(38 + 40 + 30 + 10) * .007);

...

(30)

Lohnabrechnung, Version 2

public class Lohn{

public static void main(String[] args) {

// Calculate net wages based on weekly hours worke; deduct AHV 4.2%, IV 0.7%, ALV 1.0%

int stunden = 38 + 40 + 30 + 10;

int lohnBrutto = 30 * stunden;

double ahvAbzug = lohnBrutto * .042;

double ivAbzug = lohnBrutto * .007;

double alvAbzug = lohnBrutto * .01;

double lohnNetto = lohnBrutto – (ahvAbzug + ivAbzug +alvAbzug);

System.out.println("Lohn: " + lohnNetto);

} }

(31)

2.3 Einfache Schleifen: for loop

§ Schleifen erlauben wiederholte Ausführung einer (oder mehrerer) Anweisung(en).

§ Schleifen (“loops”) kommen in verschiedenen Varianten

§ Zuerst: for loop

(32)

for loops erlauben einfache Wiederholungen

§ Bisher waren Wiederholungen eigentlich redundant:

System.out.println(”Ich werde die Schulhausregeln beachten");

System.out.println(”Ich werde die Schulhausregeln beachten");

System.out.println(”Ich werde die Schulhausregeln beachten");

System.out.println(”Ich werde die Schulhausregeln beachten");

System.out.println(”Ich werde die Schulhausregeln beachten");

(33)

for loops erlauben Wiederholungen

§ Bisher waren Wiederholungen eigentlich redundant:

System.out.println(”Ich werde die Schulhausregeln beachten");

System.out.println(”Ich werde die Schulhausregeln beachten");

System.out.println(”Ich werde die Schulhausregeln beachten");

System.out.println(”Ich werde die Schulhausregeln beachten");

System.out.println(”Ich werde die Schulhausregeln beachten");

§ Sie machen das Programm unübersichtlich

§ Javas for loop Anweisung führt Anweisungen wiederholt aus.

for (int i = 1; i <= 5; i = i + 1) { // repeat 5 times

System.out.println(”Ich werde die Schulhausregeln beachten");

}

(34)

for loop Syntax

for (initialization; test; update) { statement;

statement;

...

statement;

}

§ Initialisierung ("Initialization") wird einmal ausgeführt.

§ Wiederhole diese Schritte:

§ Prüfe ob test wahr ("true") ergibt. Wenn nicht, stop.

§ Führe die Anweisung(en) ("statement"s) aus.

§ Führe die Aktualisierung ("update") aus.

body (Rumpf) header (Kopf)

(35)

Initialisierung

for (int i = 1; i <= 5; i = i + 1) {

System.out.println("Ich werde die Schulhausregeln beachten");

}

§ Legt die Variable fest, die im Loop verwendet wird

§ Wird einmal am Anfang der Schleife ausgeführt

§ Diese Variable heisst Schleifenzähler (“loop counter”)

§ Kann jeden Namen haben, nicht nur i

§ Kann mit jedem Wert anfangen, nicht nur 1

(36)

Test

for (int i = 1; i <= 5; i = i + 1) {

System.out.println("Ich werde die Schulhausregeln beachten");

}

§ Vergleicht die Zählervariable (loop counter) mit einem Grenzwert

§Verwendet Vergleichsoperatoren (“comparison operators”):

< kleiner als (“less than”)

<= kleiner als oder gleich (“less than or equal to”)

> grösser als (“greater than”)

>= grösser als oder gleich (“greater than or equal to”)

(37)

48

(38)

Kurzformen für Zuweisungen

§ Zuweisungen der Form j = j+1 tretten häufig auf

§ Machen Programm unübersichtlich

§ Früher: unnötige Extra-Arbeit für Compiler und Computer

§ Kurzformen erlauben Inkrement (Addition von 1) und Dekrement (Subtraktion von 1)

§ “increment” und “decrement”

§ Veränderung immer um 1

(39)

Inkrement und Dekrement

Kurzform Aequivalente ausführlichere Version

variable++; variable = variable + 1;

variable--; variable = variable - 1;

Beispiele

int x = 2;

x++; // x = x + 1;

// x now stores 3 double note = 4.5;

note--; // note = note - 1;

// note now stores 3.5

(40)

Inkrement und Dekrement

Kurzform Aequivalente ausführlichere Version

variable++; variable = variable + 1;

variable--; variable = variable - 1;

variable wird verwendet und dann verändert

Beispiel

int x = 2;

int y;

y = x++;

(41)

Inkrement und Dekrement

Kurzform Aequivalente ausführlichere Version

variable++; variable = variable + 1;

variable--; variable = variable - 1;

variable wird verwendet und dann verändert

Beispiel

int x = 2;

int y;

y = x++;

int temp = x;

y = temp;

temp++;

x = temp;

// x now stores 3

(42)

54

(43)

Wiederholungen für ein Interval [1..6]

System.out.println("1 hoch 2 = " + 1 * 1);

System.out.println("2 hoch 2 = " + 2 * 2);

System.out.println("3 hoch 2 = " + 3 * 3);

System.out.println("4 hoch 2 = " + 4 * 4);

System.out.println("5 hoch 2 = " + 5 * 5);

System.out.println("6 hoch 2 = " + 6 * 6);

§ Intuition: ”Ich will eine Zeile für jede Zahl von 1 bis 6 ausgeben”

§ Ein for loop erledigt genau diesen Job!

for (int i = 1; i <= 6; i++) {

System.out.println(i + " hoch 2 = " + (i * i));

}

§ "Für jede ganze Zahl i von 1 bis 6, drucke..."

(44)

Die Schleife in Zeitlupe

for (int i = 1; i <= 4; i++) {

System.out.println(i + " hoch 2 = " + (i * i));

}

System.out.println("Whoa!");

Output:

1 hoch 2 = 1 2 hoch 2 = 4 3 hoch 2 = 9 4 hoch 2 = 16 Whoa!

1 2 3

4

5 1

2

3 4

5

Initialisierung einmal ausführen

Anweisung(en) im Loop ausführen Ist test wahr?

Aktualisierung ausführen

Anweisung nach Loop ausführen

ja nein

(45)

Mehrere Anweisungen im Rumpf

System.out.println("+----+");

for (int i = 1; i <= 3; i++) {

System.out.println("\\ /");

System.out.println("/ \\");

}

System.out.println("+----+");

(46)

Mehrere Anweisungen im Rumpf

System.out.println("+----+");

for (int i = 1; i <= 3; i++) {

System.out.println("\\ /");

System.out.println("/ \\");

}

System.out.println("+----+");

§ Output:

+----+

\ /

/ \

\ /

/ \

\ /

/ \ +----+

(47)

Schleifenkontrolle

int highTemp = 5;

for (int i = -3; i <= highTemp / 2; i++) {

System.out.println(i + " C = " + (i * 1.8 + 32) + " F");

}

Output:

-3 C = 26.6 F -2 C = 28.4 F -1 C = 30.2 F 0 C = 32.0 F 1 C = 33.8 F 2 C = 35.6 F

(48)

System.out.print

§ Druckt ohne eine Reihe mit “newLine” abzuschliessen

§ Erlaubt es eine Zeile sukzessive auszugeben int highTemp = 5;

for (int i = -3; i <= highTemp / 2; i++) { System.out.print((i * 1.8 + 32) + " ");

}

Output:

26.6 28.4 30.2 32.0 33.8 35.6

§ Verwende " " um die Zahlen zu trennen

(49)

Hochzählen, herunterzählen

§ Die Aktualisierung (“update”) kann auch -- verwenden um den Schleifenzähler herunterzuzählen

Aber der Vergleich in “test” muss dann > anstatt von < verwenden System.out.print("T-minus ");

for (int i = 10; i >= 1; i--) { System.out.print(i + ", ");

}System.out.println("blastoff!");

System.out.println("The end.");

Output: T-minus 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, blastoff!

The end.

Referenzen

ÄHNLICHE DOKUMENTE

Um Eclipse einfacher zu starten, können Sie eine Verknüpfung erstellen.. Gehen Sie mit Ihrem Datei-Explorer in den Ordner, wo Sie Eclipse

§ Programm: Folge von Anweisungen, die von einem Computer ausgeführt werden (können).. § Programm realisiert

§ Wenn zwei Operatoren die selbe Rang Ordnung haben, dann entscheidet die Assoziativität.. § Wenn zwei Operatoren die selbe Rang

Ihr Programm muss diese Bedingung nicht zwingend testen, Sie können aber eine Überprüfung implementieren. Wenn zahl diese Bedingung nicht erfüllt, dann ist das Ergebnis des

containsAll( coll ) returns true if this set contains every element from given set equals( set ) returns true if given other set contains the same elements iterator() returns

§ Eine Aussage gilt für den Zustand eines Programms wenn die Auswertung der Aussage mit dem Zustand das Ergebnis true ergibt. § Die Auswertung jedes Variable ergibt den Wert

Eclipse hilft Ihnen dabei, indem es anzeigt, wo die Fehler sind (und eine mehr oder weniger hilfreiche Fehlermeldung dazu ausgibt), aber Sie müssen selber herausfinden, was das

Beachten Sie ausserdem, dass Eclipse Ihnen beim Ausführen des Programms möglicherweise eine Fehlermeldung anzeigt, da das Programm “FollerVehler.java” noch Fehler enthält, die