Title: Java
Course: eTapas 2014/15

Q: Sie haben die Variable "zahl" vom Typ Long definiert. Welche der folgenden Schreibweisen sind zulässig, um die Zahl auszudrücken.
- 125L
- -125l
- 32L
- 125
- -125
- -32
A: 125L; -125l; 32L

Q: Sie haben in der Klasse "FrameBuilder" eine Variable mit Namen "title" mit folgender Syntax definiert:

public class FrameBuilder {

String title = "initial title";

}

Sie stellen fest, dass die Variable von außerhalb des Objekts nicht zugänglich ist. Wie lautet die korrekte Definition der Variable "title", die einen Zugriff von Außerhalb ermöglicht? (Ganze Zeile angeben!!)
A: public String title = "initial title";

Q: Welchen Aussagen zur Methode

public static void main(String[] args) { }

sind korrekt?
- Sie stellt den Eintrittspunkt in ein Java-Programm dar
- Als statische Methode existiert sie bereits bevor ein Objekt instanziert wurde
- Es wird ein String-Array mit den Parametern übergeben
- Die Methode wird in jeder Klasse definiert, um Parameter bei der Instanzierung des Objekts weitergeben zu können
- Die Methode gibt einen String als Rückgabewert aus
A: Sie stellt den Eintrittspunkt in ein Java-Programm dar; Als statische Methode existiert sie bereits bevor ein Objekt instanziert wurde; Es wird ein String-Array mit den Parametern übergeben

Q: Wenn man bei einer Programmiersprache Werte unter einem bestimmten Namen speichert, spricht von von einer Variablen. Bei einer Variablen wird je nach Datentyp unterschiedlich viel Arbeitsspeicher reserviert.

Insgesamt gibt es in Java [...] primitive Datentypen. Alle anderen Datentypen sind [...]. Die Bezeichnung der primitiven Datentypen ist [...], das bedeutet, dass zwischen Groß- und Kleinschreibung unterschieden wird.
A: 8; Objekte; case sensitive / casesensitive

Q: Erkennen Sie die folgenden Datentypen:

(Bei Zahlen nehmen Sie den kleinstmöglichen Datentyp, um Arbeitsspeicher zu sparen)
- true | boolean
- a | char
- 25 | byte
- 17.000 | short

Q: Welche Datentypen können Sie verwenden, um eine Währung mit 2 Kommastellen (bspw. 425,72 €) zu speichern?
- byte
- short
- int
- long
- char
- float
- double
A: float; double

Q: Geben Sie bei den folgenden Zahlen an, wieviele bit zumindest erforderlich sind, um die Zahl mit einem primitiven Datentyp zu speichern:

Zahl | Typ | Bit
65.000 | [...] | [...]
65,96 | [...] | [...]
126 | [...] | [...]
126,0 | [...] | [...]
A: int; 32; float; 32; byte; 8; float; 32
Gap 1 offers: byte; short; int; long; float; double
Gap 2 offers: 8; 16; 32; 64
Gap 3 offers: byte; short; int; long; float; double
Gap 4 offers: 8; 16; 32; 64
Gap 5 offers: byte; short; int; long; float; double
Gap 6 offers: 8; 16; 32; 64
Gap 7 offers: byte; short; int; long; float; double
Gap 8 offers: 8; 16; 32; 64

Q: Sie haben folgenden Algorithmus vor sich:

public static void main(String[] args) {

int totalram = 0;
Computer[] c = new Computer[2];
c[0] = new Computer();
c[0].brand = "HP"; c[0].ram = 4; c[0].ghz = 3.3;
c[1] = new Computer();
c[1].brand = "Lenovo"; c[1].ram = 2; c[1].ghz = 2.8;

System.out.println("Willkommen beim Computermodell");
System.out.println("Hier haben wir "+c.length+" Computer");

for(Computer comp: c)

totalram = totalram+comp.ram;

System.out.println("Insgesamt stehen "+totalram+" GB Arbeitsspeicher zur Verfügung.");

for(int i=0;i<c.length;i++)

System.out.println("Computer "+(i+1)+" der Marke "+c[i].brand+": "+c[i].ram);

System.out.println("Das Computermodell endet hier");

}

Das Array c hat als Datentyp [...] und besteht aus [...]  Elementen. Die Variablen brand, ram und ghz sollten bei der Erstellung des Objekts Computer folgendermaßen definiert werden, um den Arbeitsspeicher möglichst effizient nutzen zu können:

- [...] brand
- [...] ram
- [...] ghz

Dem Konstruktur des Objekts Computer werden die folgenden Parameter übergeben: [...]

Das Programm wird folgende Zeilen ausgeben:

Achtung, die Anzahl der Zeilen muss nicht mit der Anzahl der Textfelder übereinstimmen!

