TU Wien:Programmkonstruktion VU (Puntigam)/2015W Adhoc aufgaben

Aus VoWi
Zur Navigation springen Zur Suche springen

Adhoc Aufgaben Zusammenfassung[Bearbeiten | Quelltext bearbeiten]

Hier ein Link zu allen zusammengefassten Aufgaben des WS2015: Datei:TU Wien-Programmkonstruktion VU (Puntigam) - AdHocs WS15.zip

Adhoc Aufgabe 1[Bearbeiten | Quelltext bearbeiten]

mi15b[Bearbeiten | Quelltext bearbeiten]

Zusatz Aufgabe 2: Erstellen Sie eine statische Methode, die
die funktion der while-Schleife abbildet. Es werden zwei
Integer Variablen übergeben (int anfang, int ende) und es
wird die Summe als Integer zurück.

Zusatz Aufgabe 4: Zählen Sie das vorkommen einer
bestimmten Ziffer innerhalb einer Zahl. Schreiben Sie eine
statische Methode "String countNum(int number, int
value)", die eine Zahl "number" übergeben bekommt und
die Ziffer "value" in dieser Zahl sucht und zählt. Das
Ergebnis wird als String zurückgegeben.

Zusatz Aufgabe 5: Schreiben Sie eine statische Methode
"int crossSumSearch(int cSum), die die Methode
calcCrossSum verwendet und die Zahl sucht, welche die
Quersumme cSum hat. "crossSumSearch" gibt die Zahl
mit der entsprechenden Quersumem zurück.

Mögl. Lösung Aufgabe5:

public class Aufgabe5 {

    /* TODO: add code here */

    public static void main(String[] args) {
        //  Aufgabe5:
        System.out.println("Soll Ausgabe:  1, Ist Ausgabe:  " + calcCrossSum(1));
        System.out.println("Soll Ausgabe:  2, Ist Ausgabe:  " + calcCrossSum(20));
        System.out.println("Soll Ausgabe: 10, Ist Ausgabe: " + calcCrossSum(1234));

        //  Adhoc:
        System.out.println("");
        System.out.println("Adhoc:");
        System.out.println("Soll Ausgabe bei 13: 49, Ist Ausgabe: " + crossSumSearch(13));
    }



    private static int calcCrossSum(int value) {
        if (value < 10) return value;

        int sum = 0;

        while(value != 0) {
            sum += value % 10;
            value /= 10;
        }

        return sum;
    }

    //Adhoc
    private static int crossSumSearch(int cSum){
        int counter = 0;

        while(calcCrossSum(counter++) != cSum);

        return --counter;
    }
}

do08a[Bearbeiten | Quelltext bearbeiten]

1) Methode, die den größten über gebenen Parameter zurückgibt (3 Parameter)
2) Methode, die die größte Differenz zwischen 3 über gebenen Zahlen bestimmt und zurück gibt
3) zB wird als Parameter 3 über geben, muss folgendes ausgegeben werden:
=
==
===
==
=
Bei 2
=
==
=

Usw

Mögl. Lösung #1:

Adhoc Aufgabe 2[Bearbeiten | Quelltext bearbeiten]

Di13b[Bearbeiten | Quelltext bearbeiten]

U2 - AdHoc Aufgaben


A1 50%
Erstellen Sie eine Methode namens mathop, die zwei übergebene Zahlen
addiert, subtrahiert, dividiert, oder multipliziert, je nachdemn, welcher
Operator übergeben wurde. Die Methode gibt als Ergebnis einen Satz zurück,
der die Operation beschreibt, wie z.B.:

"5 mal 5 ergibt 25"
"2 plus 3 ergibt 5"
"1 minus 1 ergibt 0"
"4 durch 2 ergbit 2"

Rufen Sie die so erstellte Methode auf, und geben Sie das Resultat mit
System.out.println() auf die Console aus.

A2 50%
Erweitern Sie die Main Methode, sodass sie die Anweisungen zum Ausführen
der obigen Methode solange mittels Scanner eingelesen werden, bis "exit"
eingegeben wird. Nach der eingegebenen Anweisung soll sofort die Methode
mathop aufgerufen werden, und das Ergebnis auf die Console ausgegeben
werden.


Eingabe (Console): 5 * 5
Ausgabe (Console): 5 mal 5 ergibt 25
Eingabe (Colsole): 10 - 2


Ausgabe (Console): 10 minus 2 ergibt 8

Mögl. Lösung:

import java.util.Scanner;

public class Aufgabe2 {

    public static void main(String[] args) {

        System.out.println(mathop(2, 3, '+'));
        System.out.println(mathop(1, 1, '-'));
        System.out.println(mathop(5, 5, '*'));
        System.out.println(mathop(4, 2, '/'));

        Scanner sc = new Scanner(System.in);

        while (sc.hasNext()) {

            int a = sc.nextInt();
            char op = sc.next().charAt(0);
            int b = sc.nextInt();

            System.out.println(mathop(a, b, op));

            if (!sc.hasNextInt() && sc.next().equals("exit"))
                return;
        }
    }

