Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallöchen ich bins schonwieder, :toll:
diesmal bin ich dabei ein Dekorator Muster zu schreiben.
Der Dekorator der hier zu Implementieren bleibt soll Rabatt heißen und alle Objekte die
Betrag implementieren Dekorieren können und eine ganzzahligen Prozentsatz vom Preis abziehen.
Auf dem Papier dachte ich es sollte so funktionieren aber der Compiler gibt ne Fehlermeldung, die leider nichts aussagt da mein Compiler irreparabel kaputt zu sein scheint. Aber hier ist mein Versuch:
Ich freu mich auf eure Antworten ^^
Java:
/*für neuankömmlinge geändert*/
public class Rabatt extends Preis
{
public Preis preis; int rabatt =0;
public Rabatt(Preis preis,int a){
this.preis=preis;
rabatt = a;
}
public int berechneBetrag(){
return preis.getBetrag()*(1-(rabatt/100));
}
}
Das Vorgegebene Interface und die vorgegebene Klasse.
Java:
public interface Betrag {
int berechneBetrag();
}
Java:
public class Preis implements Betrag {
int derPreis;
public Preis(int p) { derPreis = p>=0 ? p : 0; }
public int berechneBetrag() { return derPreis; }
}
für interessierte hier die Aufgabestellung:
Code:
Gegeben sind das Interface Betrag und die Klasse Preis. Programmieren Sie eine Klasse
Rabatt, die jedes Objekt dekorieren kann, das zu einer Klasse gehört, die Betrag implementiert.
Die Klasse Rabatt soll einen ganzzahligen Prozentsatz verwalten, der beim Aufruf der Methode
berechneBetrag von dem berechneten Betrag des dekorierten Objekts abgezogen wird.
willst du die Fehlermeldung einfach nicht posten oder hast du tatsächlich kein laufendes Java bei dir?
im letzteren Fall installiere das doch erstmal neu oder kaufe dir einen (anderen) Computer bevor hier jede Arbeit anfangen kann?
in Anbetracht dieses etwas dreisten Anteils vorerst nach Hausaufgaben verschoben,
wenn auch sonst auf etwas höheren Niveau als die meisten reinen Anfragen in diesem Bereich
Da ist wohl einiges schief gelaufen. Wo wird die Variable
Code:
preis
denn deklariert? Und wieso denn
Code:
a
?
Code:
a
ist eine lokale Variable im Konstruktor, wie willst du denn dadrauf zugreifen? Übrigens übergibst du ja genau deshalb den Wert dieser Variable an eine andere Variable, damit sie fürs Objekt nutzbar ist...
sorry hab wieder eine Variante die eigentlich anders aussah nach rumbasteln hier falsch gepostet.
Die Fehlermeldung enthält leider nur den Pfad zu der .java Datei das liegt an meiner Programmierumgebung das hat auch neuinstallieren nicht ändern können. Ich hab versucht einfach mal mit javac zu compilieren aber dann werden die Klassen nich automatisch importiert und solche Sachen und das zu lernen war bis jetzt mehr Aufwand als einfach den Fehler ohne Aussagekräftige Fehlermeldung zu finden.
so sollte der Adapter eigentlich aussehen:
Java:
public class Rabatt extends Preis
{
public Preis preis; int rabatt =0;
public Rabatt(Preis preis/*hier stand kurz Preis wird nachträglich geändert*/,int a){
this.preis=preis;
rabatt = a;
}
public int berechneBetrag(){
return preis.getBetrag()*(1-(rabatt/100));
}
}
PS: Das hier ist keine Hausaufgabe sowas bekommen wir nicht ich versuche einfach nur zu verstehen warum mein Compiler das hier nicht Compilieren will, die Aufgabe ist aus ner Altklausur
dein Programm ist ungeeignet, den Compiler (oder genauer eine noch nicht einmal genannte Entwicklungsumgebung?) zu testen,
es sei denn es gibt speziell dort Fehler und anderswo nicht,
fange mit
Java:
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
an, geht das? baue verschiedene Fehler ein, falsche Klassennamen, Aufrufe, Klammern usw.,
teste mit mehreren Klassen wenn das alles geht usw., poste Screenshots
Wenn das Programm richtig ist geht es auch nur Fehlermeldungen werden halt nicht als Fehlermeldung ausgegeben, nur Laufzeitfehler bzw verursachte Exceptions werden richtig benannt.
Sorry falls ich verwirrung stifte ich werde mir mal angucken wie ich das mit javac hinbekomme, dann kann ich im Zweifel daher ne Fehlermeldung bekommen die Sinn macht.
in Anbetracht deiner sonstigen Posting will ich mal extra Arbeit machen und selber einen Screenshot posten wie das ganze bei mir aussieht (beachte die exakten Fehlermeldungen!),
freilich nur mit kopierten Code in einer Klasse,
was du mit mehreren Dateien, packages usw. alles falsch machen kannst ist dabei nicht berücksichtigt
wenn du Hilfe zu deinem Compiler-Problem willst, musst du viele viele viele viele viele viele viele viele viele Informationen posten,
oder gleich Eclipse bzw. vergleichbares installieren falls noch nicht vorhanden
okay ich werd mich jetzt erstmal darum kümmern das ich vernünftige Fehlermeldungen bekomme, das geht so nicht weiter, auch wenn ich eigentlich keine zeit für sowas hab.
PS: danke für den screenshot dachte mir schon das Preis zu subclassen hier falsch ist und ich eigenlich Betrag implementieren muss, das gibt zwar auch wieder irgend nen Fehler aber.. wie gesagt das regel ich jetzt erstmal
okay ich werd mich jetzt erstmal darum kümmern das ich vernünftige Fehlermeldungen bekomme, das geht so nicht weiter, auch wenn ich eigentlich keine zeit für sowas hab.
Nein so war das natürlich nicht gemeint ich bin nur gerade am lernen und mich jetzt mit sowas zu beschäftigen und zwei Stunden mit einem Problem zu ringen weil ich keine Fehlermeldungen hab die Sinn machen ist da einfach doof.
Aber jetzt hab ich nen anderen Editor der mir direkt javac Fehlermeldungen gibt jetzt kanns endlich weitergehen^^.
nur um Missverständnissen vorzubeugen: Danke an alle für ihre Hilfe und Zeit !
das funktioniert eben nur wenn man konsequent aufs Interface setzt:
Java:
Betrag b = new Preis(5);
b = new Rabatt(b, 5);
wobei du dann Rabatt evtl. noch umbauen musst, damit dann da ein beliebiges Betrag-Objekt übergeben kann,
nicht nur einen Preis (wie in Dow Jones Posting bereits angedeutet),
wenn Rabatt nur Preis akzeptiert, dann ist es relativ akzeptabel, dass Rabatt auch von Preis erbt
sauber jetzt gehts alles hier die Finalen klassen:
Danke für die Geduld ^^
Java:
public interface Betrag {
int berechneBetrag();
}
Java:
public class Preis implements Betrag{
int derPreis;
public Preis(int p) { derPreis = p>=0 ? p : 0; }
public int berechneBetrag() { return derPreis; }
}
Java:
public class Rabatt implements Betrag
{
public Betrag preis; int rabatt =0;
public Rabatt(Betrag preis,int a){
this.preis=preis;
rabatt=a;
}
public int berechneBetrag(){
return preis.berechneBetrag()*(1-(rabatt/100));
}
}
Java:
public class Test{
public static void main (String[] args){
Betrag p = new Preis(5);
System.out.println("Preis : "+p);
p = new Rabatt(p,5);
System.out.println("Mit Rabatt"+p);
}
}
Dann solltest Du Dich mal mit den Basics des Aufbaus eines Java-Programms auseinander setzen !!
Jedes Programm benötigt eine main-Methode mit diesem Aufbau, bei dem im String-Array die Argumente ans Programm übergeben werden (können) .....
Siehe bspw. hier: Applikationen