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