Erste Schritte Konstrukor Fussballmannschaft

mipflip

Mitglied
Aufgabenstellung:
Erstellen Sie die Klasse „Fussballmannschaft“ unter Berücksichtigung folgender
Angaben:
• Fügen Sie Instanzvariablen hinzu:
◦ Name der Mannschaft
◦ Anzahl der gewonnenen Spiele
◦ Anzahl der verlorenen Spiele
• Erstellen Sie einen Konstruktor, der alle 3 Instanzvariablen initialisiert.
• Erstellen Sie einen zweiten Konstruktor, der als Parameter nur einen Namen
übergeben bekommt und die Anzahl (gewonnen/verloren) auf 0 setzt.
Verwenden Sie den ersten Konstruktor wieder.
• Schreiben Sie 2 Methoden für das Erhöhen der Anzahl der gewonnenen bzw.
verlorenen Spiele.
• Schreiben Sie eine Methode, die zurückgibt ob die Mannschaft „erfolgreich“
ist. Das ist der Fall wenn die Mannschaft mehr Spiele gewonnen als verloren
hat.
• Schreiben Sie eine Main-Methode (oder eine „act“-Methode von Greenfoot),
die eine Fussballmannschaft erstellt. Wählen Sie einen beliebigen Namen und
setzen Sie die Anzahl der gewonnenen Spiele auf 4 und die der verlorenen
Spiele auf 5. Geben Sie das Resultat der „erfolgreich“-Methode auf der
Konsole aus.
Wenden sie Information-Hiding bzw. Encapsulation bei der Implementierung an!

Ich hoffe ich konnte die Aufgabenstellung halbwegs richtig umsetzten. Folgende Fragen haben sich dabei ergeben:
Warum kann ich hier die boolean Methode nicht in der Main-methode über das Objekt ansprechen ohne dass ein Fehler kommt?
Gibt es eine Mögichkeit alle Eigenschaften eines Objekts auszugeben ohne hundertmal System.out.println schreiben zu müssen? Bin für jeden Tipp dankbar.

Java:
public class Fussballmannschaft {
   private String name;
   private int gewonnen;
   private int verloren;
  
   public Fussballmannschaft (String n, int g, int v){
       this.name = n;
       this.gewonnen = g;
       this.verloren = v;
   }
  
   public int getGewonnen(){
       return gewonnen;
   }
   public int getVerloren(){
       return verloren;
   }
   public void setGewonnen(int g){
       gewonnen = g;
   }
   public void setVerloren(int v){
       verloren=v;
}

   public boolean istErfolgreich(int g, int v){
       if (g > v){
           return true;
       }return false;
   }
          
       public static void main(String[]args){
      
       Fussballmannschaft eins = new Fussballmannschaft("Rapid",3,3);
       Fussballmannschaft zwei = new Fussballmannschaft("Austria",0,0);
      
       zwei.setGewonnen(4);
       zwei.setVerloren(5);
      
       System.out.println(eins.name);
       System.out.println("Gewonnen: "+eins.gewonnen);
       System.out.println("Verloren: "+eins.verloren);
       System.out.println("ist erfolgreich: "+ eins.istErfolgreich);   /*Fehlermeldung: cannot resolved or is not a field*/
       System.out.println();
       System.out.println(zwei.name);
       System.out.println("Gewonnen: "+eins.gewonnen);
       System.out.println("Verloren: "+eins.verloren);
       System.out.println("ist erfolgreich: "+ zwei.istErfolgreich);    /*Fehlermeldung: cannot resolved or is not a field*/
   }
 }

Ausgabe auf der Konsole:
Code:
Rapid
Gewonnen: 3
Verloren: 3

Austria
Gewonnen: 4
Verloren: 5
 

Robat

Top Contributor
Warum kann ich hier die boolean Methode nicht in der Main-methode über das Objekt ansprechen ohne dass ein Fehler kommt?

..

System.out.println("ist erfolgreich: "+ eins.istErfolgreich); /*Fehlermeldung: cannot resolved or is not a field*/
Weil du die Klammern der Methode vergessen hast ;) So glaubt der Compiler es gäbe eine Variable istErfolgreich

Gibt es eine Mögichkeit alle Eigenschaften eines Objekts auszugeben ohne hundertmal System.out.println schreiben zu müssen?
Du kannst die toString() Methode eines Objektes überschreiben. Siehe bspw. hier.
 

mipflip

