Java-SemesterTest ohne Lösung :(

Diskutiere Java-SemesterTest ohne Lösung :( im Java Basics - Anfänger-Themen Bereich.
ZH1896ZH

ZH1896ZH

also...ich werde die Prüfung erstmal selber lösen und dann meine Lösung hier ins Forum posten. Haltet die Ohren steif liebe Freunde.
yoyo liebe Leute,
Ich habe nun endlich mal Zeit gefunden die Prüfung zuerst selbst einmal zu lösen...war gar nicht mal so schwierig wie gedacht :)
Trotzdem habe ich noch ein paar Unsicherheiten entdeckt:

Aufgabe 1:
a4 --> Es sei String s = "2 * 3 = " + 2*3; dann zeigt s auf die Zeichenkette "2 * 3 = 2 * 3". Wieso macht der Compiler aus diesem String 2*3=6 ? Verstehe nicht ganz was hier läuft.
d3 --> Wird generell immer zum nächst-tieferen Int-Wert abgerundet?
b1 --> Kann mir jemand ein Beispiel für eine Mehrfachverebung in Java geben?

Aufgabe 2:
3. Wieso ist die Ausgabe BC und nicht B?
7. Meine Lösung ist: 1 2 2. Korrekt wäre aber:
1
2
1
1
2
3
Wieso all diese Zeilenumbrüche wenn da kein println steht?
Verstehe auch nicht wieso es mehr als 3 Ausgaben gibt, da ein Array ja nicht vergrössert werden kann...

Aufgabe 8:
Mit 3./4./5./6. hatte ich Probleme. Besonders wusste ich nicht wie die Methode setOwner() auszusehen hat.
Auch wie es möglich ist zwei Objekte anhand der Variable amount in einer ArrayList zu sortieren.
Das wäre mein Lösungsansatz.
Java:
package Aufgabe8;

import java.text.DecimalFormat;

public class Account implements Comparable<Account> {
    private static int counter = 0;
    private String acctNumber;
    private Customer[] owners;
    private double amount;

    public Account(double amount) {
        this.amount = amount; //steht nicht in der Aufgabenstellung
        counter++;
        DecimalFormat fmt = new DecimalFormat("0000");
        this.acctNumber = fmt.format(counter);
    }

    public boolean setOwner(Customer... customers) { //kein Plan, was machen..
        return false;
    }

    @Override
    public int compareTo(Account o) {
        int a = (int) this.amount - (int) o.amount; // wieso reicht hier eine Cast-Klammer nicht aus??
        return a;
    }

    public String toString() { //steht nicht in der Aufgabenstellung
        return this.amount + "  " + this.acctNumber;
    }

}
Wäre echt froh um ein paar Feedbacks.
 
J

JustNobody

Also schauen wir uns einmal die Punkte der Reihe nach an:
String s = "2 * 3 = " + 2 * 3;
==> https://introcs.cs.princeton.edu/java/11precedence/

Bei d3: Bei dem Cast zu einer Ganzzahl werden die Nachkommastellen abgeschnitten.

b1: Nein, Java kennt keine Mehrfachvererbung, daher gibt es da auch kein Beispiel für.

Dann ist die Ausgabe "BC" und nicht nur "B", weil da kein break; steht. Dadurch "fällt er durch".

Bezüglich der 7. Aufgabe kann ich Dir nicht folgen. Die Ausgabe ist einfach 1 2 3 - also keine Zeilenumbrüche und auch nur genau diese drei Zahlen. Mehr Zahlen kann es da auch nicht geben, denn Du hast ein Array aus 3 Elementen. Nun werden diese Elemente verändert: Das 2. Element bekommt das erste dazu addiert: 1+1 = 2. Dann bekommt das 3. element (1) das zweite Element (2) dazu => 3. Somit hat man das Array { 1, 2, 3 } und da wird dann ausgegeben.

Aufgabe 8 muss ich mir selbst erst ansehen um dazu etwas näheres sagen zu können....
 
J

JustNobody

Das mit den Ownern setzen ist doch genau beschrieben:
"Schreiben Sie eine Methode setOwner, welche beliebig viele Objekte vom Typ Customer als Parameter entgegennehmen kann (die Details der Klasse Customer müssen Sie hierzu nicht kennen). Falls die Instanzvariable owners noch undefiniert ist (d.h., wenn diese null ist), sollen die übergebenen Customer Objekte im Array owners gespeichert werden und es wird true zurückgegeben. Andernfalls wird owners nicht geändert und es soll false zurückgegeben werden."

Also wir prüfen owners. Wenn owner null ist, dann geben wir false zurück. Ansonsten sollen die Owners gespeichert werden.
Wie speicherst Du denn Elemente in einem Array? Das ist ja eigentlich unkompliziert. Woran scheitert es? Was dürfen wir näher erläutern?
 
M

Maliko

Ach das ist der Grund dafür dass es keine Mehrfachvererbung in Java gibt. Man lernt doch nie aus (auch wenn ich mich grad frage warum das damals in der Ausbildung nie dran kam). Macht aber auf jedem Fall Sinn.
 
J

JustNobody

Der (oder ein?) Grund ist dieser hier
Das ist der Hauptgrund. Aber es sollte einleuchtend sein, dass ich bei Multiple Inheritance nicht erst eine gemeinsame Basisklasse (So dass diese Raute, die dann für den Namen Diamant sorgte) notwendig ist, um in eine Problemsituation zu geraten.

Es reicht ja schon aus, wenn man zwei Basis-Klassen hat, die dann eine von der Signatur her identische Funktion definiert.

Das Diamond-Problem ist somit lediglich die "auf die Spitze" getriebene Problematik, die dann als Grund herangezogen wird eben gegen Multiple Inheritance. Aber in dem Moment, wo man in C++ entwickelt, sollte man sich das generell gut überlegen, was man macht. Auch wenn man eben gemeinsame Basisklassen bei abgeleiteten Klassen vermeidet (=> Also kein Diamond-Problem), kann man in Probleme kommen und es kann schnell unschöner Code entstehen / notwendig sein.

Beim Design sollte man daher generell immer gut überlegen, wie man die Klassenhirarchie aufbaut. Aber das ist in Java ja auch nicht anders - da ist Inheritance ja auch nicht immer erste Wahl (siehe z.B. "Composition over Inheritance"). Und es gibt auch Möglichkeiten, Funktionalität unabhängig zu gestalten (Strategy Muster).

Wenn man hier dann z.B. C++ Tutorials betrachtet, dann findet man das ähnlich beschrieben, z.B.:
https://www.learncpp.com/cpp-tutorial/117-multiple-inheritance/
 
ZH1896ZH

ZH1896ZH

Also schauen wir uns einmal die Punkte der Reihe nach an:
String s = "2 * 3 = " + 2 * 3;
==> https://introcs.cs.princeton.edu/java/11precedence/

Bei d3: Bei dem Cast zu einer Ganzzahl werden die Nachkommastellen abgeschnitten.

b1: Nein, Java kennt keine Mehrfachvererbung, daher gibt es da auch kein Beispiel für.

Dann ist die Ausgabe "BC" und nicht nur "B", weil da kein break; steht. Dadurch "fällt er durch".

Bezüglich der 7. Aufgabe kann ich Dir nicht folgen. Die Ausgabe ist einfach 1 2 3 - also keine Zeilenumbrüche und auch nur genau diese drei Zahlen. Mehr Zahlen kann es da auch nicht geben, denn Du hast ein Array aus 3 Elementen. Nun werden diese Elemente verändert: Das 2. Element bekommt das erste dazu addiert: 1+1 = 2. Dann bekommt das 3. element (1) das zweite Element (2) dazu => 3. Somit hat man das Array { 1, 2, 3 } und da wird dann ausgegeben.

Aufgabe 8 muss ich mir selbst erst ansehen um dazu etwas näheres sagen zu können....
Alles klar danke für Deine Erklärungen. Ich weiss jetzt, was mein Fehler war...ich habe die zwei for-Schleifen miteinander verschachtelt und println statt print drin gehabt. Darum den nicht-nachvollziehbaren Output.
 
ZH1896ZH

ZH1896ZH

Das mit den Ownern setzen ist doch genau beschrieben:
"Schreiben Sie eine Methode setOwner, welche beliebig viele Objekte vom Typ Customer als Parameter entgegennehmen kann (die Details der Klasse Customer müssen Sie hierzu nicht kennen). Falls die Instanzvariable owners noch undefiniert ist (d.h., wenn diese null ist), sollen die übergebenen Customer Objekte im Array owners gespeichert werden und es wird true zurückgegeben. Andernfalls wird owners nicht geändert und es soll false zurückgegeben werden."

Also wir prüfen owners. Wenn owner null ist, dann geben wir false zurück. Ansonsten sollen die Owners gespeichert werden.
Wie speicherst Du denn Elemente in einem Array? Das ist ja eigentlich unkompliziert. Woran scheitert es? Was dürfen wir näher erläutern?
Habe es so gelöst, ist dies in deinen Augen korrekt?

Java:
    public boolean setOwner(Customer... owners) { // langsam hab ich einen Plan...
        if (this.owners == null) {
            for (int i = 0; i < owners.length; i++) {
                this.owners[i] = owners[i];
            }
            return true;
        } else
            return false;
    }
 
ZH1896ZH

ZH1896ZH

Kann mir noch jemand sagen, wie ich bei Aufgabe 8.6. in einer ArrayList zwei Objekte gemäss der Variablen accounts sortieren kann? Ich hab keinen Plan, wie ich das anstellen soll...

12808

12809
 
J

JustNobody

Habe es so gelöst, ist dies in deinen Augen korrekt?

Java:
    public boolean setOwner(Customer... owners) { // langsam hab ich einen Plan...
        if (this.owners == null) {
            for (int i = 0; i < owners.length; i++) {
                this.owners[i] = owners[i];
            }
            return true;
        } else
            return false;
    }
Wenn this.owners null ist, wird ein Zugriff auf owners nicht gehen. Somit würde da noch eine Sache fehlen.

Edit: da zwei owners in der Methode sind, noch das this. hinzu gefügt.
 
ZH1896ZH

ZH1896ZH

Bedenke auch, dass du nach "amount" sortieren sollst. Ich hab mir nicht alles durchgelesen, aber kontrollier mal, ob da auch so ist.
Bedenke auch, dass du nach "amount" sortieren sollst. Ich hab mir nicht alles durchgelesen, aber kontrollier mal, ob da auch so ist.
Hab es getestet..es wird nach der Variable amount sortiert. Wenn ich jetzt ein String ownerName in den Konstruktor reinnehme sortiert die Methode nach ownerName, wieso das so ist weiss ich nicht. Gibt es eine Möglichkeit, wie man das "steuern" kann.
 
Thema: 

Java-SemesterTest ohne Lösung :(

Passende Stellenanzeigen aus deiner Region:
Anzeige

Anzeige

Anzeige
Oben