1. Willkommen beim Computermodell
2. [...]
3. [...]
4. [...]
5. [...]
6. [...]
7. [...]
A: Computer; 2; public String; public byte; public float; keine; Hier haben wir 2 Computer; Insgesamt stehen 6 GB Arbeitsspeicher zur Verfügung.; Computer 1 der Marke HP: 4; Computer 2 der Marke Lenovo: 2; Das Computermodell endet hier; .
Partly right: gap 3 private String (50%); gap 3 String (50%); gap 4 private byte (50%); gap 4 byte (50%); gap 5 private float (50%); gap 5 float (50%)
Gap 2 offers: 0; 1; 2; 3; 4; 5
Gap 6 offers: keine; brand; brand und ram; brand, ram und ghz; brand und ghz; ram und ghz

Bauen Sie ein Java-Programm nach, dass wie folgt funktioniert:

Die Datei heißt "mydownload.java" und enthält ua den folgenden Algorithmus:

public static void main(String[] args){

MyDownloader md = new MyDownloader(args[0]);

System.out.println("Downloader für URL "+md.url+" erzeugt");

md.startDownload();

}

Wenn das Programm mit folgendem Systemaufruf gestartet wird java mydownload http://www.firnbergschulen.at/diedatei.txt erscheint diese Ausgabe:

1. Downloader für URL http://www.firnbergschulen.at/diedatei.txt erzeugt
2. Download gestartet

Laden Sie die Datei "mydownload.java" hier hoch.

Q: Vervollständigen Sie den folgenden Java-Code

public class Sparbuch {

private [...] kontostand; // Währung
private [...] zinssatz; // Zinssatz auf 2 Dezimale

public [...](double kontostand,float zinssatz) {

[...].kontostand = kontostand;
[...].zinssatz = zinssatz;

}

public [...] verzinsen(){

this.[...] = this.kontostand * this.[...]

}

public [...] kontostandAktuell() {

return this.kontostand;

}

}
A: double; float; Sparbuch; this; this; void; kontostand; zinssatz; double

Q: Vervollständigen Sie den Algorithmus so, dass das Programm wie in den Kommentaren vorgegeben funktioniert:

public class Notenrechner {

// Diese Klasse dient der Berechnung von Durchschnittsnoten eines Schülers/einer Schülerin
private int[] noten;

public static void main(String[] args) {

// Als Argumente werden Zahlen übergeben. Diese werden zuerst in das int-Array noten gespeichert
this.noten = new [...][args.length];
for(int i=0;i<args.length;i++)

noten[i] = Integer.parseInt(args[i]);

// Wir erzeugen den Notenrechner und lassen die Leistung ermitteln
Notenrechner nr = new Notenrechner(noten);
[...]

}

// Der Konstruktur erhält die Notenliste bereits als int-Array
public [...](int[] [...]) {

this.noten = n;

}

// Die Methode durchschnittErmitteln wird nur innerhalb der Klasse aufgerufen
// und gibt den Notendurchschnitt zurück
[...] [...] durchschnittErmitteln(){

float m = 0.0;

for(int n: this.noten)

m = m+n;

m = m/this.noten.length;

return m;

}

public void leistungErmitteln(){

float m = durchschnittErmitteln();
// Sofern der Notenschnitt unter 1,5 ist haben wir einen Vorzug
// Sonst - sofern der Notenschnitt zumindest unter 2 ist, ist es ein guter Erfolg
// Sonst wird zumindest der Notenschnitt ausgegeben

if(m<[...]) System.out.println("Das ergibt einen Vorzug mit "+m+"!");
[...] if(m<2) System.out.println("Das ist ein guter Erfolg mit "+m+"!");
else System.out.println("Der Notenschnitt beträgt "+m);

}

}
A: int; nr.leistungErmitteln();; Notenrechner; n; private; float; 1.5; else
Gap 5 offers: private; public

Sie haben die folgende Klasse "Schularbeit" (Sie können zur weiteren Bearbeitung den Inhalt in Eclipse einfügen):

public class Schularbeit {

public static void main(String[] args){

String[] zeilen = new String[]{ "Zeile1","Zeile2","Zeile3","Zeile4" };

// TODO Generieren Sie eine Schleife, die alle Zeilen des Arrays nach System.out ausgibt

}

}

Vervollständigen Sie das Programm und laden Sie die Datei "Schularbeit.java" hier hoch.

Sie haben die folgende Klasse "MyDownloader" (Sie können zur weiteren Bearbeitung den Inhalt in Eclipse einfügen):

public class MyDownloader {

public static void main(String[] args){

String[] files = new String[]{ "http://www.url.at/datei1.pdf","http://www.url.at/datei2.pdf","http://www.url.at/datei3.pdf","http://www.url.at/datei4.pdf" };

// TODO Generieren Sie eine Schleife, die alle herunterzuladenden Dateien auflistet
// nach dem Schema
// 1.) http://www.url.at/datei1.pdf
// 2.) http://www.url.at/datei2.pdf
// etc.

}

}