    private static String mathop(int a, int b, char op) {

        String result;

        switch (op) {
            case '+':
                result = a + " plus " + b + " ergibt " + (a + b);
                break;

            case '-':
                result = a + " minus " + b + " ergibt " + (a - b);
                break;

            case '*':
                result = a + " mal " + b + " ergibt " + (a * b);
                break;

            case '/':
                result = a + " durch " + b + " ergibt " + (a / b);
                break;

            default:
                result = "Ungültiger Operator!";
                break;
        }

        return result;
    }
}

mi15b[Bearbeiten | Quelltext bearbeiten]

Adhoc - Aufgaben


Erstellen Sie eine Aufgabe6 und bilden Sie im main
folgende Funktionalität ab (Zahlen raten).
* Verwenden Sie Math.random() um eine ganze Zufallszahl
zwischen 0-99 zu generieren.
* Erstellen Sie eine while-Schleife in der versucht wird die
ganzzahlige Zufallszahl zu erraten.
* Verwenden Sie den Scanner um Zahlen einzulesen.
* Mit "X" soll das Spiel abgebrochen werden.
* Liegt die eingegebene Zahl zwischen [0-99] wird mit
System.out.println() ein Hinweis gegeben, ob die gesuchte Zahl
kleiner bzw. größer ist.
* Ist die eingegebene Zahl kleiner als 0 oder größer als 99 dann wird auf
System.out.println() der User darauf hingewiesen.
* Alle anderen Zeichen oder Zahlen werden mit der Ausgabe


System.out.println("Ungültige Eingabe!") kommentiert.

Mögl. Lösung:

import java.util.Scanner;

public class Aufgabe6 {


    public static void main(String args[]){
        boolean debug = true;

        int zufall = (int) (Math.random()*100);

        Scanner scn = new Scanner(System.in);

        System.out.println("=== Zahlenratespiel ===");
        System.out.println("... vorgegeben wird eine Zahl zwischen 0 und 99,");
        System.out.println("der Spieler muss dies Zahl eraten");
        System.out.println("Beendet wird das Spiel mit X oder x");
        System.out.println();

        if (debug) System.err.println("Debug: Die Zufallszahl lautet " + zufall);


        System.out.print("Bitte Zahl eingeben: ");
        while (scn.hasNext()) {
            if (scn.hasNextInt()) {
                int guess = scn.nextInt();
                if (guess == zufall) {
                    System.out.println("Spiel gewonnen, die Zufallszahl war " + zufall);
                    break;
                } else if (guess > 99 || guess < 0) {
                    System.out.println("Die Zahl " + guess + " liegt außerhalb des Zahlenbereiches 0 bis 99 !!!");
                } else if (guess > zufall) {
                    System.out.println("Die gesuchte Zahl ist kleiner");
                } else if (guess < zufall) {
                    System.out.println("Die gesuchte Zahl ist größer");
                }
            } else {
                String value = scn.next();

                if (value.equals("x") || value.equals("X")) {
                    System.out.println();
                    System.out.println("Spiel abgebrochen, schade.");
                    break;
                } else {
                    System.out.println("Ungültige Eingabe");
                }
            }
            System.out.print("Bitte Zahl eingeben: ");
        }
    }
}

Adhoc Aufgabe 3[Bearbeiten | Quelltext bearbeiten]

di15b und mi15b[Bearbeiten | Quelltext bearbeiten]

Ad-Hoc Aufgabe
Aufgabenblatt 3

Gruppe di15b (und mi15b)
Wintersemester 2015/16

Schreiben Sie eine statische Methode mit der Signatur
public static void numberingLines(int start_number, int number_of_lines)
Diese Methode soll durch Aufruf via
numberingLines(1, 16);
folgende Bildschirmausgabe produzieren:

Das ist Zeile Nummer 1
Das ist Zeile Nummer 2
Das ist Zeile Nummer 3
Das ist Zeile Nummer 4
Das ist Zeile Nummer 5
Das ist Zeile Nummer 6
Das ist Zeile Nummer 7
Das ist Zeile Nummer 8
Das ist Zeile Nummer 9
Das ist Zeile Nummer 10
Das ist Zeile Nummer 11
Das ist Zeile Nummer 12
Das ist Zeile Nummer 13
Das ist Zeile Nummer 14
Das ist Zeile Nummer 15
Das ist Zeile Nummer 16

