Counter im Konstruktor

Paetzi

Mitglied
Guten Tag Community,

eventuell hat ja jemand Lust mir einen Denkanstoss zu geben. (Bitte nicht einfach die Lösung verraten). Ich möchte bei der Ausgabe erreichen, dass mein counter Wert sich immer um 1 erhöht, leider funktioniert es nicht er bleibt immer bei 1... Die Anzahl der Aufrufe der show() Methode ist zufällig. (Andere Klasse, dort darf der Code nicht verändert werden)

Es soll in etwa so aussehen:

1-tes Paket entält...
2-tes Paket enthält...
usw.

Ich habe folgenden Code:

class SurpriseBag {

String s; //Schokolade
String a; // Buch
String b; // Stift
int counter = 0;
String kino = "Kino";
String ball = "Ball";




SurpriseBag() {
counter = counter++;

}


SurpriseBag(String s) {
this.s = s;
counter = counter++;

}

SurpriseBag(String a, String b) {
this.a = a;
this.b = b;
counter = counter++;

}

public void show() {

System.out.println(counter+ "-tes Paket enthaelt: ");
}

public static String getTotalNumber() {


String s = "Todo";


return s;
}

}

Vielen Dank für eure Hilfe.
 
counter ist eine Instanzvariable bei dir und zählt halt immer ein einzelnes Objekt. Deshalb Ergebnis = 1. Stichwort static ....
 
Ich verstehe nicht, was die ganzen Strings da sollen? Ein String für den Inhalt sollte ausreichend sein, was dann drin ist wird doch über den Konstruktor gesetzt.
Java:
class SurpriseBag {

String inhalt;

SurpriseBag(String s) {
this.inhalt = s;
}

Und als Hilfe für das Problem, das von JStein52 angesprochen wurde: Es werden mehr als eine int-Variable benötigt...

Und außerdem noch
counter = counter++ ist doppelt gemoppelt, denn counter++ steht bereits für counter = counter + 1 .
 
Ja, es sind noch ein paar Sächelchen im Argen. Der counter zählt ja zum Beispiel nur wieviele SurpriseBag-Objekte während des Ablaufs des Programmes mal angelegt wurden aber nicht wie viele gerade existieren. Die können ja schon lange wieder dem GC zum Opfer gefallen sein. Und die show()-Methode kann auch nicht wirklich zuordnen zum wievielten Objekt jetzt diese Ausgabe gehört. Das funktioniert nur scheinbar richtig wenn man immer abwechselnd new() und show() aufruft. Wenn man allerdings drei Objekte anlegt und erst anschliessend für diese drei die show()-Methode dann gehts daneben.
 
Entschuldigt, dass ich mich erst jetzt wieder melde. Es handelt sich bei dem Programm um eine Aufgabenstellung. Ich habe das Programm jetzt soweit überarbeitet. Sieht jetzt so aus und macht was es soll. Lediglich bei den if Abfragen würde mich interessieren ob man das ganze effektiver also mit weniger Code erreichen kann.

class SurpriseBag {

String s; //Schokolade
String a; // Buch
String b; // Stift
String j; //Zufallsgeschenk
static int counter = 0;
String [] presents = {"Auto", "Motorrad", "Computer", "Spielfigur"};


SurpriseBag() {
j = presents[(int) (Math.random() * 4)];
counter++;

}


SurpriseBag(String s) {
this.s = s;
counter++;

}

SurpriseBag(String a, String b) {
this.a = a;
this.b = b;
counter++;

}

public void show() {

System.out.print(counter+ "-tes Paket enthaelt: ");
if(s!=null)
{
System.out.print(s+" ");
}
if(a!=null)
{
System.out.print(a+" ");
}
if(b!=null)
{
System.out.print(b+" ");
}
if(j!=null)
{
System.out.print(j+" ");
}




System.out.println();
}

public static String getTotalNumber() {


String total = String.valueOf(counter);


return total;
}

}

Vielen Danke für eure Hilfe!
 
Zuletzt bearbeitet:
Sieht jetzt so aus und macht was es soll.
Ich würde sagen es macht nur zufällig das was es soll. siehe oben.
Und du kannst den Inhalt in den Konstruktoren jeweils in einem einzelnen String abspeichern:
Code:
String inhalt;
.
.
.
inhalt = a+", "+b;    // im konstruktor mit den zwei argumenten und entsprechend in den anderen Konstruktoren
in den anderen Konstruktoren entsprechend. Und im show gibst du einfach inhalt aus.
 
Es ist wie von dir oben beschrieben so, dass in der vorgegeben Klassen, immer erst ein Objekt erzeugt wird und im Anschluss wird es direkt aufgerufen. In der Aufgabenstellung, wird einmal ein Objekt mit 2 Werten, dann mit einem Wert und anschließend eine zufällige Zahl von Objekten (bis zu 10) ohne Wert erzeugt. An dieser Klasse darf auch nichts verändert werden.
 
An dieser Klasse sollst du ja auch nichts ändern. Aber um korrekt zu sein müsstest du dir für jedes Objekt noch merken das wievielte es ist. Sonst funktioniert deine Klasse nur für genau diese eine Aufrufreihenfolge !
 
Okay danke für die Hilfe mit den if-Abfragen funktioniert 🙂 Was das merken der Objekte angeht, muss ich gestehen überlege ich gerade noch was genau gemeint ist. Ich muss gerade noch eine andere Aufgabenstellung lösen, sobald ich dass getan habe, werde ich die Reihenfolgen der Aufrufe in der anderen Klasse ändern um zu schauen was passiert. Werde es dann heute oder morgen hier posten. Aber vielen vielen Dank für deine Hilfe.
 

Zurück
Oben