classInt{double m_wert1 ;double m_wert2[]=newdouble[1];double m_wert3;Int(double wert1 ){
m_wert1=wert1;}doubleadd(double k ){
m_wert1 = m_wert1+ k;return m_wert1;}}publicclassUE8Aufgabe1{publicstaticvoidmain(String[] args){
IO.println(newInt(8).add(IO.readDouble("geben sie DOI eine zahl ein")).add(-2));}}
Also die Variablen sind noch nich alle belegt und der Array auch nich, brauch ich noch später
hmm mein problem ist eher , wenn ich die MEthode add(-2) aufrufe dann bekomme ich folgenden Fehler : cannot invoke add(int) to the primitive type double
Aber wenn die MEthode das erste mal funktioniert, warum nich das zweite mal?
Außerdem sind doch alle meine Variablen double werte .
beim ersten Mal:
> new Int(8).add
wird add an einem Int-Objekt aufgerufen,
beim zweiten Mal
> new Int(8).add(...).add(-2)
am Rückgabewert von add, also double, double hat aber eine derartige Methode nicht, an double kann man gar nix aufrufen,
wie die Fehlermeldung zweifelsfrei sagt
Int x =newInt(8);double d = x.add(IO.readDouble("geben sie DOI eine zahl ein"));
d.add(-2);
IO.println(??);
Zeile 3 geht nicht, da willst du vielleicht x.add(-2); schreiben,
in einer Zeile ist das nicht zu machen, falls du nicht den Rückgabewert von add auf Int ändern willst
also unsere Vorgabe sah so aus, und wir müssen das jetzt realisieren.
sprich ich habe einen Wert 8 dazu addiere ich mit der Methode eine beliebige zahl , und davon subtrahiere ich die 2 , also die vorgegebene Zeile muss sich nachher im Programm genauso später wiederfinden.
hmm vll ist das problem jetzt deutlicher geworden.
mir ist alles klar, ich wollte dir nur den Fehler erklären,
nun auch eine direkte Folgerung, eigentlich schon genannt:
der Rückgabewert von add muss anscheinend wirklich unbedingt das Int-Objekt sein, nicht double,
das hat auch mindestens eine andere Konsequenz, aber arbeite mal etwas alleine weiter
Entwickeln Sie eine Klasse Int, so dass sich das Programm kompilieren lässt. Die Klasse Int soll dabei folgende Semantik haben:
•
Dem Konstruktor wird ein int-Wert übergeben, der intern gespeichert werden soll.
•
Bei Aufruf der Methode add für ein Int-Objekt soll der übergebene int-Wert zum internen int-Wert addiert und anschließend eine Referenz auf das Objekt selbst geliefert werden.
•
Die Methode makeString soll so implementiert werden, dass der interne int-Wert in seiner String-Repräsentation geliefert wird.
bei k handelt es sich um ein Objekt vom Typ Int und ich glaube nicht, dass man den '+' Operator darauf anwenden kann. Ich würde sagen, Du brauchst eher eine Methode
bei k handelt es sich um ein Objekt vom Typ Int und ich glaube nicht, dass man den '+' Operator darauf anwenden kann. Ich würde sagen, Du brauchst eher eine Methode
da hast du recht, hat der compiler auch rumgemeckert.
nun habe ich den tipp von slater noch mit eingebaut und habe folgendes programm nun :
Java:
classInt{double m_wert1 ;Int(double wert1 ){
m_wert1=wert1;}publicIntadd(double k ){
m_wert1= m_wert1 +k ;returnthis;}}publicclassUE8Aufgabe1{publicstaticvoidmain(String[] args){
IO.println(newInt(8).add(IO.readInt("geben sie DOI eine zahl ein")).add(2));}}
Gebe ich jedoch eine Zahl ein, so bekomme ich werte wie Int@addbf1 , ich tippe der gibt jetzt einfach den Int wert von der 8 aus und so oder?
Int ist ein Objekt und wird es immer bleiben, da ist nix zu konvertieren,
du könntest entweder einen Wert abfragen, getMwert() aufrufen,
oder die toString() Methode überschreiben, dann wird genau das ausgegeben, was die Methode ansagt, wie im Lehrbuch zu lesen
also ich war kurz vorm aufgeben
habe es aber dann doch noch geschafft .
Java:
classInt{staticint m_wert1 ;// eine static variable damit alle methoden, damit arbeiten können Int(int wert1 ){
m_wert1=wert1;}Intadd(int k ){
m_wert1 = m_wert1+ k;returnthis;}publicStringmakeString(){returnInteger.toString(m_wert1);}}publicclass skript {publicstaticvoidmain(String[] args){System.out.println(newInt(8).add(IO.readInt("geben sie einen Wert ein")).add(-2).makeString());}}