Verwenden Sie dabei das Konzept der 'Rekursion', und zwar in der Weise,
dass durch jeden Aufruf der Methode numberingLines das anstehende
Problem der Grösse "number_of_lines Zeilen ausgeben" in genau zwei
Teilprobleme mit halber Grösse (also jeweils genau "number_of_lines/2
Zeilen ausgeben") zerlegt wird.

Mögl. Lösung Aufgabe3:

public class main {
    public static void main(String[] args){
        numberingLines(1,16);
    }

    public static void numberingLines(int start_number, int number_of_lines) {
        if(number_of_lines > start_number) {
            numberingLines(start_number, number_of_lines / 2);
            for (int num = number_of_lines / 2 + 1; num <= number_of_lines; num++) {
                System.out.println("Das ist die Zeile Nummer: " + num);
            }
        } else {
            System.out.println("Das ist die Zeile Nummer: " + start_number);
        }
    }
}

Adhoc Aufgabe 4[Bearbeiten | Quelltext bearbeiten]

di15b[Bearbeiten | Quelltext bearbeiten]

U4 - Ad-Hoc Aufgaben
A1 (100%)

Implementieren Sie folgendes unter Verwendung von Rekursion:

Erstellen Sie eine Methode, die einen ganzzahligen Parameter - x, übergeben
bekommt, und ein Dreiecksmuster als String zurückgibt. Das Muster besteht
aus vier Dreiecken die nebeneinander stehen und jeweils durch ein
Leerzeichen voneinander getrennt sind; jedes Dreieck ist jeweils x Zeichen breit
und x Zeichen hoch. Wenn x = 5 gilt, dann wird folgendes Muster
zurückgegeben:


***** *         * *****
 **** **       ** ****
  *** ***     *** ***
   ** ****   **** **
    * ***** ***** *


X = 4 ergibt:


**** *       * ****
 *** **     ** ***
  ** ***   *** **
   * **** **** *


X = 2 ergibt:


**   * **
 * ** ** *


die Methode darf auch zusätzliche Parameter enthalten; es sind auch
zusätzliche Methoden erlaubt.


Mögl. Lösung:

public class AdHoc {

    //repeats a char c times times using recursion
    private static String repeat (char c, int times) {
        //make times positiv
        times = times < 0 ? -times : times;
        return times == 0 ? "" : c + repeat(c, times-1);
    }

    //just a helper
    private static void drawRect (int x) {
        drawRect(x, 1);
    }

    private static void drawRect (int x, int counter) {
        if (counter > x) return;

        System.out.print(repeat(' ', counter));
        System.out.print(repeat('*', x - counter + 1));

        System.out.print(' ');

        System.out.print(repeat('*', counter));
        System.out.print(repeat(' ', x - counter + 1));

        //System.out.print(' ');

        System.out.print(repeat(' ', x - counter + 1));
        System.out.print(repeat('*', counter));

        System.out.print(' ');

        System.out.print(repeat('*', x - counter + 1));
        System.out.print(repeat(' ', counter));

        System.out.println();

        drawRect(x, ++counter);

    }

    //test
    public static void main(String args[]) {
        drawRect(5);
        System.out.println("\n\n");
        drawRect(4);
        System.out.println("\n\n");
        drawRect(2);
        System.out.println("\n\n");
        drawRect(0);
    }
}

mi09b[Bearbeiten | Quelltext bearbeiten]


Ad-Hoc Aufgabe
Aufgabenblatt 4

Gruppe mi09b
Wintersemester 2015/16

a) Deklarieren Sie ein Array von double-Werten. Erlaubt der compiler
nach dieser Deklaratio einen Zugriff auf ein einzelnes Array-Element?
Überprüfen Sie anhand eines Programmcodes ob das bei einer double-
Variablen anders ist.

(10 Punkte)

b) Erzeugen Sie sodann obiges Array mit einer Länge Ihrer Wahl ohne es
zu initialisieren. Versuchen Sie ein einzelnes Array-Element auszu-
geben. Erlaubt das der Compiler bzw. welcher Wert wird angezeigt?

(25 Punkte)

Bitte beachten Sie die Rückseite!

d) In einer Wetterstation wurden für die letzten vier Monate folgende
Temperaturwerte gemessen:

-0.4
12.9
-3.3
21.1

Speichern Sie diese in einem passenden Array. Verwenden Sie eine Schleife
zur automatischen Berechnung und Ausgabe vom arithmetischen Mittel
(hier also die Durchschnittstemperatur), Minimum und Maximum eines
derartigen Arrays. Geben Sie auch die Größe des Arrays über den dafür
vorgesehenen Java-Ausdruck aus.

(45 Punkte)

AdHoc Aufgabe 5[Bearbeiten | Quelltext bearbeiten]

di15b[Bearbeiten | Quelltext bearbeiten]

Implementieren Sie folgende statische Methoden, wobei die als
Parameter übergebenen Arrays nicht verändert werden dürfen.

* createHalveArray hat ein Array (wie von createArray in Aufgabe 3
zurückgegeben) als Parameter und gibt ein neues Array der selben
Länge zurück, wobei die Elemente jeweils den halben Wert des
entsprechenden Elements des übergebenen Arrays haben; das übergebenen
Array darf dabei nicht verändert werden. 30%

* columnLength hat zwei Parameter: ein zweidimensionales array a und
eine ganze Zahl j; columnLength gibt den ersten Index i zurück, bei
dem ein Zugriff a[i][j] nicht mehr erlaubt ist. 30%

