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
Beispiel Lohnabrechnung
Wasist andiesem Programm schlecht?
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);
...
Beispiel Lohnabrechnung
...
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) );
} //main
} // Lohn
§ DerAusdruck (Anzahl Stunden)(38 + 40 + 30 + 10) wird
wiederholt
§ Abzüge werden mehrfach berechnet
§ So viele println Anweisungen
7
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 };
Zuweigungen (“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.
Gebrauch vonVariablen
§ Nachdem eine Variableeinen Werterhalten hat,kann die
VariableinAusdrücken verwendet werden:
int x;
x = 3;
System.out.println(x);
// x is 3
Output:
3
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”
StringOperationen
1 + 2
"abc"
"1" +
4 - 1
+ "abc"
+ 9 * 3
1
+ "abc"
ergibt
ergibt
ergibt
ergibt
"3abc"
"abc27"
"11"
"3abc"
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
Waspassiert hier ?
Sehen Sie sich diese Anweisungen an.Welchen Werthatx am
Ende?
int
int
x =
y =
x =
y =
x;
y;
1;
2;
y;
3;
//
//
//
//
(S1)
(S2)
(S3)
(S4)
x hatdenWert???
25
Zuweisungen undTypen
§ Eine Variablekann nur Werte ihres eigenen Typs speichern.
int x = 2.5;
// ERROR: incompatible types
§ Ein int Wertkann ineiner double Variablegespeichert werden
§ Wertinäquivalente reelle Zahl umgewandelt.
§ double myGPA = 4;
§ double avg = 11 / 2;
myGPA
4.0
avg
5.0
§ Warum hatavg denWert5.0 undnicht 5.5 ?
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.
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++) {
// 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”)
Aktualisierung
for (int i = 1; i <= 5; i = i + 1) {
System.out.println("Ich werde die Schulhausregeln beachten");
}
§ DieZählervariable musssich ändern
§ Sonst findet dieSchleife kein Ende
§ test ergibt immer true
§ Ein beliebiger Ausdruck zulässig
§ Compilerprüft nicht dass dieZählervariable verwendet wird
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 = temp + 1;
x = temp;
// x now stores 3
Inkrement undDekrement Puzzles
int x = 1;
int a = 1;
int y = 0; int z = 0;
a = a++;
y = x++;
z = x++ + x++;
§ Wertx?
§ Wertx?
int y = 10;
§ Werty?
x = y-- - y--;
§ Wertz?
§ Werty?
46
Weitere Kurzformen
§
Erlauben Verwendung desWertes einer Variablegefolgt von
einer Modifikation (Zuweisung)
Kurzform
variable +=
variable -=
variable *=
variable /=
variable %=
value;
value;
value;
value;
value;
Aequivalente ausführlichere Version
variable = variable + value;
variable = variable - value;
variable = variable * value;
variable = variable / value;
variable = variable % value;
§ Modifikation mit beliebigen Werten (nicht nur 1)
Weitere Kurzformen
Beispiele
x += 3;
// x = x + 3;
note -= 0.5;
// note = note - 0.5;
number *= 2;
// number = number * 2;
Warnung:
x += 1;
// x = x + 1;
x =+ 1;
// x = + 1;
Kurzformen undSchleifen
§ Kurzform häufig inAktualisierungsblock einer Schleife
for (int i = 1; i <= 6; i++) {
System.out.println("Ich werde die Schulhausregeln beachten");
}
§ Nachdem alle Anweisungen im Schleifenrumpf (“body”)
ausgeführt wurden findet dieAktualisierung (derZählervariable)
statt
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);
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.
2.3.2Verschachtelte for Schleifen
for Schleife
for (initialization; test; update) {
statement;
statement;
...
statement;
}
header (Kopf)
body (Rumpf)
statement(Anweisung im Rumpf derSchleife)kann beliebige Java
Anweisung sein
Auch wieder eine Schleife ….
Verschachtelte Schleifen
§ Verschachtelte Schleifen ("nestedloop"):Schleife ineiner
Schleife
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 10; j++) {
System.out.print("*");
}
System.out.println();
// to end the line
}
Verschachtelte Schleifen
Wasgibt diesesProgrammsegment aus?
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
Verschachtelte Schleifen
Wasgibt diesesProgrammsegment aus?
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i);
}
System.out.println();
}
Mögliche Fehler
§ DieSchleife terminiert nicht
§ Läuft undläuft undläuft
§ Endlosschleife ("infiniteloop")
Mögliche Fehler
§ DieSchleife terminiert nicht
§ Läuft undläuft undläuft
§ Endlosschleife ("infiniteloop")
§ Beispiele:
for (int i = 1; i <= 5; i++) {
for (int j = 1; i <= 10; j++) {
System.out.print("*");
}
System.out.println();
}
Mögliche Fehler
§ DieSchleife terminiert nicht
§ Läuft undläuft undläuft
§ Endlosschleife ("infiniteloop")
§ Beispiele:
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 10; i++) {
System.out.print("*");
}
System.out.println();
}
Wastun?
§ Eclipsekann solche
Programme stoppen.
§ Klicken auf"Terminate"
73
Mehr Beispiele
§ Welche verschachtelten for Schleifen erzeugen diesen Output?
....1
...2
..3
.4
5
Mehr Beispiele
§ Welche verschachtelten for Schleifen erzeugen diesen Output?
innere Schleife (für jede Zeile)
....1
...2
..3
.4
5
äussere Schleife (5-mal da es 5 Zeilen gibt)
§ Wir müssen eine Ausgabezeile konstruieren:
§ mit einer äusseren Schleife für jede Zeile
§ mit innerer(n)Schleife(n)für dasMusterjeder Zeile
Äussere undinnere Schleife
§ Legen Sie erst dieäussere Schleife fest,zählt von1bis zur Anzahl derZeilen
for (int line = 1; line <= 5; line++) {
...
}
§ Analysieren Sie jede Zeile.Entdecken Sie dasMuster:
§ ein paar Punkte (0Punkte inderletzten Zeile)gefolgt vonZahl
....1
...2
..3
.4
5
Äussere undinnere Schleife
§ Legen Sie erst dieäussere Schleife fest,zählt von1bis zur Anzahl derZeilen
for (int line = 1; line <= 5; line++) {
...
}
§ Analysieren Sie jede Zeile.Entdecken Sie dasMuster:
§ ein paar Punkte (0Punkte inderletzten Zeile)gefolgt vonZahl
....1
...2
..3
.4
5
Beobachtung:DieAnzahl der
Punkte hängt vonder
Zeilennummer ab.
Zahlenfolgen à Schleifen
for (int count = 1; count <= 5; count++) {
System.out.print( ... );
}
Welche Anweisung im Rumpf würde diesen Outputergeben:
4 7 10 13 16
for (int count = 1; count <= 5; count++) {
System.out.print(3 * count + 1 + " ");
}
Zahlenfolgen à Schleifen mit Tabellen
§ Welche Anweisung im Rumpf würde diesen Outputergeben:
2 7 12 17 22
§ Zum Finden desMusterserstellen Sie eine Tabelle mit count unddenZahlen.
§ Wenn sich count um1erhöht,sollte dieZahl um5heraufgehen.
§ Abercount * 5 ist zu gross(um3),alsosubtrahieren wir 3.
count
Zahl in Folge
5 * count
5 * count - 3
1
2
5
2
2
7
10
7
3
12
15
12
4
17
20
17
5
22
25
22
Weiteres Tabellen Beispiel
§ Welche Anweisung im Rumpf würde diesen Outputergeben:
17 13 9 5 1
§ Konstruieren wir dieTabelle.
§ Wenn sich count um1erhöht,sollte dieZahl ...
§ AberdiesesProdukt ist zu ...
count
Zahl in Folge
-4 * count
-4 * count + 21
1
17
-4
17
2
13
-8
13
3
9
-12
9
4
5
-16
5
5
1
-20
1
Zurück zum Beispiel mit for Schleife
§ Konstruieren wir eine Tabelle
....1
...2
..3
.4
5
line
# Punkte
-1 * line
-1 * line + 5
1
4
-1
4
2
3
-2
3
3
2
-3
2
4
1
-4
1
5
0
-5
0
§ Umeinen Buchstaben mehrfach zu drucken verwenden wir eine for Schleife.
for (int j = 1; j <= 4; j++) {
System.out.print(".");
}
// 4 Punkte
Lösung mit for Schleife
§ Antwort:
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
System.out.print(".");
}
§ Output:
System.out.println(line);
....1
}
...2
..3
.4
5
Verschachtelte for Schleifen
§ Wasist derOutputdieser verschachtelten Schleifen?
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
System.out.print(".");
}
for (int k = 1; k <= line; k++) {
System.out.print(line);
}
System.out.println();
}
Verschachtelte for Schleifen
§ Wasist derOutputdieser verschachtelten Schleifen?
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
System.out.print(".");
}
for (int k = 1; k <= line; k++) {
§ Answer:
System.out.print(line);
....1
}
...22
System.out.println();
..333
}
.4444
55555
Verschachtelte for Schleifen Uebung
§ Verändern Sie dasletzte Programm sodass dieser Output
erzeugt wird:
....1
...2.
..3..
.4...
5....
Verschachtelte for Schleifen Uebung
Verändern Sie dasletzte Programm sodass dieser Outputerzeugt wird:
....1
...2.
..3..
.4...
5....
(Eine)Antwort:
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
System.out.print(".");
}
System.out.print(line);
for (int j = 1; j <= (line - 1); j++) {
System.out.print(".");
}
System.out.println();
}
2.XInput
182
Interaktive Programme mit Scanner
InputundSystem.in
§ Interaktives Programm:Liest InputvonderKonsole (“console”).
§ Während dasProgramm ausgeführt wird fragt dasProgramm den
Benutzer
§ Benutzer tippt InputindasKonsolen Fenster
§ Der vom Benutzer eingegebene Inputwird durch Anweisungen im
Programm inVariablen gespeichert
§ Später auch andere Arten desInputs(vonanderen Fenstern)
InputundSystem.in
§ Inputkomplizierter als Output
§
§
§
§
Benutzer können sich aufunvorgesehene Weiseverhalten
Benutzer können Fehler machen
Benutzer können unpassenden Inputliefern
Aber interaktive Programme sind viel interessanter …..
§ Scanner:erlaubt es Inputvonunterschiedlichen Quellen zu lesen
§ Funktioniert mit System.in (dem Gegenteil vonSystem.out)
§ Kann auch vonDateien,WebSeiten,Datenbanken,…lesen
Scanner Syntax
§ Scanner sind inder Bibliothek java.util definiert
§ Musserst bekannt gegeben werden
§ import java.util.*; //sodass wir Scannerbenutzen können
§ Programm braucht ein Scanner Objekt umvonder Konsole zu lesen:
§ Diesesmusskonstruiert werden
§ Scanner name=new Scanner(System.in);
§ Beispiel:
Scanner console = new Scanner(System.in);
Scanner Methoden
Method
nextInt()
Description
reads an int from the user and returns it
nextDouble()
reads a double from the user
next()
reads a one-word String from the user
nextLine()
reads a one-line String from the user
§ Jede Methode wartet bis derBenutzer dieEingabe mit der"ENTER"
(oder "RETURN")Tasteabschliesst.
§ Dereingegebene Wertkann weiter verarbeitet werden.
System.out.print("Wie alt sind Sie? "); // prompt
int alter = console.nextInt();
System.out.println("Ihre Eingabe " + alter);
§ "prompt"(Aufforderung):Textderangibt welche Eingabe erwartet wird.
Scanner Beispiel
import java.util.*;
// so dass Scanner verwendent werden kann
public class UserInputExample {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.print("Wie alt sind Sie? ");
int alter = console.nextInt();
}
}
int jahre = 65 - alter;
System.out.println(jahre
29
jahre
36
+ " Jahre bis zur Pensionierung!");
Konsole (Eingabe desBenutzers unterstrichen):
29
Wie alt sind Sie?
36 Jahre bis zur Pension!
alter
Scanner Beispiel 2
import java.util.*;
public class ScannerMultiply {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.print("Please type two numbers: ");
int num1 = console.nextInt();
int num2 = console.nextInt();
int product = num1 * num2;
System.out.println("The product is " + product);
}
}
Output(Benutzereingabe unterstrichen):
Please type two numbers: 8 6
The product is 48
§ DerScanner kann mehrere Zahlen ineiner Zeile lesen.
Wofinde ich Informationen
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
§ Dortfinden wir mehr Informationen
§ Z.Zt.noch nicht alle Konzepte erklärt
§ Darum "ignorieren"wir dieandere Aspekte (ausser denen,diewir für das
Beispiel brauchen)
191
Eingabe Elemente
§ DerScanner liest (für nextInt())eine Folge vonZiffern und
wandelt diese ineine Zahl (int)um
§
§
§
§
Braucht Beschreibung vonlegalen ints
Z.B.EBNFBeschreibung
Musswissen woeine int Beschreibung aufhört (anfängt)
Beschreibung vonLeerzeichen/Trennzeichen
§ Auch wieder mit EBNFmöglich
§ Folge vonZeichen diederScanner liest:Token
§ InputElement
§ Erwartete Zeichen hängen vonMethode (z.B.nextDouble())ab
Eingabe Elemente
§ Folge vonZeichen diederScannerliest:Token
§ Tokenwerden durch Leerraum ("whitespace")getrennt
§ Leerzeichen ("space","blank")
§ TabulatorZeichen ("tab"),
§ Zeilenvorschub ("newline").
§ Wie viele Tokensind indieser Zeile?
23
John Smith
42.0
$2.50
Eingabe Elemente
§ Folge vonZeichen diederScannerliest:Token
§ Tokenwerden durch Leerraum ("whitespace")getrennt
§ Leerzeichen ("space","blank")
§ TabulatorZeichen ("tab"),
§ Zeilenvorschub ("newline").
§ Wie viele Tokensind indieser Zeile?
23 John Smith
42.0
§ Tokenkann Kontext-abhängig sein
$2.50 "hello World" 1.456E12 "45 18"
Eingabe Elemente
Wenn dasTokennicht denrichtigen Typ hatgibt es (zur Laufzeit)
eine Fehlermeldung.
System.out.print("Was ist Ihr Alter? ");
int alter = console.nextInt();
Output:
Was ist Ihr Alter? Timmy
java.util.InputMismatchException
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
...
Noch ein Beispiel
import java.util.*;
// for Scanner
public class IncNumber {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.print("Type a number: ");
int numberIn = console.nextInt();
System.out.println("Number + 1: " + (1 + numberIn));
}
}
200
Herunterladen