Zentralübung Grundlagen der Programmierung Bastian Cramer Bastian Cramer - ZÜ 01 GP 08/09 Agenda Java Übersetzungsprozess Aufgabe 1: Programm verstehen Programmkonstrukte benennen Programmfehler produzieren Aufgabe 2: Programmfehler erkennen Aufgabe 3: Programm schreiben Bastian Cramer - ZÜ 01 GP 08/09 2 Java Übersetzungsprozess Java Programm (HelloWorld.java) übersetzen, erzeugt Java Bytecode in HelloWorld.class Java Compiler (javac HelloWorld.java) Bytecode ausführen mit der JVM Java Interpreter JVM (java HelloWorld) Bastian Cramer - ZÜ 01 GP 08/09 3 Java Bytecode class HelloWorld extends java.lang.Object{ HelloWorld(); Code: 0: aload_0 1: invokespecial#1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: getstatic#2; //Field java/lang/System.out:Ljava/io/ PrintStream; 3: ldc#3; //String Hello World 5: invokevirtual#4; //Method java/io/PrintStream.println:(Ljava/ lang/String;)V 8: return } javap -c HelloWorld Bastian Cramer - ZÜ 01 GP 08/09 4 Aufgabe 1: Programm verstehen class Subtraktion { // Name der Klasse public static void main (String [] args) { // hier startet das Programm int zahl1 = 18; int zahl2 = 10; // zahl1 ist vom Typ int und zuerst 18 // zahl2 ist vom Typ int und zuerst 10 } } System.out.println(zahl1 - zahl2); // Ausgabe Allgemein: •auf Groß-/Kleinschreibung achten •sinnvolle Bezeichner verwenden •Einrückung beachen Bastian Cramer - ZÜ 01 GP 08/09 5 Aufgabe 1: Programmkonstrukte benennen class Subtraktion { public static void main (String [] args) { int zahl1 = 18; int zahl2 = 10; } } System.out.println(zahl1 - zahl2); // Name der Klasse // hier startet das Programm // zahl1 ist vom Typ int und zuerst 18 // zahl2 ist vom Typ int und zuerst 10 // Ausgabe Zuweisung Bastian Cramer - ZÜ 01 GP 08/09 6 Aufgabe 1: Programmkonstrukte benennen class Subtraktion { public static void main (String [] args) { int zahl1 = 18; int zahl2 = 10; } } System.out.println(zahl1 - zahl2); Zuweisung // Name der Klasse // hier startet das Programm // zahl1 ist vom Typ int und zuerst 18 // zahl2 ist vom Typ int und zuerst 10 // Ausgabe Bezeichner Bastian Cramer - ZÜ 01 GP 08/09 7 Aufgabe 1: Programmkonstrukte benennen class Subtraktion { public static void main (String [] args) { int zahl1 = 18; int zahl2 = 10; } } System.out.println(zahl1 - zahl2); Zuweisung Bezeichner // Name der Klasse // hier startet das Programm // zahl1 ist vom Typ int und zuerst 18 // zahl2 ist vom Typ int und zuerst 10 // Ausgabe Parameter (formal/aktuell) Bastian Cramer - ZÜ 01 GP 08/09 8 Aufgabe 1: Programmkonstrukte benennen class Subtraktion { public static void main (String [] args) { int zahl1 = 18; int zahl2 = 10; } } System.out.println(zahl1 - zahl2); Zuweisung Bezeichner // Name der Klasse // hier startet das Programm // zahl1 ist vom Typ int und zuerst 18 // zahl2 ist vom Typ int und zuerst 10 // Ausgabe Parameter Methodenaufruf Bastian Cramer - ZÜ 01 GP 08/09 9 Aufgabe 1: Programm umbenennen übersetzt wird ausgeführt übersetzt Laufzeitfehler!! Bastian Cramer - ZÜ 01 GP 08/09 10 Aufgabe 1: Programm umbenennen übersetzt wird ausgeführt übersetzt Laufzeitfehler!! Klassenname und Dateiname müssen identisch sein! Bastian Cramer - ZÜ 01 GP 08/09 11 Aufgabe 1: Programmfehler erkennen Zeilennummer public zu Public ändern führt zu einem Syntaxfehler: Java unterscheidet zwischen Groß - und Kleinschreibung Anweisungsfolgen müssen durch ein Semikolon beendet werden! Bastian Cramer - ZÜ 01 GP 08/09 12 Aufgabe 1: Initialisierung Variablen müssen initialisiert werden! Bastian Cramer - ZÜ 01 GP 08/09 13 Aufgabe 1: Ersetzen von println durch print Bastian Cramer - ZÜ 01 GP 08/09 14 print / println Bastian Cramer - ZÜ 01 GP 08/09 15 Aufgabe 1d/e 1.class Subtraktion { // Name der Klasse 2. public static void main (String [] args) { // hier startet das Programm 3. 4. int zahl1=20; 5. int zahl2 = 30; 6. 7. int differenz = zahl1 - zahl2; 8. System.out.print(zahl1 + "-"+ zahl2 + "=" + differenz); // Ausgabe 9. } 10.} Konkatenation Bastian Cramer - ZÜ 01 GP 08/09 16 Aufgabe 2: Programmfehler erkennen 1.Class Semesterende { 2. Public static void main (String [] args { 3. int tag; 4. int monat; 5. jahr; 6. 7. tag = 8; 8. monat = 2; 9. jar = 2009; 10. System.out.print("Semesterende: ",tag,monat,jahr); 11. } Bastian Cramer - ZÜ 01 GP 08/09 17 Aufgabe 2: Programmfehler erkennen 1.Class Semesterende { 2. Public static void main (String [] args { 3. int tag; 4. int monat; 5. jahr; 6. 7. tag = 8; 8. monat = 2; 9. jar = 2009; 10. System.out.print("Semesterende: ",tag,monat,jahr); 11. } Syntaxfehler: Schlüsselwörter public/class falsch geschrieben Bastian Cramer - ZÜ 01 GP 08/09 18 Aufgabe 2: Programmfehler erkennen 1.class Semesterende { 2. public static void main (String [] args { 3. int tag; 4. int monat; 5. jahr; 6. 7. tag = 8; 8. monat = 2; 9. jar = 2009; 10. System.out.print("Semesterende: ",tag,monat,jahr); 11. } Syntaxfehler: schließende Klammer fehlt Bastian Cramer - ZÜ 01 GP 08/09 19 Aufgabe 2: Programmfehler erkennen 1.class Semesterende { 2. public static void main (String [] args ){ 3. int tag; 4. int monat; 5. jahr; 6. 7. tag = 8; 8. monat = 2; 9. jar = 2009; 10. System.out.print("Semesterende: ",tag,monat,jahr); 11. } unzulässige Deklaration Bastian Cramer - ZÜ 01 GP 08/09 20 Aufgabe 2: Programmfehler erkennen 1.class Semesterende { 2. public static void main (String [] args ){ 3. int tag; 4. int monat; 5. int jahr; 6. 7. tag = 8; 8. monat = 2; 9. jar = 2009; 10. System.out.print("Semesterende: ",tag,monat,jahr); 11. } semantischer Fehler: „jar“ ist unbekannt! Bastian Cramer - ZÜ 01 GP 08/09 21 Aufgabe 2: Programmfehler erkennen 1.class Semesterende { 2. public static void main (String [] args ){ 3. int tag; 4. int monat; 5. int jahr; 6. 7. tag = 8; 8. monat = 2; 9. jahr = 2009; 10. System.out.print("Semesterende: ",tag,monat,jahr); 11. } Zeichenketten müssen durch „+“ verknüpft werden Bastian Cramer - ZÜ 01 GP 08/09 22 Aufgabe 2: Programmfehler erkennen 1.class Semesterende { 2. public static void main (String [] args) { 3. int tag; 4. int monat; 5. int jahr; 6. 7. tag = 8; 8. monat = 2; 9. jahr = 2009; 10. System.out.print("Semesterende: "+tag+"."+monat+"."+jahr); 11. } 12. } Der Klasse Semesterende fehlt die schließende Klammer Bastian Cramer - ZÜ 01 GP 08/09 23 Aufgabe 3: Programm schreiben 1.class Produkt { 2. public static void main (String [] args) { 3. 4. // Deklaration der Variablen zahl1 bis zahl 4 vom Typ int 5. int zahl1, zahl2, zahl3, zahl4; 6. // Intialisierung der Variablen 7. zahl1 = 42; 8. zahl2 = 25; 9. zahl3 = 36; 10. zahl4 = 6; 11. // Deklarierung der Variablen produkt vom Typ int 12. // und Initialisierung mittels Zuweisung des Produktes 13. int produkt = zahl1 * zahl2 * zahl3 * zahl4; 14. System.out.println("Produkt: " + produkt); 15. } 16. } Bastian Cramer - ZÜ 01 GP 08/09 24