Beispiel: Array a enthält:
1 2 3 4
5 6 7
8 9
0 1 2 3
Dann gibt columnLength(a,0) 4 zurück, columnLength(a,1) auch 4,
columnLength(a,2) 2, und columnLength(a,3) 1.

Hinweis: Ob ein Zugriff auf ein Element i eines Arrays x erlaubt
ist, können Sie mit x.length>i feststellen.

* createColumn hat zwei Parameter: ein zweidimensionales Array a und
eine ganze Zahl j; createColumn gibt ein eindimensionales Array b
(mit dem selben Elementtyp wie a) zurück, wobei die Werte b[i] mit
den Werten a[i][j] initialisiert werden; b ist so groß wie möglich,
ohne dass bei der Initialisierung ein Fehler auftritt. 20%

Beispiel: Beim oben genannten Array gibt
createColumn(a,0) ein Array mit den Werten 1 5 8 0 zurück;
createColumn(a,1) ein Array mit den Werten 2 6 9 1 zurück;
createColumn(a,2) ein Array mit den Werten 3 7 zurück;
createColumn(a,3) ein Array mit den Werten 4 zurück.

* createTransposed hat als Parameter ein zweidimensionales Array a,
bei dem kein Unterarray a[i] länger ist als a[i-1]; a[0] ist
beliebig lang. createTransposed gibt ein neues zweidimensionales
Array b zurück, wobei die Zeilen von b so lange sind wie die Spalte
von a und auch die gleichen Werte enthalten (also b[i][j]==a[j][i]). 20%

Beispiel: Array a enthält
1 2 3 4
5 6 7
8 9 0
Dann gibt createTransposed(a) folgendes Array zurück:
1 5 8
2 6 9
3 7 0
4

Hinweis: Sie können in createTransposed die Methode createColumn aufrufen.

Optional (zuerst den Pflichtteil abgeben):

* innerProduct hat als Parameter zwei gleich lange eindimensionales
Arrays a und b und gibt als Resultat das innere Produkt von a und bei
zurück, also die Summe a[i]*b[i] für alle i.

* matrixProduct hat als Parameter zwei rechteckige zweidimensionale
Arrays a und b, wobei a soviele Zeilen hat wie b Spalten und
umgekehrt. Es gibt ein zweidimensionales Array c zurück, wobei
jedes Element c[i][j] das innere Produkt der Zeile a[i] mit der
Spalte createColumn(b,j) ist.

public class AdHoc {

    // debugging on/off - true/false
    static boolean debug = true;

    private static double[] halveArray(double arr[]) {
        double[] result = new double[arr.length];


        for (int i = 0; i < arr.length; i++)
            result[i] = (int) (arr[i] / 2);

        if (debug) {
            System.out.print("\n[debug] halveArray: ");
            for (double i : arr) System.out.print(i + ", ");
            System.out.println();
        }
        return result;
    }

    private static int columnLength(int[][] a, int j) {
        int result = 0;

        for (int i = 0; i < a.length; i++) {
            if (a[i].length>=j+1) {
                result++;
            } else {
                break;
            }
        }
        return result;
    }
    private static int[] createColumn (int[][] a, int j) {
        int x = columnLength(a,j);
        int[] result = new int[x];

        for (int i = 0; i < x; i++) {
            result[i] = a[i][j];
        }

        if (debug) {
            System.out.print("[debug] Array: ");
            for (int i : result) System.out.print(i + ", ");
            System.out.println();
        }
        return result;
    }

    private static int[][] createTransposed(int[][] a) {
        int[][] result = new int[a[0].length][];

        for (int i = 0; i <= a.length; i++) {
            result[i] = createColumn(a,i);
        }

        return result;
    }

    public static void main (String[] args) {
        int[][] a = {   {1,2,3,4},
                        {5,6,7},
                        {8,9},
                        {0,1,2,3} };
        int[][] b = {   {1,2,3,4},
                        {5,6,7},
                        {8,9,0}
                    };
        System.out.println("Test columnLength:");
        System.out.println(columnLength(a,0) + " = 4");
        System.out.println(columnLength(a,1) + " = 4");
        System.out.println(columnLength(a,2) + " = 2");
        System.out.println(columnLength(a,3) + " = 1");

        System.out.println("\nTest createColumn:");
        int test1[] = createColumn(a, 0);
        int test2[] = createColumn(a,1);
        int test3[] = createColumn(a,2);
        int test4[] = createColumn(a,3);

        System.out.println("\nTest createTransposed: ");
        int test5[][] = createTransposed(b);
    }
}

AdHoc Aufgabe 6[Bearbeiten | Quelltext bearbeiten]

di15b[Bearbeiten | Quelltext bearbeiten]

import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

