1.8 Übungen
1.8 Übungen
1.7.1 Das erste Java Programm
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } |
- Übersetzen Sie die Datei HelloWorld.java mit Hilfe des Kommandos javac in eine Bytecode-Datei mit dem Namen HelloWorld.class.
- Führen Sie das Programm mit dem Kommando java aus.
1.7.2 Eine einfache grafische Oberfläche
|
1.7.3 Swing Rechner
Diese Übung ist eine Gruppenübung. Sie ist wahrscheinlich zu schwer für das Selbststudium.
1. Quellcode erzeugen
Erzeugen Sie eine Datei mit dem Namen SwingRechner.java und dem folgendem Inhalt:
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; public class SwingRechner extends javax.swing.JFrame { private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JPanel jPanel1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextFieldOut; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private void initComponents() { jTextField1 = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); jTextFieldOut = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Swing Rechner"); jTextField1.setText("0"); jTextField1.setColumns(6); jTextField2.setText("0"); jTextField2.setColumns(6); jTextFieldOut.setText("0"); jTextFieldOut.setEditable(false); jButton1.setText("XXXX"); jButton2.setText("YYYY"); jButton3.setText("ZZZZ"); JPanel radioPanel = new JPanel(new GridLayout(1, 0)); radioPanel.add(jButton1); radioPanel.add(jButton2); radioPanel.add(jButton3); jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton1) jTextFieldOut.setText( executeOperation1(jTextField1.getText(), jTextField2.getText())); } } ); jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton2) jTextFieldOut.setText( executeOperation2(jTextField1.getText(), jTextField2.getText())); } } ); jButton3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getSource() == jButton3) jTextFieldOut.setText( executeOperation3(jTextField1.getText(), jTextField2.getText())); } } ); this.setBounds(300, 300, 200, 30); setMinimumSize(new Dimension(200,30)); getContentPane().add(jTextField1, BorderLayout.WEST); getContentPane().add(jTextField2, BorderLayout.EAST); getContentPane().add(radioPanel, BorderLayout.NORTH); getContentPane().add(jTextFieldOut, BorderLayout.SOUTH); pack(); } public SwingRechner() { initComponents(); } public static void main(String[] args) { SwingRechner f1 = new SwingRechner(); f1.setVisible(true); } public String executeOperation1(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); // Add Application logic here: int resultInt = 0; return (Integer.toString(resultInt)) ; } public String executeOperation2(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); // Add Application logic here: int resultInt = 1; return (Integer.toString(resultInt)) ; } public String executeOperation3(String s1,String s2) { int op1= Integer.parseInt(s1); int op2= Integer.parseInt(s2); int resultInt = 2; return (Integer.toString(resultInt)) ; } }
2. Erzeugen Sie die Javabytecodedatei SwingRechner.class
javac SwingRechner.java
3. Führen sie das Programm aus
java SwingRechner
Das erscheinende Programmfenster sollte so aussehen
Programmvorlage | Gelöste Aufgabe |
---|---|
4. Programmanpassung
Passen Sie das Programm an um einen Rechner für drei Grundrechenarten zu erhalten. Ersetzen sie in SwingRechner.java die folgenden Texte
- XXXX durch ein Symbol einer Rechenart
- YYYY durch eine Symbol einer Rechenart
- ZZZZ durch ein Symbol einer Rechenart
Implementieren Sie die drei entsprechenden Grundrechenarten in den Methoden executeOperation1(), executeOperation2(), executeOperation3().
Ändern Sie hierfür die drei Zuweisungen sinngemäss und ersetzen sie die Zuweisungen von 0, 1, 2 durch den passenden mathematischen Term mit op1 und op2.
... int resultInt = 0; ... int resultInt = 1; ... int resultInt = 2; ...
Das Programm soll anschliesend die Operationen passend zu den Buttonbeschriftungen ausführen
5. Speichern, Übersetzen und Ausführen des Programms
1.7.4 Übersetzen und Ausführen eines Programms mit Konsoleneingaben
Erzeugen Sie eine Datei mit dem entsprechenden Namen. Setzen Sie den unten aufgeführten Quellcode ein. Übersetzen Sie ihn. Führen Sie ihn aus.
import java.util.Scanner; public class GGT { public static void main(String[] args) { Scanner eingabe = new Scanner(System.in); System.out.print("Geben Sie die erste Zahl ein: "); int zahl1 = eingabe.nextInt(); System.out.print("Geben Sie die zweite Zahl ein: "); int zahl2 = eingabe.nextInt(); int ergebnis = ggT(zahl1, zahl2); System.out.println("Ergebnis: " + ergebnis); } /** * Euklidscher Algorithmus als Java-Methode */ public static int ggT(int x, int y) { while (x != y) { System.out.println("Zwischenbelegung, x= " + x + ", y=" + y); if (x > y) { x = x - y; } else { y = y - x; } } return x; } }
1.7.8 Airline in Block 1
Warnung: Alle verwendeten Namen in Java sind sensitiv auf Klein- und Großschreibung! Dies bedeutet, dass für Java ein Name der wie in der deutschen Sprache mit einem Großbuchstaben beginnt, etwas anderes ist als ein Name mit der mit einem Kleinbuchstaben beginnt.
Legen Sie ein Projekt "javakurs1" für die erste Vorlesung an.
Benutzen Sie in Netbeans den Menüpunkt File->New Project
Sie erhalten dann einen modalen Dialog. Wählen Sie "Java Application" dann den Button "next".
Der Name des Projekts ist prinzipiell frei wählbar und hat keinen weiteren Einfluß für die Vorlesung (Sie müssen dieses Projekt nur wieder finden und sie sollten hier keine Klassen benutzen die noch in der Vorlesung kommen werden).
- Tragen Sie nur im ersten Feld "Project Name" den Wert "javakurs1" ein.
- Entfernen Sie in der Checkbox "Create Main Class" den Haken.
- Clicken Sie auf "Finish"
Empfehlung: Ändern Sie in diesem keines der anderen Felder und einen wirklich guten Grund
2. Anlegen eines Pakets "Airline"
Pakete dienen zum Trennen und Gruppieren von Klassen in Java.
Bewegen Sie die Maus über das Projektsymbol (Kaffeetasse) mit dem Namen "javakurs1" und lassen Sie sich mit einem rechte Mausklick mit Halten das folgende Auswahlmenü anzeigen.
Wählen Sie hier "New"->"Java Package" aus:
Es erscheint der folgende modale Dialog:
Tragen Sie bei "Package Name" den Wert "Airline" ein un beenden Sie den Dialog mit dem "Finish" Button.
3. Erzeugen eines Unterpakets "Block1" im Paket "Airline"
In jeder Vorlesungsstunde(Block) wird in der Regel ein neues Paket verwenden.
Diese Aufgabe müssen Sie in jeder Vorlesungsstunde sinngemäß wiederholen.
In der linken Spalte kann man das Projekt "javakurs1" sehen. Diese Projekt hat eine Unterkategorie "Source packages". Hier sollte es jetzt einen Eintrag für ein Paket mit dem Namen "Airline" geben.
Man kann Unterpakte erzeugen, in dem man die Maus auf das Symbol von "Airline" bewegt. Führen Sie auf diesem Symbol einen Rechtsklick aus und halten Sie ihn.
Wählen Sie hier, wie zuvor "New"->"Java Package" aus
Es erscheint ein modaler Dialog. Tragen Sie hier im Feld "Package Name" den Wert "Airline.Block1" ein.
Beenden Sie den Dialog mit "Finish"
Wichtig: Hier wird einer Unterpaket zum Paket Airline angelegt. Der Punkt zwischen "Airline" und "Block1" trennt die beiden Namen. Er ist notwendig. Hier darf kein anderes Zeichen (z.Bsp. Leerzeichen stehen).
4. Anlegen der Klasse Flugzeug im Paket Airline.Block1
Gehen Sie link im Editor mit der Maus zum Paket "Airline.Block". Führen Sie einen Rechstklick aus und halten Sie ihn.
Es erscheint ein modaler Dialog.
Tragen Sie im Feld "Class Name" Flugzeug ein.
Ändern Sie die anderen Felder nicht.
Beenden Sie den Dialog mit dem Button "Finish"
Sie haben jetzt eine leer Klasse Flugzeug im Paket Airline.Block1 angelegt.
Diese Klassen können Sie nun editieren. Der Editor sieht wie folgt aus:
5. Erweitern der Klasse Flugzeug
Geben Sie Flugzeugen die Eigenschaft ein Kennzeichen zu haben. Kennzeichen sollen beliebige Zeichenketten sein. Zeichenketten sind in Java Klassen mit dem Namen String.
public class Flugzeug { String kennzeichen; }
Sichern Sie diese Datei. Sie finden schon raus wie das geht :-)
Wenn die Syntax der Klasse korrekt ist, werden am rechten Rand keine roten Symbole erscheinen.
Hinweis: Sie können Javacode der Vorlesung mit Copy-und-Paste direkt in Eclipse oder Netbeans einfügen. Unter Windows kommt es vor, dass die Zeilenumbrüche von html verloren gehen. Nutzen Sie in diesem Fall die Windows Anwendungen Notepad oder Wordpad als "Zwischenlandeplatz".
6. Anlegen der Klasse Flughafen
Nutzen Sie Ihre neuen Kenntnisse und Erzeugen Sie eine Klasse Flughafen im Paket Airline.Block1.
7. Erweitern der Klasse Flughafen
Flughäfen sollen die folgenden Eigenschaften haben
- einen Namen name der mit Zeichenketten verwaltet wird
- Sechs Flugsteige gate1 bis gate6 an denen Flugzeuge andocken können
- ein Treibstofflage treibstofflager in dem mit einer großen Fließkommazahl (double) der gelagerte Treibstoff verwaltet
Dies geschieht wenn Sie die Klasse Flugzeug mit dem fett gedruckten Text erweitern:
public class Flughafen { String name; Flugzeug gate1; Flugzeug gate2; Flugzeug gate3; Flugzeug gate4; Flugzeug gate5; Flugzeug gate6; double treibstoffLager; }
Es sollten nach Ihren Anpasssungen, links kein Fehler aufleuchten!
8. Schreiben eines Hauptprogramms in der Klasse Flughafen
Fügen Sie eine leer Methode mit dem Namen main() ein. Die Syntax muss exakt so aussehen wie im fett gedruckten Text
public class Flughafen { String name; Flugzeug gate1; Flugzeug gate2; Flugzeug gate3; Flugzeug gate4; Flugzeug gate5; Flugzeug gate6; double treibstoffLager; public static void main(String[] args) { } }
Nach dem Sichern der Datei Flughafen hat sich die Ikone in der linken Spalte verändert. Sie enthält jetzt eine grünes Dreieck.
Das grüne Dreick hat die Bedeutung der bekannten Starttaste. Diese Klasse kann man als Hauptprogramm ausführen! |
Diese Klasse können Sie ausführen indem Sie die Maus über das Symbol der Klasse bewegen |
Unten auf dem Bildschirm taucht eine Konsole auf. Es werden zunächst alle geänderten Klassen übersetzt und dann die gewünschte Klasse gestartet. Da die main() Methode der Klasse Flugzeug aber nichts macht, gibt es auch eine Ausgaben. |
Fügen Sie den folgenden Code innerhalb der geschweiften Klammern ein, die die Methode main() begrenzen.
public static void main(String[] args) { Flughafen pad = new Flughafen(); pad.name="Paderborn"; pad.treibstoffLager = 1000000; System.out.println("*** Unser Flughafen ***"); System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1); System.out.println("Am Gate 2: " + pad.gate2); System.out.println("Am Gate 3: " + pad.gate3); System.out.println("Treibstoff: " + pad.treibstoffLager); System.out.println("***********************"); }
Sichern Sie die Datei und starten Sie die Klasse Flughafen erneut an.
Sie sollten die folgende Konsolenausgabe sehen:
Was ist hier passiert?
Flughafen pad = new Flughafen(); |
Eine Zeigervariable pad vom Typ Flughafen wird angelegt. Es wird ein neues Flughafenobjekt erzeugt und auf die Variable zugewiesen. |
pad.name="Paderborn"; |
Das Objekt pad bekommt seinen Namen "Paderborn" zugewiesen. |
pad.treibstoffLager = 1000000; |
Das Treibstofflager des Objekt pad bekommt den Wert 1000000 zugewiesen. |
System.out.println("*** Unser Flughafen ***"); |
Die Methode System.out.println() druckt Zeichenketten auf der Konsole.
|
System.out.println("Flughafen " + pad.name); |
Drucke den Namen des Objekt pad |
System.out.println("Am Gate 1: " + pad.gate1); |
Drucke die Belegung von gate1 |
System.out.println("Am Gate 2: " + pad.gate2); |
Drucke die Belegung von gate2 |
System.out.println("Am Gate 3: " + pad.gate3); |
Drucke die Belegung von gate3 |
System.out.println("Treibstoff: " + pad.treibstoffLager); |
Drucke die Treibstoffmenge
|
System.out.println("***********************"); |
Drucke Sternchen... |
9. Erzeugen eines Flugzeugs und Anlegen am Gate1
Implementieren Sie die folgenden Befehle am Ende der main() Methode.
- Legen Sie eine Zeigervariable vom Typ Flugzeug mit dem Namen lh1 and und Erzeugen Sie ein Flugzeugobjekt
- Geben Sie dem Flugzeug das Kennzeichen D-ABTL
- "Docken" Sie das Flugzeug am Gate 1 des Flughafens pad an.
- Geben Sie den Namen des Flugzeugs an Gate aus
- Wiederholen Sie all Druckbefehlee des vorhergenden Schritts.
Hierzu muss die folgende Codesequenz in der main() Methode vor der letzten geschwiften Klammer eingefügt werden:
// Boeing 747, https://de.wikipedia.org/wiki/Boeing_747#747-400 Flugzeug lh1 = new Flugzeug(); lh1.kennzeichen ="D-ABTL"; pad.gate1 = lh1; System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1.kennzeichen); System.out.println("*** Unser Flughafen ***"); System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1); System.out.println("Am Gate 2: " + pad.gate2); System.out.println("Am Gate 3: " + pad.gate3); System.out.println("Treibstoff: " + pad.treibstoffLager); System.out.println("***********************");
Sichern Sie die Datei. Übersetzen Sie Datei und führen Sie sie wieder aus.
Die Ausgabe auf der Konsole ist:
*** Unser Flughafen *** Flughafen Paderborn Am Gate 1: null Am Gate 2: null Am Gate 3: null Treibstoff: 1000000.0 *********************** Flughafen Paderborn Am Gate 1: D-ABTL *** Unser Flughafen *** Flughafen Paderborn Am Gate 1: AirlineSolution.Block1.Flugzeug@677327b6 Am Gate 2: null Am Gate 3: null Treibstoff: 1000000.0 ***********************
10. Anlegen eines zweiten Flugzeugs
Fügen Sie in der main() Methode nach dem Anlegen des ersten Flugzeugs die folgenden Befehle ein:
- Legen Sie eine Variable lh2 für ein zweites Flugzeug und erzeugen Sie ein Flugzeugobjekt wie beim ersten Flugzeug
- Das Kennzeichen des Flugzeugs soll D-AIMA sein
- Legen Sie das Flugzeug an Gate 2 des Flughafens pad
Fügen Sie hinter den Befehl der das erste Flugzeug an Gate 1 ausgibt einen gleichartigen Befehl für Gate 2
Die main() Methode sieht jetzt wie folgt aus. Die neuen Befehle sind fett gedruckt:
public static void main(String[] args) { Flughafen pad = new Flughafen(); pad.name="Paderborn"; pad.treibstoffLager = 1000000; System.out.println("*** Unser Flughafen ***"); System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1); System.out.println("Am Gate 2: " + pad.gate2); System.out.println("Am Gate 3: " + pad.gate3); System.out.println("Treibstoff: " + pad.treibstoffLager); System.out.println("***********************"); // Boeing 747, https://de.wikipedia.org/wiki/Boeing_747#747-400 Flugzeug lh1 = new Flugzeug(); lh1.kennzeichen ="D-ABTL"; pad.gate1 = lh1; // Airbus A380 https://de.wikipedia.org/wiki/Airbus_A380#A380-800 Flugzeug lh2 = new Flugzeug(); lh2.kennzeichen = "D-AIMA"; pad.gate2 = lh2; System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1.kennzeichen); System.out.println("Am Gate 2: " + pad.gate2.kennzeichen); System.out.println("*** Unser Flughafen ***"); System.out.println("Flughafen " + pad.name); System.out.println("Am Gate 1: " + pad.gate1); System.out.println("Am Gate 2: " + pad.gate2); System.out.println("Am Gate 3: " + pad.gate3); System.out.println("Treibstoff: " + pad.treibstoffLager); System.out.println("***********************"); }
Sichern Sie die Datei, übersetzen Sie sie, führen Sie die main() Methode der Klasse Flughafen aus.
*** Unser Flughafen *** Flughafen Paderborn Am Gate 1: null Am Gate 2: null Am Gate 3: null Treibstoff: 1000000.0 *********************** Flughafen Paderborn Am Gate 1: D-ABTL Am Gate 2: D-AIMA *** Unser Flughafen *** Flughafen Paderborn Am Gate 1: AirlineSolution.Block1.Flugzeug@677327b6 Am Gate 2: AirlineSolution.Block1.Flugzeug@14ae5a5 Am Gate 3: null Treibstoff: 1000000.0 ***********************
- 7374 views