Vervollständigen Sie das Programm und laden Sie die Datei "MyDownloader.java" hier hoch.

Q: Sie wollen in Ihrem Programm eine Methode implementieren, die auf eine Text zugreift. Daher ziehen Sie die Java-API unter der folgenden Adresse zu Rate: http://docs.oracle.com/javase/6/docs/api/

Sie benutzen die Klasse java.io.BufferedReader um die Textdatei mit der Funktion readLine() Zeile für Zeile auszulesen. Welchen Datentyp gibt die Funktion readLine() jeweils zurück, bzw. welchen Wert, wenn das Ende der Datei erreicht wurde?

Datentyp: [...]

Wert: [...]

Sie lesen in einem Blog, dass man alternativ zum BufferedReader eine Textdatei auch mit der Klasse java.io.FileReader auslesen kann, indem man die Methode read() benutzt, um Zeichen für Zeichen auszulesen. Welchen Datentyp gibt die Funktion read() jeweils zurück, bzw. welchen Wert, wenn das Ende der Datei erreicht wurde?

Datentyp: [...]

Wert: [...]
A: String; null; int / Integer; -1

Sie haben die Aufgabe das Spiel "Hangman" zu programmieren. Das Programm soll dabei folgendermaßen vorgehen:

- Noch in der Main-Methode muss ein Benutzer das komplette Wort eingeben. Das Wort muss dabei mindestens aus 4 Buchstaben bestehen.
- Dann wird das Objekt "Hangman" initialisiert, dessen Konstruktor das komplette Wort übergeben wird.
- Das Objekt Hangman umfasst die Variablen
  - word_searched (Wort im Ganzen als String)
  - word_current (Wort soweit erraten als String)
  - word_chars (Wort als String-Array)
  - word_guess (Wort als String-Array mit "_" als Füllzeichen)
  - failed_guesses (ArrayList<String> mit falsch geratenen Buchstaben)
- Das Objekt Hangman umfasst die Methoden
  - Hangman
  - compareWords
  - nextGuess
  - printHangman
- Methode Hangman
  - Konstruktor, dem das komplette Wort übergeben wird
  - Speichert komplettes Wort in word_searched
  - Speichert komplettes Wort als String-Array in word_chars (String.split(""))
  - Erzeugt String-Array word_guess in selber Länge wie word_chars und füllt es mit "_" auf.
  - Übernimmt ersten und letzten Buchtsasben von word_chars in word_guess
  - Schleife, die läuft bis
    - das Wort erraten wurde (compareWords ist true) ODER
    - der Benutzer auf abbrechen klickt (nextGuess ist null) ODER
    - der Benutzer zu oft falsch geraten hat (failed_guesses.size()>9)
  - Innerhalb der Schleife wird ermittelt, ob der Buchstabe im Array word_chars vorkommt
    - Wenn ja, fülle alle entsprechenden Buchstaben in word_guess auf und aktualisiere word_current
    - Wenn nein, füge Buchstabe zu failed_guesses hinzu
- Methode compareWords
  - wenn word_searched entspricht word_current return true
  - sonst return false
- Methode nextGuess
  - Rufe printHangman auf
  - Lass Benutzer einen Buchstaben eingeben (Inputbox)
  - Eingabe nur gültig, wenn genau 1 Buchstabe eingegeben wurde, oder NULL (abbrechen geklickt)
  - return Eingabe
- Methode printHangman
  - Je nach Anzahl der Buchstaben in failed_guesses wird ausgegeben:
  - Wenn 0: nichts
  - Wenn 1: Waagrechter Balken unten
  - Wenn 2: (1) und senkrechter Balken
  - Wenn 3: (1+2) und waagrechter Balken oben
  - Wenn 4: (1+2+3) und Querbalken links
  - Wenn 5: (1+2+3+4) und Strang
  - Wenn 6: (1+2+3+4+5) und Kopf
  - Wenn 7: (1+2+3+4+5+6) und Körper
  - Wenn 8: (1+2+3+4+5+6+7) und Beine
  - Wenn 9: (1+2+3+4+5+6+7+8) und Arme

    _____
    |/  |
    |   O
    |  `|´
    |   ^
____|_____

Laden Sie die Java-Datei hier hoch, oder geben Sie den Source-Code im Textfeld ein!
Feedback: 4 Objekt Hangman definiert (Main-Methode, etc.) 5 Variablen richtig angelegt 4 Methoden angelegt 4 Return-Values der Methoden richtig 4 Signaturen der Methoden richtig 5 Qualität Methode Hangman 2 Qualität Methode compareWords 4 Qualität Methode nextGuess 3 Qualität Methode printHangman