/**
 * Created by Julian on 12/1/15.
 *
 * Ein Buch hat einen Autor, einen Titel, und ein Erscheinungsjahr.
 *
 * * erstellen Sie eine Klasse Book mit passenden Objektvariablen. 25%
 *
 * für die folgenden Methoden erstellen Sie Aufrufe in main(), die diese
 * Methoden aufrufen und sinnvoll testen.
 *
 * * Erstellen Sie einen Konstruktor für die Klasse, mit Autor, titel,
 *  und Erscheinungsjahr als Parameter. 25%
 *
 * * Erstellen Sie eine nicht-statische Methode print() für die Klasse, die
 * Autor, Titel, und Erscheinungsjahr eines Buches ausgibt. 25%
 *
 * * Erstellen Sie eine statische Methode print_books(), die eine queue
 * oder deque von Book-Objekten als Parameter nimmt und ausdruckt. 25%
 *
 * Nachdem Sie die obigen Aufgaben abgegeben haben, verwenden Sie den
 * Rest der Zeit für folgende Aufgaben (bei Schwierigkeiten fragen Sie
 * die tutoren oder Übungsleiter):
 *
 * * Erstellen Sie eine Methode author_books(), die einen Autor und eine
 * queue oder deque von Book-Objekten als Parameter nimmt und die
 * Bücher mit dem übergebenene Autor ausdruckt (und die anderen nicht).
 * Sie können Strings s1 und s2 mit se.equals(s2) vergleichen.
 *
 * * Erstellen Sie eine Methode title_book, die einen Titel und eine#
 * queue oder deque von Book-Objekten als Parameter nimmt und *ein*
 * Buch mit dem übergebenen Titel ausdruckt (oder keines, wenn kein
 * Buch mit dem Titel in der queue/deque ist).
 *
 * * Verwenden Sie eine Map anstatt der queue/deque, mit dem Titel als
 * key, und implementieren Sie title_book() dafür. Welche
 * Einschränkungen gibt es jetzt im Vergleich zu vorher. Ist diese
 * Verwendung von Map sinnvoll? Wäre es sinnvoll, den Autor als key zu
 * verwenden? Warum bzw. warum nicht?
 *
 */

public class Book {
    private String author;
    private String title;
    private int year;

    public Book(String author, String title, int year) {
        this.author = author;
        this.title = title;
        this.year = year;
    }

    public void print() {
        System.out.println("Autor: " + this.author);
        System.out.println("Titel: " + this.title);
        System.out.println("Jahr:  " + this.year);
    }

    public static void print_books(Deque<Book> books) {
        while (!books.isEmpty())
            books.poll().print();
    }


    /* Zusatz */

    public static void author_books(String author, Deque<Book> books) {
        while (!books.isEmpty()) {
            Book temp = books.poll();
            if (temp.author.equals(author)) temp.print();
        }
    }

    public static void title_books(String title, Deque<Book> books) {
        while (!books.isEmpty()) {
            Book temp = books.poll();
            if (temp.title.equals(title)) {
                temp.print();
                break;
            }
        }
    }

    public static void title_books(String title, Map<String, Book> books) {
        books.get(title).print();
    }


    /* helper-Methode, gibt eine queue mit ausgewählten büchern aus */
    private static Deque<Book> helper() {
        Book book1 = new Book("Orwell, George", "1984", 1000);
        Book book2 = new Book("Orwell, George", "Animal Farm", 1000);
        Book book3 = new Book("Doctorow, Cory", "Little brother", 1000);
        Book book4 = new Book("Doctorow, Cory", "Little brother", 1000);

        Deque<Book> books = new LinkedList<>();

        books.offer(book1);
        books.offer(book2);
        books.offer(book3);
        books.offer(book4);

        return books;
    }

    public static void main(String[] args) {
        String xxx = "\n<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>-<>";
        System.out.println("Test print_books(Deque<Book> books):" + xxx);
        print_books(helper());


        System.out.println("\nTest author_books():" + xxx);
        author_books("Orwell, George", helper());


        System.out.println("\nTest title_books(String title, Deque<Book> books):" + xxx);
        title_books("Little brother", helper());


        System.out.println("\nTest title_books(String title, Map<String, Book> books):" + xxx);
        Map<String, Book> map = new HashMap<>();
        Deque<Book> books = helper();
        map.put("1984", books.poll());
        map.put("Animal Farm", books.poll());
        map.put("Little brother", books.poll());
        // folgendes ist überflüssig, da Keys einmalig sind -> eintrag mit "Little brother" würde überschrieben werden
        // map.put("Little brother", books.poll());

        title_books("1984", map);
    }
}

Mi13b[Bearbeiten | Quelltext bearbeiten]

(1): 30% Implementieren der Klasse Frage.
Für eine Frage bitte einen Konstruktor implementieren, der eine Frage und vier Antwortmöglichkeiten
sowie einen Integer (zwischen 1 und 4) für die richtige Antwort enthält.
Implementieren Sie die Methode toString() und boolean isCorrectAnswer(int).
(2): 40% Implementieren der Klasse Quiz.
Die Klasse Quit soll Objekte vom Typ Fragen übergeben bekommen.
Es soll mindestens 5 Fragen vom PK Stoff gefragt werden.
Implementieren Sie die Methoden: answer(int) // schaltet auch intern auf die nächste Frage um
toString() /* Gibt aktuelle Frage aus */ boolean hasNext(), boolean hasWon()
(3): 30% Implementieren Sie eine User-Interaktion:
Beim Abspielen des Quizzes wird Usern so lange eine neue Frage gezeigt, bis sie eine
falsch beantwortet wurde oder alle richtig beantwortet wurden.
(Zusatzaufgaben):
Zeige die Fragen zufällig an und implementieren Sie einen 50/50 Joker.
Benutze kein Array, sondern Queue/Deque/Map.

