Stephan Kleuker 303 Grundlagen der Programmierung

Werbung
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
Herunterladen