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

Werbung
252-0027
Einführung indie Programmierung
2.2Typenund Variable
ThomasR.Gross
DepartmentInformatik
ETHZürich
Uebersicht
§ 2.2Typen undVariable
§ Deklaration vonVariablen
§ 2.3Schleifen (Loops)
§ 2.3.1“for”Loops
§ 2.3.2Verschachtelte Schleifen
§ 2.4“if”-Anweisungen
§ 2.5Nochmals Schleifen
§ “while”Loops
§ 2.6Input
2
Variable
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*(38 + 40 + 30 + 10)
(30*(38 + 40 + 30 + 10)
(30*(38 + 40 + 30 + 10)
}
}
30 + 10) –
* .042 +
* .007 +
* .01) );
§ DerAusdruck (Anzahl Stunden)(38 + 40 + 30 + 10) wird
wiederholt
§ Abzüge werden mehrfach berechnet
§ So viele println Anweisungen
8
Variable
§ Variable(“variable”):Namederes erlaubt,aufeinen
gespeicherten Wertzuzugreifen
Variable
§ Variable(“variable”):Namederes erlaubt,aufeinen
gespeicherten Wertzuzugreifen
§ Wertmuss(irgendwo)vom Programm gespeichert werden
§ InSpeicherzelle(n)im Computer
§ Aehnlich Schnellwahl (Telefon)
Variable
§ Variable(“variable”):Namederes erlaubt,aufeinen
gespeicherten Wertzuzugreifen
§ Wertmuss(irgendwo)vom Programm gespeichert werden
§ InSpeicherzelle(n)im Computer
§ Aehnlich Schnellwahl (Telefon)
Variable
§ Wie mandiese Wahlknöpfe benutzt:
§ Konfiguration
§ Einsatz
§ Aehnlicher Ablauf für Variablen ineinem Programm
§ Deklaration
- gibt Namen undTyp an
§ Initialisierung
- speichert einen WertinderVariablen
§ Gebrauch
- ineinem Ausdruck oder println Anweisung
Deklaration
Deklaration einer Variablen:Reserviert Speicherfür Werte
§ Variablemüssen deklariert seinbevorsie verwendet werden können.
§ Syntax:
type name;
nameist ein Bezeichner (“identifier”)
typeist der Typ
§ int x;
§ double myGPA;
x
myGPA
Deklaration
Variablemüssen deklariert seinbevorsie verwendet werden
können.
type name;
EBNFDescriptionvariabledeclaration
typeidentifier ⟸ bezeichner
variableidentifier ⟸ bezeichner
variabledeclaration ⟸ typeidentifier variableidentifier {,variableidentifier };
Zuweisungen (“Assignment”)
§ Zuweisung:Eine Anweisung dieeinen Wertineiner Variable
speichert.
§ DerWertkann ein Ausdruck sein,dieZuweisung speichert dasErgebnis
§ Syntax:
name = expression;
§ int x;
x = 3;
§ double myGPA;
myGPA = 1.0 + 2.25;
x
myGPA
3
3.25
Assignment
§ Javaverwendet = umeine Zuweisung auszudrücken
§ "Assignmentoperator"
name=expression;
EBNFDescriptionassignment
variableidentifier ⟸ bezeichner
assignment⟸ variableidentifier =expression ;
DieEBNFBeschreibung für expression kommt später.
19
StringOperationen
§ StringVerkettung (“concatenation”):DerOperator+ erlaubt
es,zwei Stringszu verketten (verknüpfen)
"hello" + ”world"
ergibt "helloworld"
"a" + "b" + "c"
ergibt "abc"
§ DerOperator+ mit einem Stringundeinem anderen Wertals
Operanden ergibt einen längeren String.
"hello" + 42
ergibt
"hello42"
1 + "abc" + 2
ergibt
"1abc2"
"abc" + 1 + 2
ergibt
"abc12”
22
StringOperationen
§ Können + verwenden umeinen StringunddenWerteines
Ausdrucks auszugeben.
§ System.out.println("Note: " + (4.8 + 5.4) / 2);
• Output:Note: 5.1
• Warum brauchen wir (und)?
Gebrauch vonVariablen
§ Nachdem eine Variableeinen Werterhalten hat,kann dieVariablein
Ausdrücken verwendet werden:
int x;
x = 3;
System.out.println("x is " + x);
System.out.println(5 * x - 1);
// x is 3
// 5 * 3 - 1
§ Wiederholte Zuweisungen sind erlaubt:
int x;
x
x = 3;
System.out.println(x + " here");
// 3 here
x = 4 + 7;
System.out.println("now x is " + x); // now x is 11
11
3
Deklaration/Initialisierung
§ Deklaration undInitialisierung können ineiner Anweisung
gemacht werden.
§ Syntax:
type name = value;
§ double myGPA = 3.95;
§ int x = (11 % 3) + 12;
myGPA
x
3.95
14
Deklaration mit Initialisierung
EBNFDescriptionvariabledeclaration
typeidentifier ⟸ bezeichner
variableidentifier ⟸ bezeichner
variablelist ⟸ variableidentifier {,variableidentifier }
variableinitialization ⟸ variableidentifier =expression
variablespecification ⟸ variableinitialization |variablelist
variabledeclaration ⟸ typeidentifier variablespecification ;
Zuweisung (Programm)undAlgebra(Mathematik)
§ Zuweisung verwendet = ,aber eine Zuweisung ist keine algebraische
Gleichung!
=
bedeutet:”speichere denWertderRHSinderVariablederLHS"
Dierechte Seite desAusdrucks wird zuerst ausgewertet,
dann wird dasErgebnis inderVariableaufderlinken Seite gespeichert
§ Waspassiert hier?
int x = 3;
x = x + 2;
// ???
x
3
5
30
31
32
34
CompilerFehler Meldungen
§ Eine Variablekann 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
Drucken desWertes einer Variablen
Operator+ zum Drucken eines StringunddesWertes einer Variablein
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.");
Drucken desWertes einer Variablen
Operator+ zum Drucken eines StringunddesWertes einer Variablein
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.
Beispiel Lohnabrechnung
Wir erinnern uns …wiekönnenwirdiesesProgrammverbessern?
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);
...
Lohnabrechnung,Version2
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);
2.3Einfache Schleifen:for loop
§ Schleifen erlauben wiederholte Ausführung einer (oder
mehrerer)Anweisung(en).
§ Schleifen (“loops”)kommen inverschiedenen Varianten
§ Zuerst:for loop
for loopserlauben einfache Wiederholungen
§ Bisher waren Wiederholungen eigentlich redundant:
System.out.println(”Ich
System.out.println(”Ich
System.out.println(”Ich
System.out.println(”Ich
System.out.println(”Ich
werde
werde
werde
werde
werde
die
die
die
die
die
Schulhausregeln
Schulhausregeln
Schulhausregeln
Schulhausregeln
Schulhausregeln
beachten");
beachten");
beachten");
beachten");
beachten");
for loopserlauben Wiederholungen
§ Bisher waren Wiederholungen eigentlich redundant:
System.out.println(”Ich
System.out.println(”Ich
System.out.println(”Ich
System.out.println(”Ich
System.out.println(”Ich
werde
werde
werde
werde
werde
die
die
die
die
die
Schulhausregeln
Schulhausregeln
Schulhausregeln
Schulhausregeln
Schulhausregeln
beachten");
beachten");
beachten");
beachten");
beachten");
§ Sie machen dasProgramm unübersichtlich
§ Javasfor 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");
}
for loopSyntax
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 dieAnweisung(en)("statement"s)aus.
§ Führe dieAktualisierung ("update")aus.
header (Kopf)
body (Rumpf)
Initialisierung
for (int i = 1; i <= 5; i = i + 1) {
System.out.println("Ich werde die Schulhausregeln beachten");
}
§ Legt dieVariablefest,dieim Loopverwendet wird
§ Wird einmal amAnfang derSchleife ausgeführt
§ Diese Variableheisst Schleifenzähler (“loopcounter”)
§ Kann jeden Namen haben,nicht nur i
§ Kann mit jedem Wertanfangen,nicht nur 1
Test
for (int i = 1; i <= 5; i = i + 1) {
System.out.println("Ich werde die Schulhausregeln beachten");
}
§ Vergleicht dieZählervariable (loopcounter)mit einem
Grenzwert
§ Verwendet Vergleichsoperatoren (“comparisonoperators”):
<
<=
>
>=
kleiner als (“lessthan”)
kleiner als oder gleich (“lessthanorequalto”)
grösser als (“greaterthan”)
grösser als oder gleich (“greaterthanorequalto”)
48
Kurzformen für Zuweisungen
§ Zuweisungen derForm j = j+1 tretten häufig auf
§ MachenProgramm unübersichtlich
§ Früher:unnötige Extra-Arbeit für CompilerundComputer
§ Kurzformen erlauben Inkrement (Additionvon1)und
Dekrement (Subtraktion von1)
§ “increment”und“decrement”
§ Veränderung immer um1
Inkrement undDekrement
Kurzform
Aequivalente ausführlichere Version
variable++;
variable--;
variable = variable + 1;
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
Inkrement undDekrement
Kurzform
Aequivalente ausführlichere Version
variable++;
variable--;
variable = variable + 1;
variable = variable - 1;
variablewird verwendet unddann verändert
Beispiel
int x = 2;
int y;
y = x++;
Inkrement undDekrement
Kurzform
Aequivalente ausführlichere Version
variable++;
variable--;
variable = variable + 1;
variable = variable - 1;
variablewird verwendet unddann verändert
Beispiel
int x = 2;
int y;
y = x++;
int temp = x;
y = temp;
temp++;
x = temp;
// x now stores 3
54
Wiederholungen für ein Interval[1..6]
System.out.println("1
System.out.println("2
System.out.println("3
System.out.println("4
System.out.println("5
System.out.println("6
hoch
hoch
hoch
hoch
hoch
hoch
2
2
2
2
2
2
=
=
=
=
=
=
"
"
"
"
"
"
+
+
+
+
+
+
1
2
3
4
5
6
*
*
*
*
*
*
1);
2);
3);
4);
5);
6);
§ Intuition: ”Ich willeine Zeile für jede Zahl von1bis 6ausgeben”
§ 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 von1bis 6, drucke..."
DieSchleife inZeitlupe
1
2
3
for (int i = 1; i <= 4; i++) {
4 System.out.println(i + " hoch 2 = " + (i * i));
}
1 Initialisierung einmal
5System.out.println("Whoa!");
ausführen
nein
Output:
1 hoch
2 hoch
3 hoch
4 hoch
Whoa!
ja
2
Ist testwahr?
2
2
2
2
=
=
=
=
1
4
9
16
5
Anweisung nach
Loopausführen
4
Anweisung(en)im
Loopausführen
3
Aktualisierung
ausführen
Mehrere Anweisungen im Rumpf
System.out.println("+----+");
for (int i = 1; i <= 3; i++) {
System.out.println("\\
/");
System.out.println("/
\\");
}
System.out.println("+----+");
Mehrere Anweisungen im Rumpf
System.out.println("+----+");
for (int i = 1; i <= 3; i++) {
System.out.println("\\
/");
System.out.println("/
\\");
}
System.out.println("+----+");
§ Output:
+----+
\
/
/
\
\
/
/
\
\
/
/
\
+----+
Schleifenkontrolle
int highTemp = 5;
for (int i = -3; i <= highTemp / 2; i++) {
System.out.println(i + " C = " + (i * 1.8 + 32)
+ " F");
}
Output:
-3C=26.6F
-2C=28.4F
-1C=30.2F
0C=32.0F
1C=33.8F
2C=35.6F
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 " " umdieZahlen zu trennen
Hochzählen,herunterzählen
§ DieAktualisierung (“update”)kann auch -- verwenden umden
Schleifenzähler herunterzuzählen
Aber der Vergleich in“test”mussdann > 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.
Herunterladen