public class Aufgabe1 {

    public static void main(String[] args) {
        Quiz q = new Quiz();
        q.startQuiz();
    }
}

/**
 * Created by Flo on 12/2/15.
 */
public class Frage {

    public String question;
    private int correct;
    public String[] answers;

    public Frage(String question, int correct, String answer1, String answer2, String answer3, String answer4) {
        if(correct < 1 || correct > 4) throw new IllegalArgumentException("correct must be between 1 and 4");

        this.question = question;
        this.correct = correct;
        answers = new String[]{answer1, answer2, answer3, answer4};
    }

    public boolean isCorrectAnswer(int answerNum) {
        return answerNum == correct;
    }

    public String toString() {
        String s = "";
        for(int i = 0; i < answers.length; i++) {
            s += "Answer "+ i + ": " + answers[i];
        }
        return "Corect= " + correct + s;
    }
}

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

/**
 * Created by Flo on 12/2/15.
 */
public class Quiz {

    private Queue<Frage> questions;
    private boolean hasWon;

    public Quiz() {
        hasWon = false;
        questions = new LinkedList<Frage>();

        questions.add(new Frage("Welche der folgenden Zuweisungen ist fehlerhaft?", 4, "1: long l = 1244L;", "2: double d = 1284.D;", "3: double d2 = 1244.0D;", "4: float f = 12.0;"));
        questions.add(new Frage("Was ist der hテカchste Wert, den ein Integer annehmen kann?", 1, "1: 2^31-1", "2: 2^32-1", "3: 2^16;", "4: 2^16-1"));
        questions.add(new Frage("Welche der folgenden Zuweisungen ist fehlerhaft?", 2, "1: double d = 13.0 + 2;", "2: int i = 13 + 12.0f;", "3: char c = 12+12;", "4: char c2 = 'A';"));
    }

    public void startQuiz() {
        int curIn;
        Scanner scanner = new Scanner(System.in);
        //If questions are available
        if(printQuestion()) {
            while (scanner.hasNext()) {
                if (scanner.hasNextInt()) {
                    curIn = scanner.nextInt();
                    if(questions.element().isCorrectAnswer(curIn)){
                        hasWon = true;
                        answer(curIn);
                        if(!printQuestion()) {
                            quizOver();
                        }
                    } else {
                        quizOver();
                        return;
                    }

                }
            }
        } else {
            quizOver();
        }
    }

    public void quizOver() {
        System.out.println("Hat gewonnen? " + hasWon);
    }

    public boolean printQuestion() {
        if(!hasNext()) {
            return false;
        }
        System.out.println(questions.element().question);
        String[] answers = questions.element().answers;
        for(int i = 0; i < answers.length; i++) {
            System.out.println(answers[i]);
        }
        return true;
    }

    public void answer(int answerNum) {
        boolean isCorrect = questions.poll().isCorrectAnswer(answerNum);
        System.out.println("Answer " + answerNum + " is " + isCorrect );
    }

    public boolean hasNext() {
        return questions.size() > 0;
    }

    public boolean hasWon() {
        return hasWon;
    }

    public String toString() {
        return questions.element().toString();
    }
}

AdHoc Aufgabe 7[Bearbeiten | Quelltext bearbeiten]

AdHoc Aufgabe 8[Bearbeiten | Quelltext bearbeiten]

di13b[Bearbeiten | Quelltext bearbeiten]


1) 25% Schreiben Sie ein Interface IntListable mit den Methoden
int getFirst()
IntListable getRest()

Implementieren Sie zwei Klassen, die das Interface implementieren:
IntListEmpty
mit Konstruktor IntListEmpty()
getFirst() und getRest() liefern Beliebiges
IntListElement
mit Konstruktor IntListElement(int v, IntListable n)
getFirst() liefert v, und getRest() liefert n.

Schreiben Sie in main(), das ein IntListable mit drei Elementen erzeugt.

Für die folgenden Aufgaben erweitern Sie das main() passend, um die
Methoden zu testen.

2) 25% Implementieren Sie toString() für die Klassen, die IntListable
implementieren. Verwenden Sie dabei kein if, ?...:, o.ä.

3) 25% Implementieren Sie equals(Object o) für die Klassen, die
IntListable implementieren, sodass es true genau dann liefert, wenn
die verglichenen Listen mit gleichen Konstruktor-Aufrufen aufgebaut
wurden. Folgendes soll also true liefern:

