Operatorproblem?

  • Themenstarter Gelöschtes Mitglied 54019
  • Beginndatum
G

Gelöschtes Mitglied 54019

Gast
Hallo Leute,
Ich bin noch Anfänger und habe folgendes Problem.
Es geht um die Klasse Person.java
Und die Testklasse lautet TestPerson.java

Hier ist Person.java
Code:
public class Person {
   
    private int groesse;
    private String name;
    private String vorname;
    private int gewicht;
   
    public Person(int groesse, String name, String vorname, int gewicht) {
        this.groesse = groesse;
        this.name = name;
        this.vorname = vorname;
        this.gewicht = gewicht;
    }
   
    public int getGroesse() {
        return groesse;
    }
   
    public void setGroesse(int groesse) {
        this.groesse = groesse;
    }
   
    public String getName() {
        return name;
    }
   
    public void setName(String name) {
        this.name = name;
    }
   
    public String getVorname() {
        return vorname;
    }
   
    public void setVorname(String vorname) {
        this.vorname = vorname;
    }
   
    public int getGewicht() {
        return gewicht;
    }
   
    public void setGewicht() {
        this.gewicht = gewicht;
    }
   
    public int laufen(int gewicht) {
        return this.gewicht-5;
    }
   
    public void print() {
        System.out.println("Groesse: " + groesse);
        System.out.println("Name: " + name);
        System.out.println("Vorname: " + vorname);
        System.out.println("Gewicht: " + gewicht);
    }
   
}

und jetzt kommt die Testklasse

Code:
public class TestPerson {

    public static void main (String [] args) {
       
        Person Eins = new Person(180, "Kratzer", "Reinhold", 84);  //Name sind fiktiv
        Person Zwei = new Person(178, "Bause", "Ingrid", 84);  //Name ist fiktiv
       
        System.out.println("\nDer Erste:");
        Eins.print();
        System.out.println("\nDie Zweite: ");
        Zwei.print();
       
        System.out.println("\n\njetzt läuft der erste!");
        Eins.laufen(84);
        System.out.println("\nUnd jetzt die Werte vom ersten!\n\n");
        Eins.print();
    }
}


Was ich machen will, geht ja klar aus der Testklasse hervor.
Objekt Eins namens Kratzer soll laufen und sein Gewicht soll sich dadurch um 5 reduzieren.
Aber es klappt einfach nicht!

Jemand eine Idee wieso nicht?

Danke und viele Grüße
JavaXava
 

Tarrew

Top Contributor
Java:
    public int laufen(int gewicht) {
        return this.gewicht-5;
    }

Die Methode gibt das Gewicht -5 zurück, aber das Attribut "gewicht" wird dadurch nicht verändert. Es hat also immer noch den vorherigen Wert.

Also entweder erst "gewicht" reduzieren und dann zurückgeben:
Java:
    public int laufen(int gewicht) {
        this.gewicht -= 5;
        return this.gewicht;
    }

oder alternativ das ganze in einem Schritt:
Java:
    public int laufen(int gewicht) {
        return this.gewicht-=5;
    }

Da die Person ihr eigenes Gewicht ja kennt, kannste den Parameter auch entfernen.
 
G

Gelöschtes Mitglied 54019

Gast
cool, danke!!

Das mit dem Parameter weglassen in der methode laufen dachte ich auch, aber da meckert der Compiler:

TestPerson.java:16: error: method laufen in class Person cannot be applied to given types;
Eins.laufen();
^
required: int
found: no arguments
reason: actual and formal argument lists differ in length
1 error

:(

Falls es dich noch interessiert, ich habe es jetzt so gelöst:
Code:
Eins.laufen(Eins.getGewicht());
:)

Danke nochmal!
 

Tarrew

Top Contributor
Wenn du den Parameter weglässt musst du die Methode natürlich anpassen. Im Moment kannst du übergeben was du willst und es macht keinen Unterschied.

Besser wäre dann:
Java:
    public int laufen() {
        return this.gewicht-=5;
    }

Und dann entsprechend nichts übergeben.

Variablennamen solltest du übrigens immer klein schreiben (also "eins" und "zwei" anstatt "Eins" und "Zwei")
 
G

Gelöschtes Mitglied 54019

Gast
ach das meintest du mit Parameter weglassen, begreift der Anfänger nicht.
Verstanden, Danke!

hab ich ja probiert die Variablen klein zu lassen, war nur für die getter und setter um im CamelCase zu bleiben, also getGewicht(); die Variable heißt aber gewicht;

Viele Grüße
 

Tarrew

Top Contributor
Ja es ging eher um deine Testklasse ;)

Java:
 Person Eins = new Person(180, "Kratzer", "Reinhold", 84);  //Name sind fiktiv
        Person Zwei = new Person(178, "Bause", "Ingrid", 84);  //Name ist fiktiv

Eins und Zwei besser klein :)
 

Neue Themen


Oben