Verständnisprobleme mit Klassennutzung

moccajoghurt

Bekanntes Mitglied
Moin ich hab Verständnisprobleme mit dieser eigentlich einfachen Aufgabe:

Aufgabe 2:
Schauen Sie sich folgendes Programm an. Die Klasse IO ist die aus der Vorlesung bekannte Klasse:
class Addieren {
public static void main(String[] args) {
IO.println(new Int(8).add(IO.readInt()).add(-2).makeString());
}
}
Aufgabe: 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 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 einer Benutzereingabe von 3 soll das Programm bspw. „9“ auf den Bildschirm ausgeben, bei einer Eingabe von -7 „-1“.

Mein bisheriger (fehlerhafter) Code ist folgender:

Java:
class Addieren {
	public static void main(String[] args) {
		IO.println(new Int(8).add(IO.readInt()).add(-2).makeString());
	}
}

class Int {
	static int a = 0;

	Int(int b) {
		a += b;
	}

	static void add(int b) {
		a += b;
	}

	static String makeString() {
		String s = "" + a;
		return s;
	}

}

Wie kann ich die Aufgabe im Sinne der Aufgabenstellung lösen?

Gruß mocca
 
A

A0027301

Gast
Java:
public class Int
{
private int wert;

public Int(int value)
    {
    this.wert=value;
    }

public int add(int value)
    {
    this.wert+=value;
    return wert;
    }

public String make()
    {
    return String.valueOf(wert);
    }

}

Warum allerdings bei 3 als String "9" rauskommen soll, habe ich nicht verstanden
 

Haave

Top Contributor
Dem Konstruktor wird ein int-Wert übergeben, der intern gespeichert werden soll.
Java:
//Dein geposteter Code
class Int {
	static int a = 0;

	Int(int b) {
		a += b;
	}
Der Wert wird hier aber nicht wirklich gespeichert, sondern zu a hinzuaddiert. a ist zwar 0, aber schön ist es trotzdem nicht. Und warum ist a static? Das würde bedeuteten, dass jedes Objekt von Klasse Int dasselbe a benutzt. Warum nicht so:
Java:
class Int {
    private int wert;
    public Int(int wert) {
        this.wert=wert;
    }
}
?
 

moccajoghurt

Bekanntes Mitglied
Ja das static ist beim herumprobieren da gelandet, ursprünglich hatte ich denselben Code wie du ihn vorgeschlagen hast Haave.

Das eigentliche Problem ist, dass die main-Funktion in der Klasse Addieren den Fehler meldet:
Code:
Multiple markers at this line
	- Cannot invoke add(int) on the primitive 
	 type void
	- Cannot invoke add(int) on the primitive 
	 type int
 

Haave

Top Contributor
Hm, die Fehlermeldung blick ich ehrlich gesagt nicht so ganz. Aber ich wundere mich, warum die Methode add() static ist. In der main-Methode erzeugst du ja ein neues Int-Objekt mit a == 8. In derselben Zeile steht dann add(-2), was dein neues Objekt ausführen soll, aber das kann ja nicht gehen, weil die add()-Methode static ist, sehe ich das richtig? Da müsste ja vielmehr Int.add() stehen, aber dann müsstest du an die add()-Methode,wenn sie static sein soll, auch ein Objekt von Typ Int übergeben, denn was sollte sonst gerechnet werden?
Mann mann, diese vielen Punktoperatoren und Methodenaufrufe in einer Zeile bringen mich durcheinander…
 
M

Marcinek

Gast
Das problem liegt hier

IO.println(new Int(8).add(IO.readInt()).add(-2).makeString());


Noch genauer:

new Int(8).add(IO.readInt()) liefert kein Objekt Int sondern den primitiven Typ int als Ergebnis von add

Du versuchst auf int die methode add aufzurufen.
 
Zuletzt bearbeitet von einem Moderator:

faetzminator

Gesperrter Benutzer
Da gibts zwei Möglichkeiten.
Entweder du gibst das eigene Objekt zurück:
Java:
public Int add(int value) {
    this.wert+=value;
    return this;
}
oder aber das Feld [c]wert[/c] soll [c]final[/c] sein und du musst ein neues Objekt zurückgeben:
Java:
private final int wert;

// ...

public Int add(int value) {
    return new Int(this.wert + value);
}
Letzteres macht mehr Sinn.

Edit:
Gemäss Aufgabenstellung...
Bei Aufruf der Methode add für ein Int-Objekt soll der übergebene int-Wert zum internen Wert addiert und anschließend eine Referenz auf das Objekt selbst geliefert werden.
Also, es muss die erste von mir vorgeschlagene Methode verwendet werden ;)
 
