wrong output with toString()

import java.util.List;
import java.util.ArrayList;

public class SpieleweltKlasse {
public static void main(String[] args) {
List<CharakterKlasse> gildenMitglieder = new ArrayList<>();
gildenMitglieder.add(new Magier("Gandalf", 22));
gildenMitglieder.add(new Krieger("Goblin Slayer", 23));
gildenMitglieder.add(new CharakterKlasse("Bilbo",14));

System.out.println(gildenMitglieder.size());
System.out.println(gildenMitglieder.toString());

System.out.println(gildenMitglieder.toString());
gildenMitglieder.remove(0); // remove Gandalf
System.out.println(gildenMitglieder.toString());

gildenMitglieder.remove(1); // remove Bilbo
System.out.println(gildenMitglieder.toString());

gildenMitglieder.remove(0); // remove Goblin Slayer
System.out.println(gildenMitglieder.toString());
}
}
import java.util.List;
import java.util.ArrayList;

public class SpieleweltKlasse {
public static void main(String[] args) {
List<CharakterKlasse> gildenMitglieder = new ArrayList<>();
gildenMitglieder.add(new Magier("Gandalf", 22));
gildenMitglieder.add(new Krieger("Goblin Slayer", 23));
gildenMitglieder.add(new CharakterKlasse("Bilbo",14));

System.out.println(gildenMitglieder.size());
System.out.println(gildenMitglieder.toString());

System.out.println(gildenMitglieder.toString());
gildenMitglieder.remove(0); // remove Gandalf
System.out.println(gildenMitglieder.toString());

gildenMitglieder.remove(1); // remove Bilbo
System.out.println(gildenMitglieder.toString());

gildenMitglieder.remove(0); // remove Goblin Slayer
System.out.println(gildenMitglieder.toString());
}
}
Output:
3
[Magier@eed1f14, Krieger@7229724f, CharakterKlasse@4c873330]
[Magier@eed1f14, Krieger@7229724f, CharakterKlasse@4c873330]
[Krieger@7229724f, CharakterKlasse@4c873330]
[Krieger@7229724f]
[]
3
[Magier@eed1f14, Krieger@7229724f, CharakterKlasse@4c873330]
[Magier@eed1f14, Krieger@7229724f, CharakterKlasse@4c873330]
[Krieger@7229724f, CharakterKlasse@4c873330]
[Krieger@7229724f]
[]
Why is [Magier@eed1f14, Krieger@7229724f, CharakterKlasse@4c873330] not displayed as [Magier 'Gandalf', Krieger 'Aragorn', Charakter 'Bilbo']?
18 Replies
JavaBot
JavaBot4w ago
This post has been reserved for your question.
Hey @Darknesslion5|Christian! Please use /close or the Close Post button above when your problem is solved. Please remember to follow the help guidelines. This post will be automatically marked as dormant after 300 minutes of inactivity.
TIP: Narrow down your issue to simple and precise questions to maximize the chance that others will reply in here.
Madjosz
Madjosz4w ago
Did you override the toString() method in your character classes?
Darknesslion5|Christian
wait ill send it in
public class CharakterKlasse {
protected String name;
protected int level;
protected double healthPoints;

protected WaffeKomposition ausgeruesteteWaffe;

// --- Constructor ---
public CharakterKlasse (String name, int level, double startHealth) {
this.name = name;
this.level = level;
this.healthPoints = startHealth;
}
// Quick constructor
public CharakterKlasse (String name, int level) {
this(name, level, 100);
}

// --- Behavior / Abilities ---
// legt den Basisschaden ohne Waffe fest
protected int getBaseDamage() {
return this.level * 2;
}
// legt seinen Schaden mit angelegter Waffe fest
protected int getWeaponDamage() {
return (this.ausgeruesteteWaffe != null) ? this.ausgeruesteteWaffe.getSchadensbonus() : 0 ;
}

// Gibt sein Name, Level und HP aus
public void greeting(){
System.out.printf("Hi, ich bin %s, Level %d mit %.1f HP.%n", this.name, this.level, this.healthPoints);
}

// Wertet das Level des chars auf
public void levelUp () {
this.level++;
System.out.printf("%s ist auf Level %d aufgestiegen!%n", this.name, this.level);
}

// besondere Fähigkeit (bisher ungenutzt)
public String ability(String ability) {
return ability;
}

// rüstet eine Waffe aus und gibt dies aus
public void ausruesten(WaffeKomposition waffe){
ausgeruesteteWaffe = waffe;
System.out.printf(" (%S) %s hat eine Waffe angelegt.%n", waffe.getName(), name);
}
public class CharakterKlasse {
protected String name;
protected int level;
protected double healthPoints;

protected WaffeKomposition ausgeruesteteWaffe;

// --- Constructor ---
public CharakterKlasse (String name, int level, double startHealth) {
this.name = name;
this.level = level;
this.healthPoints = startHealth;
}
// Quick constructor
public CharakterKlasse (String name, int level) {
this(name, level, 100);
}

// --- Behavior / Abilities ---
// legt den Basisschaden ohne Waffe fest
protected int getBaseDamage() {
return this.level * 2;
}
// legt seinen Schaden mit angelegter Waffe fest
protected int getWeaponDamage() {
return (this.ausgeruesteteWaffe != null) ? this.ausgeruesteteWaffe.getSchadensbonus() : 0 ;
}

// Gibt sein Name, Level und HP aus
public void greeting(){
System.out.printf("Hi, ich bin %s, Level %d mit %.1f HP.%n", this.name, this.level, this.healthPoints);
}

// Wertet das Level des chars auf
public void levelUp () {
this.level++;
System.out.printf("%s ist auf Level %d aufgestiegen!%n", this.name, this.level);
}

// besondere Fähigkeit (bisher ungenutzt)
public String ability(String ability) {
return ability;
}

// rüstet eine Waffe aus und gibt dies aus
public void ausruesten(WaffeKomposition waffe){
ausgeruesteteWaffe = waffe;
System.out.printf(" (%S) %s hat eine Waffe angelegt.%n", waffe.getName(), name);
}
// gibt den Schaden mit der Faust oder der Waffe aus
public void angreifen(){
int damage = getBaseDamage();
if (ausgeruesteteWaffe != null) {
damage += getWeaponDamage();
System.out.printf("%s greift mit %s an und fügt %d Schade zu%n", name, ausgeruesteteWaffe.getName(), damage);
} else {
System.out.printf("%s schlägt mit bloßen Fäusten und macht %d Schaden%n", name, damage);
}

}

// --- Setter / Getter ---
public void setName(String name) {
this.name = name;
}

public void setLevel(int level) {
if (level > 0) {
this.level = level;
}
}

public void setHealthPoints(double healthPoints) {
if (healthPoints > 0) {
this.healthPoints = healthPoints;
}
}
}
// gibt den Schaden mit der Faust oder der Waffe aus
public void angreifen(){
int damage = getBaseDamage();
if (ausgeruesteteWaffe != null) {
damage += getWeaponDamage();
System.out.printf("%s greift mit %s an und fügt %d Schade zu%n", name, ausgeruesteteWaffe.getName(), damage);
} else {
System.out.printf("%s schlägt mit bloßen Fäusten und macht %d Schaden%n", name, damage);
}

}

// --- Setter / Getter ---
public void setName(String name) {
this.name = name;
}

public void setLevel(int level) {
if (level > 0) {
this.level = level;
}
}

public void setHealthPoints(double healthPoints) {
if (healthPoints > 0) {
this.healthPoints = healthPoints;
}
}
}
as far as i know i didnt
Madjosz
Madjosz4w ago
Then that is the reason. If you don't provide any override it will just print as classname@hexhash.
Darknesslion5|Christian
how would you overwrite it i havent used @Overwrite for anything but a method in a subclass btw. thank you for the answer
JavaBot
JavaBot4w ago
If you are finished with your post, please close it. If you are not, please ignore this message. Note that you will not be able to send further messages here after this post have been closed but you will be able to create new posts.
Madjosz
Madjosz4w ago
public class CharakterKlasse{
...
@Override
public String toString() {
return getClass().getSimpleName() + " \"" + this.name + "\"";
}
}
public class CharakterKlasse{
...
@Override
public String toString() {
return getClass().getSimpleName() + " \"" + this.name + "\"";
}
}
Madjosz
Madjosz4w ago
Oh, no name getter. Let me fix.
Darknesslion5|Christian
thank you for the solution but honestly, i think i wouldnt be able to recreat it
Madjosz
Madjosz4w ago
Well this solution automatically uses the name of the class.
Darknesslion5|Christian
if i want toString() being the level instead. i could replace this.name with this.level right?
Madjosz
Madjosz4w ago
Yes. Put there whatever you want to have printed out.
Darknesslion5|Christian
and why did u do `" \"" and "\""
Madjosz
Madjosz4w ago
To resemble Magier "Gandalf"
Darknesslion5|Christian
alright thank you
JavaBot
JavaBot4w ago
If you are finished with your post, please close it. If you are not, please ignore this message. Note that you will not be able to send further messages here after this post have been closed but you will be able to create new posts.
JavaBot
JavaBot4w ago
Post Closed
This post has been closed by <@245536392308981760>.

Did you find this page helpful?