(new IntListElement(1, new IntListElement(2, new ListEmpty()))).equals
(new IntListElement(1, new IntListElement(2, new ListEmpty())))

4) 25% Definieren Sie eine Methode contains(int key) in IntListable
und implementieren Sie contains für diie Klassen, die Intlistable
implementieren. Verwenden Sie dabei kein getClass() oder instanceof.

(new IntListElement(1, IntListElement(2, new IntListEmpt()))).contains(2)

sollte true liefern und

(new IntListElement(1, IntListElement(2, new IntListEmpt()))).contains(3)

sollte false liefern.

Nachdem Sie das abgegeben haben, schreiben Sie eine Klasse für einen
binären Suchbaum mit passenden Methoden und Unterklassen Ihrer Wahl,
und zwar so, dass Sie beim Baumtraversieren ohne expliziten Vergleich
auf null auskommen. Ist es dabei sinnvoller, eine Unterklasse für
Blätter zu haben, eine für einen leeren Baum, oder beides?

InsListable.java

public interface IntListable {
    int getFirst();
    IntListable getRest();
    boolean contains(int key);

}

IntListEmpty.java

public class IntListEmpty implements IntListable {


    IntListEmpty() {

    }

    @Override
    public int getFirst() {

        return 0;
    }

    @Override
    public IntListable getRest() {
        return null;
    }

    @Override
    public boolean contains(int key) {
        return false;
    }

    @Override
    public String toString() { return "empt";}

    public boolean equals (Object o) {
        // same object
        if (this == o)
            return true;
        // null or diffrent class
        if (o == null || this.getClass() != o.getClass())
            return false;

        return true;
    }
}

IntListElement.java

public class IntListElement implements IntListable {
    private int value;
    private IntListable n;

    IntListElement(int v, IntListable n) {
        this.value = v;
        this.n = n;
    }

    @Override
    public int getFirst() {
        return this.value;
    }

    @Override
    public IntListable getRest() {
        return this.n;
    }

    @Override
    public String toString() {
        return this.value + ", " + this.n;
    }

    public boolean equals (Object o) {
        // same object
        if (this == o)
            return true;
        // null or diffrent class
        if (o == null || this.getClass() != o.getClass())
            return false;

        // dummy with cast
        IntListElement tmp = (IntListElement) o;

        if (this.value != tmp.value)
            return false;
        if (tmp.getRest() != null && this.getRest() != null) {
            return this.getRest().equals(tmp.getRest());
        }

        return true;
    }

    @Override
    public boolean contains(int key) {
        if (this.getFirst() == key) {
            return true;
        } else {
            return this.getRest().contains(key);
        }
    }

    public static void main(String[] args) {

        IntListable one = new IntListElement(1,new IntListElement(2, new IntListElement(3, new IntListEmpty())));
        IntListable two = new IntListElement(1,new IntListElement(2, new IntListElement(3, new IntListEmpty())));
        IntListable three = new IntListElement(1,new IntListElement(2, new IntListElement(4, new IntListEmpty())));

        System.out.println(one);

        System.out.println("\n****equals****");
        System.out.println(one.equals(two));
        System.out.println(one.equals(three));

        System.out.println("\n***contains***");
        System.out.println(one.contains(3));
        System.out.println(one.contains(4));
        System.out.println(three.contains(4));
    }
}

mi09[Bearbeiten | Quelltext bearbeiten]

AD HOC Aufgabe 8:


Der Flughafen Mistelbach (mit eienr Rollbahn der Länge 2500 m) verwaltet
alle Fluggeräte mit einem Java-Programm.

(20 Punkte) Schreiben Sie ein Interface Aircraft', welches einige grundlegende
Eigenschaften eines Fluggerätes definiert, wie name,
maxNumberOfPassengers, weight (in Tonnen)

(20 Punkte) Schreiben Sie eine Klasse Helicopter, welche das Interface
Aircraft implementiert. Implementieren Sie auch eine sinvolle toString
Methode.

(30 Punkte) Schreiben Sie eine Klasse Airplane, welche das Interface Aircraft
implementiert. Weiters hat die Klasse Airplane noch eine Methode
neededRunwayLength, welche die benötigte Länge der Rollbahn errechnet
(Länge = weight (in Tonnen) * 40m + numberOfPassengers * 5m).
Implementieren Sie auch eine sinnvolle toString Methode.

(30 Punkte) Schreiben Sie eine Klasse FleetManager, die eine Menge von
Aircrafts verwalten kann. Die Klasse hat mehrere Methoden.
addHelicopter(...), addAirplane(...), ... Die Methode allowedInMistelbach(...)
gibt aus, ib ein vollbesetztes Flugzeug in Mistelbach (auf Grund der
vorhandenen/benötigten Länge der Rollbahn) starten/landen darf. Die
Methode allowedInMistelbachForMaintenance(...) gibt aus, ob ein leeres
Flugzeug in Mistelbach (zur Wartung) starten/landen darf. Implementieren Sie
auch eine sonnvolle toString Methode.

