for Grundlagen der Programmierung Stephan Kleuker 303 for-Schleife • häufig sehr ähnliche Struktur einer Schleife int zaehler = 0; while (zaehler …) { // do something zaehler = zaehler + 1; } • für Schleifen mit festem Start- und Endwert gibt es Variante for( for(int zaehler = 0; 0; zaehler…; zaehler…; zaehler = zaehler+1) zaehler+1) for( for( <Startanweisung>; <Abbruchbedingung>; <AnweisungNachTeilprogramm>) AnweisungNachTeilprogramm>) { <Teilprogramm> } Grundlagen der Programmierung Stephan Kleuker 304 Schleifenvergleich public void zeigeZahlen( zeigeZahlen(int start, start, int ende) { int zaehler = start; start; EinUndAusgabe io = new EinUndAusgabe(); EinUndAusgabe(); while (zaehler <= ende) { io.ausgeben(" io.ausgeben(" " + zaehler); zaehler); zaehler = zaehler + 1; } } public void zeigeZahlenFor( zeigeZahlenFor(int start, start, int ende) { EinUndAusgabe io = new EinUndAusgabe(); EinUndAusgabe(); for( for(int zaehler = start; start; zaehler<= zaehler<= ende; zaehler = zaehler+1){ io.ausgeben(" io.ausgeben(" " + zaehler); zaehler); } } Grundlagen der Programmierung Stephan Kleuker 305 for-Schleife als Aktivitätsdiagramm for( for(int zaehler = start; start; zaehler<= zaehler<= ende; zaehler = zaehler+1){ io.ausgeben(" io.ausgeben(" " + zaehler); zaehler); } int zaehler = start [!(zaehler [!(zaehler<= zaehler<= ende)] [zaehler<= zaehler<= ende] io.ausgeben(" io.ausgeben(" " + zaehler) zaehler) zaehler = zaehler+1 Grundlagen der Programmierung Stephan Kleuker 306 Regeln für for-Schleifen for( for( <Startanweisung>; <Abbruchbedingung>; <AnweisungNachTeilprogramm>) AnweisungNachTeilprogramm>) • erfahrener Programmierer erwartet beim Lesen einer ForSchleife, dass beim Start der Schleife bekannt ist, wie oft sie durchlaufen wird (Abbruchbedingung nicht im Schleifenrumpf verändern) • <Startanweisung> kann leer gelassen werden • <AnweisungNachTeilprogramm> kann weggelassen werden Grundlagen der Programmierung Stephan Kleuker 307 for-Schleife mit impliziten Iterator • Ab Java 5: leichte Abkürzung public void listeUntereinanderAusgebenIteratorForEach() listeUntereinanderAusgebenIteratorForEach() { EinUndAusgabe io = new EinUndAusgabe(); EinUndAusgabe(); for( for(int el:this.zahlen) el:this.zahlen) { io.ausgeben(" io.ausgeben("\ ("\t" + el + "\ "\n"); } } • Lesung: Für jeden int-Wert der Sammlung this.zahlen mache unter dem Objektnamen el folgendes … • Schleife sehr kompakt • man hat keinen Schleifenzähler, kann also nicht [einfach] Texte wie "i-tes Element:" ausgeben Grundlagen der Programmierung Stephan Kleuker 308 Einfaches Durchlaufen von Sammlungen for( for(int el: el: this.zahlen) this.zahlen) { io.ausgeben(" io.ausgeben("\ ("\t" + el + "\ "\n"); } • Sammlung , die durchlaufen werden soll • Typ der Elemente der Sammlung • lokale Variable vom Typ der Elemente der Sammlung; Variable nimmt nacheinander alle Werte der Sammlung an • Programm, dass für alle Elemente der Sammlung ausgeführt wird Grundlagen der Programmierung Stephan Kleuker 309 Zahlenanalyse –Sortieren (1/10) Sortieren Sie mit einer Methode sortieren, die Zahlenliste 1. Kläre den Typ des Ergebnisses hier: nur innere Veränderung des Objekts, also void 2. Kläre die Parameter der Methode hier: nur bearbeitetes Objekt selbst betroffen, also leer public void sortieren() 3. veranschauliche durch Beispiele, ob klar ist, wann welches Ergebnis herauskommt Grundlagen der Programmierung Stephan Kleuker 310 Zahlenanalyse – Sortieren (2/10) z1= name text1 zahlen 9 1 7 1 0 1 1 7 9 z1.sortieren() z1= name text1 zahlen 0 4. Überlege Lösungsverfahren (Algorithmus) Ansatz: Teile Liste in sortierte und unsortierten Bereich ein, sortiere erstes Element aus unsortiertem Bereich in sortierten Bereich ein; erster sortierter Bereich besteht aus ersten Element Grundlagen der Programmierung Stephan Kleuker 311 Zahlenanalyse – sortieren (3/10) zahlen 9 1 7 1 0 sortiert | unsortiert erste unsortierte Zahl in sortierten Bereich hineinwandern lassen, Elemente vergleichen, ggfls. vertauschen (1<9 tauschen) zahlen 1 9 7 1 0 sortiert | unsortiert 7<9, also tauschen, 7>1 nicht tauschen und einsortieren beendet zahlen 1 7 9 1 0 sortiert | unsortiert http://www.youtube.com/watch?v=ROalU379l3U http://www.youtube.com/watch?v=ROalU379l3U Grundlagen der Programmierung Stephan Kleuker 312 Zahlenanalyse – sortieren (4/10) schrittweise: 1<9, also tauschen zahlen 1 7 1 9 0 sortiert | unsortiert schrittweise: 1<7, also tauschen zahlen 1 1 7 9 0 sortiert | unsortiert schrittweise: nicht 1<1, also Einfügen beendet zahlen 1 1 7 9 0 sortiert | unsortiert Grundlagen der Programmierung Stephan Kleuker 313 Zahlenanalyse – sortieren (5/10) schrittweise: 0<9, also tauschen, 0<7 also tauschen zahlen 1 1 0 7 9 sortiert | unsortiert schrittweise: 0<1, also tauschen, 0<1 also tauschen zahlen 0 1 1 7 9 sortiert | unsortiert schrittweise: am Anfang angekommen, also Einfügen beendet und alle sortiert zahlen 0 1 1 7 9 sortiert | unsortiert Grundlagen der Programmierung Stephan Kleuker 314 Zahlenanalyse – sortieren (6/10) zahlen 9 5. Umsetzung als Programm 1 7 1 0 sortiert | unsortiert • Zähler sortiertBis, startet mit 0 läuft bis zahlen.size() zahlen.size()()-1 • Wert einordnen bekommt Wert an Position sortiertBis+1, also zahlen.get(sortiertBis+1) zahlen.get(sortiertBis+1) • Zähler mit, startet bei sortiertBis und zählt rückwärts • Wenn Wert an Stelle mit kleiner-gleich Wert einordnen ist, wird einordnen an Position mit+1 eingeordnet, Einordnung abgeschlossen ( -> Boolesche Variable abgeschlossen) • Wenn mit auf -1, dann einordnen an Position 0 einordnen, Einordnung abgeschlossen • Wenn Wert an Stelle mit größer als Wert einordnen ist, dann wandert der Wert ein Position weiter Grundlagen der Programmierung Stephan Kleuker 315 Zahlenanalyse – sortieren (7/10) 6. Programmieren public void sortieren(){ int sortiertBis = 0; while (sortiertBis+1 < this.zahlen.size()){ this.zahlen.size()){ int einordnen = this.zahlen.get(sortiertBis+1); this.zahlen.get(sortiertBis+1); int mit = sortiertBis; sortiertBis; boolean abgeschlossen = false; false; while(!abgeschlossen){ while(!abgeschlossen){ if (mit == -1 || this.zahlen.get(mit this.zahlen.get(mit) (mit) <= einordnen){ this.zahlen.set(mit+1,einordnen this.zahlen.set(mit+1,einordnen); (mit+1,einordnen); abgeschlossen = true; true; } else { this.zahlen.set(mit+1,this.zahlen.get(mit)); this.zahlen.set(mit+1,this.zahlen.get(mit)); } vergleichMit = vergleichMit -1; } sortiertBis = sortiertBis + 1; } Stephan Kleuker Grundlagen der Programmierung } 316 Zahlenanalyse – sortieren (8/10) public void sortierbeispiele(){ 7. Testen sortierbeispiele(){ Zahlenanalyse z = new Zahlenanalyse("bla Zahlenanalyse("bla"); bla"); z.hinzufuegen(9); z.hinzufuegen(9); z.hinzufuegen(1); z.hinzufuegen(1); z.hinzufuegen(7); z.hinzufuegen(7); z.hinzufuegen(1); z.hinzufuegen(1); z.hinzufuegen(0); z.hinzufuegen(0); io.ausgeben("1: io.ausgeben("1: "+z+"\ "+z+"\n"); z.sortieren(); z.sortieren(); io.ausgeben("2: io.ausgeben("2: "+z+"\ "+z+"\n"); z.hinzufuegen(5); z.hinzufuegen(5); 1: bla: [9, 1, 7, 1, 0] z.sortieren(); z.sortieren(); io.ausgeben("3: io.ausgeben("3: "+z+"\ "+z+"\n"); 2: bla: [0, 1, 1, 7, 9] 3: bla: [0, 1, 1, 5, 7, 9] z.hinzufuegen(11); z.hinzufuegen(11); 4: bla: [0, 1, 1, 5, 7, 9, 11] z.sortieren(); z.sortieren(); [-1, 0, 1, 1, 5, 7, 9, 11] io.ausgeben("4: io.ausgeben("4: "+z+"\ "+z+"\n"); 5: bla: [z.hinzufuegen( z.hinzufuegen(-1); z.sortieren(); z.sortieren(); io.ausgeben(„5: io.ausgeben(„5: "+z+"\ "+z+"\n"); Grundlagen der Programmierung Stephan Kleuker 317 } Zahlenanalyse – sortieren (9/10) 8. Fehler finden, Extremfälle beachten public void extremfaelle(){ extremfaelle(){ Zahlenanalyse z = new Zahlenanalyse("bla Zahlenanalyse("bla"); bla"); io.ausgeben("1: io.ausgeben("1: "+z+"\ "+z+"\n"); z.sortieren(); z.sortieren(); io.ausgeben("2: io.ausgeben("2: "+z+"\ "+z+"\n"); z.setZahlen(null); z.setZahlen(null); io.ausgeben("3: io.ausgeben("3: "+z+"\ "+z+"\n"); z.sortieren(); z.sortieren(); io.ausgeben("4: io.ausgeben("4: "+z+"\ "+z+"\n"); } Grundlagen der Programmierung Stephan Kleuker 318 Zahlenanalyse – sortieren (10/10) 9. Korrigieren public void sortieren(){ if (this.zahlen == null) { return; return; } int sortiertBis = 0; // … wie vorher 10. Testen, solange 8.-10. bis fertig Grundlagen der Programmierung Stephan Kleuker 319 Array Grundlagen der Programmierung Stephan Kleuker 320 Idee von Arrays • Nutzung der bisher bekannten Sammlungen kann recht aufwändig sein, da z. B. beim Hinzufügen immer neuer Platz im Speicher gesucht werden soll • Effizienter sind Objekte, die einmal gespeichert werden und ihre Größe nicht mehr ändern • praktisch einsetzbar, wenn man die maximale Anzahl von Objekten kennt, die alle den gleichen Typen haben und deren Anzahl nicht allzu groß ist • Zugehöriger Datentyp wird Array (Feld, Reihung) genannt • besondere Form der Typangabe <Typ>[] <Variablenname> ; • Arrays können wie Sammlungen iteriert werden, Länge allerdings durch <Variablenname>.length bestimmbar Grundlagen der Programmierung Stephan Kleuker 321 Varianten der Initialisierung public class Analyse { private String[] wo1 = {"Mo","Di","Mi","Do","Fr","Sa","So {"Mo","Di","Mi","Do","Fr","Sa","So"}; Mo","Di","Mi","Do","Fr","Sa","So"}; private String[] wo2 = new String[7]; //null//null-Werte private String[] wo3; public void initialisieren(){ //wo3 //wo3 = {"42"} geht nicht wo3 = wo2; EinUndAusgabe io = new EinUndAusgabe(); EinUndAusgabe(); for( for(int i=0; i<wo1.length; i=i+1){ wo2[i]=wo1[i]; wo2[i]=wo1[i]; } for( for(int i=0; i<wo3.length; i=i+1){ io.ausgeben(wo3[i io.ausgeben(wo3[i]); (wo3[i]); } MoDiMiDoFrSaSo io.ausgeben(" io.ausgeben("\ ("\n"); } Grundlagen der Programmierung Stephan Kleuker 322 Beispiel N-Eck (1/5): Klassen • ein n-Eck wird durch n-Punkte definiert, die nacheinander verbunden sind (enge Verwandtschaft zum Polygonzug) • nutzt Klasse Punkt (mit toString und verschieben) Grundlagen der Programmierung Stephan Kleuker 323 Beispiel N-Eck (2/5): Objektvariablen, Konstruktoren public class NEck{ NEck{ private private String id = ""; Punkt[] ecken; public NEck(String NEck(String id, id, Punkt[] ecken){ this.id = id; id; this.ecken = ecken; } public NEck( NEck(int anzahl){ anzahl){ this.ecken = new Punkt[anzahl Punkt[anzahl]; anzahl]; } public String getId(){ getId(){ return this.id; } public void setId(String setId(String s){ this.id = s; Stephan Kleuker Grundlagen } der Programmierung 324 Beispiel N-Eck (3/5): weitere Methoden public void setEcken(Punkt[] setEcken(Punkt[] punkte){ punkte){ this.ecken = punkte;} punkte;} public Punkt[] getEcken(){ getEcken(){ return this.ecken; this.ecken; } public void setzeEckeAn( setzeEckeAn(int position, position, Punkt p){ this.ecken[ this.ecken[position] position] = p; } public Punkt gibPunktAn( gibPunktAn(int position){ position){ return this.ecken[ this.ecken[position]; position]; } public String toString(){ toString(){ String ergebnis = id+":[ id+":[ "; for( for(int i=0; i < this.ecken.length; this.ecken.length; i = i+1){ ergebnis = ergebnis+this.ecken[i]+" ergebnis+this.ecken[i]+" "; } return ergebnis+"]"; ergebnis+"]"; } Grundlagen der Programmierung Stephan Kleuker 325 Beispiel N-Eck (4/5): anzeigen public void anzeigen(Interaktionsbrett ib){ ib){ int anzahl = this.ecken.length; this.ecken.length; int zaehler = 0; while( while(zaehler < anzahlanzahl-1){ Punkt start = this.ecken[ this.ecken[zaehler]; zaehler]; Punkt ende = this.ecken[zaehler+1]; this.ecken[zaehler+1]; ib.neueLinie( ib.neueLinie(start.getX(), start.getX(), start.getY() start.getY() , ende.getX(), ende.getX(), ende.getY()); ende.getY()); zaehler = zaehler + 1; } Punkt anfang = this.ecken[0]; this.ecken[0]; Punkt ende = this.ecken[anzahl this.ecken[anzahl[anzahl-1]; ib.neueLinie( ib.neueLinie(anfang.getX(), anfang.getX(), anfang.getY() anfang.getY() , ende.getX(), ende.getX(), ende.getY()); ende.getY()); } Grundlagen der Programmierung Stephan Kleuker 326 Beispiel N-Eck (5/5): Nutzung in NEckAnalyse public void analyse1(){ Punkt[] Punkt[] pa = {new {new Punkt(10,10), new Punkt(70,10) Punkt(70,10) , new Punkt(40,50)}; NEck n3 = new NEck("3",pa); NEck("3",pa); this.io.ausgeben(n3 this.io.ausgeben(n3+" (n3+"\ +"\n"); n3.anzeigen(this.ib n3.anzeigen(this.ib); this.ib); NEck n4 = new NEck(4); NEck(4); this.io.ausgeben(n4 this.io.ausgeben(n4+" (n4+"\ +"\n"); n4.anzeigen(this.ib n4.anzeigen(this.ib); this.ib); } Grundlagen der Programmierung Stephan Kleuker 327 Erweiterung: N-Eck verschieben (1/2) • in Neck: public void verschieben(int verschieben(int deltaX, deltaX, int deltaY){ deltaY){ int zaehler = 0; while( while(zaehler < this.ecken.length){ this.ecken.length){ Punkt p = this.ecken[ this.ecken[zaehler]; zaehler]; p.verschieben( p.verschieben(deltaX,deltaY); deltaX,deltaY); zaehler = zaehler + 1; } } public void verschieben2(int verschieben2(int deltaX, deltaX, int deltaY){ deltaY){ for(Punkt for(Punkt p: this.ecken){ this.ecken){ p.verschieben( p.verschieben(deltaX,deltaY); deltaX,deltaY); } } Grundlagen der Programmierung Stephan Kleuker 328 Erweiterung: N-Eck verschieben (2/2) public void analyse2(){ Punkt[] pa = {new {new Punkt(10,10), new Punkt(70,10) Punkt(70,10) , new Punkt(40,50)}; NEck n3 = new NEck("3",pa); NEck("3",pa); n3.anzeigen(this.ib n3.anzeigen(this.ib); this.ib); n3.verschieben(30,0); n3.anzeigen(this.ib n3.anzeigen(this.ib); this.ib); n3.verschieben(n3.verschieben(-15,20); n3.anzeigen(this.ib n3.anzeigen(this.ib); this.ib); } Grundlagen der Programmierung Stephan Kleuker 329 Beispiel Pferderennen (1/4) • n Pferde werden zufällig bewegt, bis eines im Ziel ist Grundlagen der Programmierung Stephan Kleuker 330 Beispiel Pferderennen (2/4) public class Pferderennen{ private NEck[] NEck[] pferde; pferde; private Interaktionsbrett ib = new Interaktionsbrett(); public Pferderennen(int Pferderennen(int anzahl){ anzahl){ this.pferde = new NEck[ NEck[anzahl]; anzahl]; for( for(int i=0; i<anzahl i<anzahl; anzahl; i=i+1){ int x = 10; int y = 30+i*30; Punkt[] Punkt[] pa = {new {new Punkt(x+3,y),new Punkt(x+3,y),new Punkt(x+20,y) ,new Punkt(x+24,yPunkt(x+24,y-4),new 4),new Punkt(x+28,y),new Punkt(x+28,y),new Punkt(x+26,y+2) ,new Punkt(x+24,y),new Punkt(x+24,y),new Punkt(x+21,y+3),new Punkt(x+21,y+3),new Punkt(x+21,y+5) ,new Punkt(x+19,y+5),new Punkt(x+19,y+5),new Punkt(x+19,y+12),new Punkt(x+19,y+12),new Punkt(x+17,y+12) ,new Punkt(x+17,y+5),new Punkt(x+17,y+5),new Punkt(x+8,y+5),new Punkt(x+8,y+5),new Punkt(x+8,y+12) ,new Punkt(x+6,y+12),new Punkt(x+6,y+12),new Punkt(x+6,y+5),new Punkt(x+6,y+5),new Punkt(x+3,y+5)}; this.pferde[i this.pferde[i] [i] = new NEck("Pferd NEck("Pferd "+i, pa); pa); } } Grundlagen der Programmierung Stephan Kleuker 331 Beispiel Pferderennen (3/4) private void darstellen(){ this.ib.abwischen(); this.ib.abwischen(); for( for(int i=0; i<this.pferde.length i<this.pferde.length; this.pferde.length; i = i+1){ this.pferde[i].anzeigen( this.pferde[i].anzeigen(this.ib [i].anzeigen(this.ib); this.ib); this.ib.neuerText(3,40+i*30,""+i); this.ib.neuerText(3,40+i*30,""+i); for( for(int j=0; j<171; j = j+10){ this.ib.neueLinie(j,45+i*30,j+5,45+i*30); this.ib.neueLinie(j,45+i*30,j+5,45+i*30); } } ib.neueLinie(175,20,175,20+this.pferde.length*30); ib.neueLinie(175,20,175,20+this.pferde.length*30); ib.pause(5); ib.pause(5); } Grundlagen der Programmierung Stephan Kleuker 332 Beispiel Pferderennen (4/4) public void rennen(){ boolean ende = false; false; while(!ende){ while(!ende){ int wahl = this.ib.zufall(0,this.pferde.length this.ib.zufall(0,this.pferde.length(0,this.pferde.length-1); this.pferde[ this.pferde[wahl].verschieben(1,0); wahl].verschieben(1,0); darstellen(); darstellen(); if( if(this.pferde[ this.pferde[wahl]. wahl].gibPunktAn ].gibPunktAn(0). gibPunktAn(0).getX (0).getX() getX() >= 150){ ende = true; true; this.ib.neuerText(10,15 this.ib.neuerText(10,15, (10,15, "gewonnen hat " + this.pferde[ this.pferde[wahl]. wahl].getId ].getId()); getId()); } } } Grundlagen der Programmierung Stephan Kleuker 333 Mehrdimensionale Arrays 1 • Achtung niemals dadurch Klassen ersetzen! public void mehrdimensional1(){ EinUndAusgabe io = new EinUndAusgabe(); EinUndAusgabe(); String[][] String[][] werte = {{"Mo","Jo","USA {{"Mo","Jo","USA"} Mo","Jo","USA"} ,{"Luc","Lack","FRA ,{"Luc","Lack","FRA"}}; Luc","Lack","FRA"}}; for(String for(String[] (String[] stud:werte){ stud:werte){ for(String for(String dat:stud){ dat:stud){ io.ausgeben( io.ausgeben(dat+" dat+" "); } io.ausgeben(" io.ausgeben("\ ("\n"); Mo Jo USA } Luc Lack FRA } Grundlagen der Programmierung Stephan Kleuker 334 Mehrdimensionale Arrays 2 public void mehrdimensional2(){ EinUndAusgabe io = new EinUndAusgabe(); EinUndAusgabe(); String[][][] String[][][] all = {{{"Mo","Jo","USA {{{"Mo","Jo","USA", Mo","Jo","USA", "NY"} ,{"Luc","Lack","FRA ,{"Luc","Lack","FRA"}} Luc","Lack","FRA"}} ,{{"Sue"," ,{{"Sue","Wue Sue","Wue","PRC"} Wue","PRC"} ,{"Sam","Fox","GB ,{"Sam","Fox","GB", Sam","Fox","GB", "ENG"}}}; for(String for(String[][] (String[][] sem:all){ sem:all){ for(String for(String[] (String[] stud:sem){ stud:sem){ Mo Jo USA NY for(String for(String dat:stud){ dat:stud){ Luc Lack FRA io.ausgeben( io.ausgeben(dat+" dat+" "); ***** } Sue Wue PRC io.ausgeben(" io.ausgeben("\ ("\n"); Sam Fox GB ENG ***** } io.ausgeben("***** io.ausgeben("*****\ ("*****\n"); } } Stephan Kleuker Grundlagen der Programmierung 335 Start von Java-Programmen Grundlagen der Programmierung Stephan Kleuker 336 Bisher • In BlueJ wurde Objekt erzeugt und dann Methode ausgewählt • alternativ könnte man jetzt direkt auf Klasse eine noch zu schreibende Klassenmethode ausführen • Ansatz weiter gedacht: Klasse heißt ausführbar, wenn sie eine Methode mit folgender Signatur hat public static void main(String[] arg){… arg){… Grundlagen der Programmierung Stephan Kleuker 337 Nutzung einer Main-Klasse • sinnvoll ist es, eigene Klasse Main zu ergänzen, die ausschließlich zum Start des Programmes genutzt wird • Erstellung notwendiger Objekte und Aufruf von Methoden, damit Objekte "sich kennen" • Start einer Hauptmethode public class Main{ public static void main(String[] main(String[] arg){ Pferderennen pr = new Pferderennen(10); pr.rennen(); pr.rennen(); } } Grundlagen der Programmierung Stephan Kleuker 338 Aufruf von main in BlueJ • Klassenmethode auswählen • Array kann direkt eingegeben werden (meist ohne Bedeutung, dann leer lassen) Grundlagen der Programmierung Stephan Kleuker 339 Vom Source Code zum ausführbaren Programm Java Source (Punkt.java) Java Bytecode (Punkt.class) Java Compiler (javac) Just-in-time Compiler Java Virtual Machine (java)) • Source Code wird vom Compiler in Bytecode übersetzt • Bytecode wird von JVM ausgeführt (d.h. interpretiert) • Ggf. werden über den JIT-Compiler bestimmte Befehlssequenzen in nativen Code übersetzt Grundlagen der Programmierung Stephan Kleuker 340 Kompilierung mit der Konsole - Ausgangssituation Grundlagen der Programmierung Stephan Kleuker 341 Kompilierung mit der Konsole - Kompilieren javac Main.java Grundlagen der Programmierung Stephan Kleuker 342 Kompilierung mit der Konsole - Ausführen Grundlagen der Programmierung Stephan Kleuker 343 ausführbares Programm in BlueJ (1/4) • Annahme: gibt Klasse Main mit main-Methode • Packen des Programms in eine jar-Datei (vergleichbar einer zip-Datei mit einem bestimmten Aufbau) Grundlagen der Programmierung Stephan Kleuker 344 ausführbares Programm in BlueJ (2/4) • Auswahl der Startklasse (könnte mehrere main geben) Grundlagen der Programmierung Stephan Kleuker 345 ausführbares Programm in BlueJ (3/4) • Speichern der jar-Datei • jar-Datei unter jedem Betriebssystem nutzbar Grundlagen der Programmierung Stephan Kleuker 346 ausführbares Programm in BlueJ (4/4) • Kommando-Zeile (oder Batch-Datei) • wenn graphisch (AWT oder Swing) und im Betriebssystem konfiguriert, dann Start durch Doppelklick Grundlagen der Programmierung Stephan Kleuker 347 Nutzung von Übergabeparametern (1/2) public class MainAnalyse{ MainAnalyse{ public static void main(String[] main(String[] s){ if(s==null){ if(s==null){ System.out.println("null"); System.out.println("null"); } else { if( if(s.length==0){ s.length==0){ System.out.println("kein System.out.println("kein Parameter"); } else { for( for(int i=0; i<s.length i<s.length; s.length; i =i+1){ System.out.println(i+": System.out.println(i+": "+s[i]); } } } } } Grundlagen der Programmierung Stephan Kleuker 348 Nutzung von Übergabeparametern (2/2) Grundlagen der Programmierung Stephan Kleuker 349 Viele viele fehlende Themen • Klassenvariablen und Klassenmethoden (z. B. einen Zähler, der für jedes neue Objekt hochgezählt wird) • Ordnung von Klassen in Paketen • Vererbung (Erweiterung und Modifikation von Klassen) • Interfaces (Schnittstellenabsprachen mit freier Umsetzung) • Laden und Speichern • Aufzählungen • verschiedene Arten von Sammlungen • Erstellung graphischer Oberflächen • … Grundlagen der Programmierung Stephan Kleuker 350