Mitglied
hm welche Klammerung meinst du, ich seh den Fehler leider nicht. Hab jetzt mit allen möglichen Klammerungen im Programm herumexperimentiert allerdings ohne Erfolg =(

Weil du die Klammern der Methode vergessen hast ;) So glaubt der Compiler es gäbe eine Variable istErfolgreich

Die String toString Methode hat super geklappt vielen Dank das werd ich mir merken, damit sieht gleich alles viel ordentlicher aus.
 

Joose

Top Contributor
hm welche Klammerung meinst du, ich seh den Fehler leider nicht. Hab jetzt mit allen möglichen Klammerungen im Programm herumexperimentiert allerdings ohne Erfolg =(

Er hat doch genau die Zeile Code zitiert wo der Fehler auftaucht ;)

Java:
System.out.println("ist erfolgreich: "+ eins.istErfolgreich); /*Fehlermeldung: cannot resolved or is not a field*/
Hier taucht der Fehler auf ... da es sich bei "istErfolgreich" um eine Methode handelt, da du aber die "()" hinter dem Aufruf vergessen hast, versucht er auf ein Feld mit den Namen "istErfolgreich" zuzugreifen.
Java:
System.out.println("ist erfolgreich: "+ eins.istErfolgreich());
 

mipflip

Mitglied
Ich hab mir jetzt so geholfen:
Java:
public String toString(){
     return "Name: "+ name +", Gewonnen: "+ gewonnen + ", Verloren: "+ verloren + ", Ist die Mannschaft erfolgreich? " +istErfolgreich(gewonnen, verloren);

System.out.println(zwei.toString());
  }
Output auf der Konsole:
Code:
Name: Austria, Gewonnen: 4, Verloren: 5, Ist die Mannschaft erfolgreich? false

habt ihr vlt Verbesserungsvorschläge? oder noch Tipps?
Danke und liebe Grüße Michael
 

mipflip

Mitglied
Fehlermeldung:
Code:
The method istErfolgreich(int,int) in the type Fussballmannschaft is not applicable for the arguments ().
 

Robat

Top Contributor
Verstehst du den Code, den du geschrieben hast, überhaupt? :confused:

Hier hast du die Methode aus deiner Klasse:
Java:
   public boolean istErfolgreich(int g, int v){
       if (g > v){
           return true;
       }return false;
   }

Wie du siehst erwartet die Methode 2 Parameter.
Demnach musst du, wenn du die Methode aufrufst, auch etwas übergeben.

Gruß Robert
 

mipflip

Mitglied
Hi Robert, ich muss sagen ich bin leider noch nicht ganz vertraut mit dem Codeschreiben, deswegen bitte ich um ein bisschen Geduld, auch wenn das bedeutet dass man mir alle doppelt erklären muss :confused:.

Wenn ich dich richtig verstanden habe ist es nur möglich die Funktion istErfolgreich aufzurufen wenn ich ihr 2 int Parameter übergebe. aber einfach (4,5) reinschreiben ist doch nicht die Lösung oder? Diese Zahlen stammen ja von der getter/setter Methode, dh ich müsste diese irgendwie verwenden?
Allerdings stellt sich mir hier die Frage wie das möglich wäre ... ? o_O
 

Joose

Top Contributor
Java:
System.out.println("ist erfolgreich: "+ eins.istErfolgreich(eins.getGewonnen(), eins.getVerloren()));

Meiner Meinung nach braucht die Methode "istErfolgreich" gar keine Parameter, die Klasse selbst weiß ja wieviel gewonnen/verloren sind. Die Methode sollte einfach diese Attribute verwenden.
 

Robat

Top Contributor
Hi Robert, ich muss sagen ich bin leider noch nicht ganz vertraut mit dem Codeschreiben, deswegen bitte ich um ein bisschen Geduld, auch wenn das bedeutet dass man mir alle doppelt erklären muss :confused:.
Das ist ja auch kein Problem :) Ich wollte nur fragen ob dir bewusst ist, was du in dem Code überhaupt tust. Sollte dir noch nicht ganz klar sein was du da machst solltest du einfach noch mal im Grundlagenhandbuch nachlesen oder einfach fragen. Sobald dir das hier klar ist löst sich deine Frage:

Allerdings stellt sich mir hier die Frage wie das möglich wäre ... ? o_O

auch ganz von allein :)

Meiner Meinung nach braucht die Methode "istErfolgreich" gar keine Parameter, die Klasse selbst weiß ja wieviel gewonnen/verloren sind. Die Methode sollte einfach diese Attribute verwenden.
Würde ich so unterschreiben.
 

Neue Themen


Oben