Zusatzfrage: kann man auch ein allgemeines addAircraft(...) verwenden?

Daten (name, maxNumberOfPassengers, weight):

Flugzeuge:
Augustus, 200, 60
Bertus, 100, 40
Cirrus, 50, 20

Hubschrauber:
Zanda, 5, 7
Yippa, 4, 5
Xena, 30, 30

Aircraft.java

/**
 * Created by daJu on 13.01.2016.
 */
public interface Aircraft {
    String getName();
    int getMaxNumberOfPassengers();
    int getWeight();

}

Helicopter.java

/**
 * Created by daJu on 13.01.2016.
 */
public class Helicopter implements Aircraft {
    private String name;
    private int maxNumberOfPassengers, weight;

    Helicopter(String name, int maxNumberOfPassengers, int weight) {
        this.name = name;
        this.maxNumberOfPassengers = maxNumberOfPassengers;
        this.weight = weight;
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public int getMaxNumberOfPassengers() {
        return this.maxNumberOfPassengers;
    }

    @Override
    public int getWeight() {
        return this.weight;
    }

    @Override
    public String toString() {
        return "(" + this.getClass().getName() + ") " + this.name + ", " + this.maxNumberOfPassengers + ", " + this.weight;
    }
}

Airplane.java

/**
 * Created by daJu on 13.01.2016.
 */
public class Airplane implements Aircraft {
    private String name;
    private int maxNumberOfPassengers;
    private int weight;

    Airplane (String name, int maxNumberOfPassengers, int weight) {
        this.name = name;
        this.maxNumberOfPassengers = maxNumberOfPassengers;
        this.weight = weight;
    }

    public int neededRunwayLength(int numberOfPassengers) {
        return this.weight * 40 + numberOfPassengers * 5;
    }


    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public int getMaxNumberOfPassengers() {
        return this.maxNumberOfPassengers;
    }

    @Override
    public int getWeight() {
        return this.weight;
    }

    @Override
    public String toString() {
        return "(" + this.getClass().getName() + ") " + this.name + ", " + this.maxNumberOfPassengers + ", " + this.weight;
    }
}

Fleetmanager.java

import java.util.ArrayList;

/**
 * Created by daJu on 13.01.2016.
 */
public class Fleetmanager {
    final int runwayMistelbach = 2500;

    ArrayList<Aircraft> list = new ArrayList<Aircraft>();

    public void addHelicopter(String name, int maxNumberOfPassengers, int weight) {
        this.list.add(new Helicopter(name, maxNumberOfPassengers, weight));
    }
    // alternative
    public void addHelicopter(Helicopter h) {
        this.list.add(h);
    }

    public void addAirplane(String name, int maxNumberOfPassengers, int weight) {
        this.list.add(new Airplane(name, maxNumberOfPassengers, weight));
    }
    // alternative
    public void addAirplane(Airplane a) {
        this.list.add(a);
    }

    public boolean allowedInMistelbach(Airplane a) {
        return a.neededRunwayLength(a.getMaxNumberOfPassengers()) <= runwayMistelbach;
    }

    public boolean allowedInMistelbachForMaintenance(Airplane a) {
        return a.neededRunwayLength(0) <= runwayMistelbach;
    }

    public String toString() {
        String result = "";
        for (Aircraft val : list) {
            result += val + "\n";
        }
        return result;
    }

    public static void main(String[] args) {
        // for testing
        Fleetmanager fm = new Fleetmanager();

        fm.addAirplane("Augustus", 200, 60);
        // alternative
        fm.addAirplane(new Airplane("Bertus", 100, 40));
        fm.addAirplane("Cirrus", 50, 20);

        fm.addHelicopter("Zanda", 5, 4);
        fm.addHelicopter(new Helicopter("Yippa", 4, 5));
        fm.addHelicopter("Xena", 30, 30);

        System.out.println("Fluggeraete in Mistelbach:");
        System.out.println(fm);

        for (Aircraft val : fm.list) {
            if (val.getClass().getName().equals("Airplane")) {
                System.out.println(val.getName() + " is allowed to start/land in Mistelbach:    " + fm.allowedInMistelbach((Airplane) val));
                System.out.println(val.getName() + " is allowed to be maintained in Mistelbach: " + fm.allowedInMistelbachForMaintenance((Airplane) val));
                System.out.println();
            }
        }
    }

}
Output:


Fluggeraete in Mistelbach:
(Airplane) Augustus, 200, 60
(Airplane) Bertus, 100, 40
(Airplane) Cirrus, 50, 20
(Helicopter) Zanda, 5, 4
(Helicopter) Yippa, 4, 5
(Helicopter) Xena, 30, 30

Augustus is allowed to start/land in Mistelbach: false
Augustus is allowed to be maintained in Mistelbach:true

Bertus is allowed to start/land in Mistelbach: true
Bertus is allowed to be maintained in Mistelbach:true

Cirrus is allowed to start/land in Mistelbach: true
Cirrus is allowed to be maintained in Mistelbach:true