Zuletzt bearbeitet:

slawaweis

Bekanntes Mitglied
es ist das Builder-Pattern. Grob kann man es sich so vorstellen:

Java:
public class Haus
{
}

public class HausBuilder
{
 public HausBuilder()
  {
  }

 public HausBuilder baueKeller()
  {
  }

 public HausBuilder baueStockwerk()
  {
  }

 public HausBuilder baueDach()
  {
  }

 public HausBuilder baueRaum()
  {
  }

 public HausBuilder baueTür()
  {
  }

 public Haus fertig()
  {
  }
}

// Verwendung

// Gartenhäuschen
Haus haus = new HausBuilder().baueKeller().baueStockwerk().baueDach().fertig();

// Einfamilienhaus
Haus haus = new HausBuilder()
                            .baueKeller()
                            .baueStockwerk()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür().baueTür()
                            .baueDach()
                            .fertig();

// Mehfamilienhaus
Haus haus = new HausBuilder()
                            .baueKeller()
                            .baueStockwerk()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür().baueTür()
                            .baueStockwerk()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür().baueTür()
                            .baueStockwerk()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür()
                               .baueRaum().baueTür().baueTür()
                            .baueDach()
                            .fertig();

Das Builder-Pattern wird verwendet um ein Objekt unter bestimmten Rahmenbedingungen zu erstellen. In der Analogie zum Haus, muss der Builder dafür sorgen, dass z.B. kein Stockwerk gebaut wird, bevor nicht der Keller da ist. Oder dass ein Haus immer ein Dach haben muss, bevor es fertig ist. Wenn irgendeine Bedienung nicht zutrifft, wird eine Exception geschmissen und die Konstruktion eines Objektes wird abgebrochen. Ansonsten kommt aus dem Builder ein korrekt "gebautes" Objekt raus.

Slawa
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX - grundlegende Verständnisprobleme Java Basics - Anfänger-Themen 1
D Interface Verständnisprobleme von Interfaces Java Basics - Anfänger-Themen 5
gstarplayer [Verständnisprobleme] Java next(),nextLine,nextInt und parseInt! Java Basics - Anfänger-Themen 22
? Klassen Verständnisprobleme mit Klassen und Metohden Java Basics - Anfänger-Themen 5
? Klassen Verständnisprobleme mit Import Anweisungen Java Basics - Anfänger-Themen 6
J Verständnisprobleme bei Arrays Java Basics - Anfänger-Themen 3
J Erste Schritte türme von hanoi verständnisprobleme Java Basics - Anfänger-Themen 6
S Verständnisprobleme wie Java Programme ablaufen Java Basics - Anfänger-Themen 6
K JNI Verständnisprobleme Java Basics - Anfänger-Themen 4
B verständnisprobleme bei Aufgabenstellung Java Basics - Anfänger-Themen 25
c_sidi90 Hilfe bei GUI Verständnisprobleme Java Basics - Anfänger-Themen 13
A Mal wieder Verständnisprobleme Java Basics - Anfänger-Themen 3
A Code-Verständnisprobleme Java Basics - Anfänger-Themen 10
A Verständnisprobleme eines Lösungscodes Java Basics - Anfänger-Themen 9
B Objektoerientiertes Programmieren, Verständnisprobleme Java Basics - Anfänger-Themen 4
megachucky JDBC-Grundlagen: Verständnisprobleme Java Basics - Anfänger-Themen 31
S Rekursion: Verständnisprobleme Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben