Frage von maryem123, 118

wie kann man eine methode schreiben , die nur n mal aufgerufen werden darf .. dann liefert sie nur null , zum beispiel ein Helpknopf bei einem Spiel?

Expertenantwort
von KnusperPudding, Community-Experte für Java, 14

Aus den Kommentaren und der anderen Antwort geht hervor, dass du keine weiteren Attribute einer Klasse hinzu fügen darfst. und eigentlich nur die Methode bearbeiten darfst. - ist eigentlich ganz schön schräg!

Aber beachte bitte folgendes:

In einer Methode deklarierten Variablen sind lokale Variablen und sind somit ausschließlich innerhalb der Methode gültig. Damit lässt sich nicht feststellen wie oft die Methode aufgerufen wird.

Welche Möglichkeiten hast du?

1. Du definierst eine Instanzvariable:

int hitCount = 0;

Object help() {
   if (hitCount < 3)
      ...
       hitCount++;
   } else {
   return null;
   }
}

2. Du verwendest eine bereits existente Variable, Codebeispiel wie bei 1.

3. Du verwendest ein Objekt, welches du modifizieren darfst. Vielleicht eine Liste oder Map mit Eigenschaften, welche du anpassen darfst.

Properties properties = new Properties();

Object help() {
   int hitCount = 0;
   if (!properties.containsKey("HitCount")) {
      properties.put("HitCount", hitCount);
   }
   ...
   if (hitCount < 3) {
     return null;
   }
   ...
}

4. Du lässt dir ein Element mit in die Methode übergeben, welches du anpassen darfst. JavaFX Elemente haben beispielsweise Properties, womit du das genauso machen kannst:

Object help(Button button) {
    Object valueHitCount = button.getProperties().get("HitCount");
    int hitCount = (valueHitCount != null) ? (int) valueHitCount : 0;
    ...
    if (hitCount < 3) {

    }
}
Kommentar von maryem123 ,

Super Danke  für die ausführliche Hilfe .. der dritte Vorschlag ist mir am besten 😄 ..VG

Antwort
von Purphoros, 57

Am simpelsten wäre es, in die übergeordnete Klasse eine Int-Variable zu packen und in der Methode selbst den Wert zu prüfen, um dann entweder abzubrechen oder auszuführen und die Variable um eins zu erhöhen.

Natürlich ist das auch stark davon abhängig, welche Programmiersprache(n) du verwendest, und der allgemeinen Programmstruktur.

Kommentar von maryem123 ,

danach habe ich auch gedacht aber das problem liegt daran , dass ich keine neue Variable zu meiner Klasse hinzufügen darf .. ich programmiere mit java 

Kommentar von Purphoros ,

Du darfst nicht? Verbietet das die Kapselung oder der Lehrer?, Anders gesagt, welche Art Problem lösen wir gerade?

Kommentar von maryem123 ,

nah es geht nicht um kapselung sondern  die Rechtlinie bei einem programmierProjekt , woran ich arbeiten soll . deine letzte frage habe ich nicht mitbekommen . das ist ein Spiel wir sollen einen bestimmten Anteil der Lösung schreiben . es fehlt viele methoden und ich hange jetzt bei der letzten Methode . ich habe sie sogar implimentiert aber mache ich mir nur noch Gedanken über diese n mal bediengung 

Kommentar von FouLou ,

Was macht die methode denn? Wenn du keine variable definiere darfst müsstest du eventuell diesen als parameter hineingeben. Also das der aufrufer der methode sich darum kümmern muss. Ist aber keine wirklich gute lösung.

Kommentar von maryem123 ,

das ist die implimentierung eines Heplknopfes .. der knopf darf nur 5 mal  während eines spieles angerufen werden .. das Spiel ist minesweeper . es geht darum dass wenn ein Spieler eine Hilfe fragt .. sollte eine Flagge auf ein Minesfeld gesetzt wird und ja nach wie der Zustand des Spieles ist dh ja nach wie weit der spieler mit spielen ist .. ja nach die Anzahl der Felder , die geoffnet sind und die anzahl der minenfelder , worauf keine Flagge schon platziert .. damit hatte ich kein problem aber nur diese sache 

Kommentar von FouLou ,

Musst du die flagge selbst im model setzen?

Also der help knopf setzt die flagge?

Falls du die flagge setzen musst. Kannst du diese irgendwie unterscheidbar machen von den flaggen die die spieler selbst gesetzt haben oder kann der spieler die Flaggen nicht selber setzen?

Kommentar von maryem123 ,

alles grafisches ist schon geschrieben .. ich shcreibe noch die logik des Spieles ,, wie das funktioniert .. die Flagge nach dem Druck ja wird auf ein bestimmtes Feld aufgesetzt ich rufe dafür andere funktionne ..

das Spiel ist es so , dass es nur bestimmte Farbe für Flagge gibt . der Spieler hat dabei keine Rolle außer , dass er den Helpknopf druckt .

Kommentar von FouLou ,

Kann der spieler selbst durch klicken etc. eine flagge setzen? oder kann er das nur über den help knopf?

Kommentar von FouLou ,

Falls du die flagge nämlich irgendwie als eine von dir gesetzte Hilfsflagge erkennen kannst. Kannst du ja einfach die vom hilfeknopf gesetzten flaggen zählen. Sind 5 auf dem feld hat der spieler 5 mal auf den hilfeknopf gedrückt und du gibts null zurück.

Kommentar von Purphoros ,

Okay, das ergibt einigermaßen Sinn. Leider kenne ich die Richtlinien und den Programmaufbau nicht, daher muss ich jetzt mal ins Blaue schießen...

Wenn du Methoden, aber keine Variablen zur Klasse hinzufügen darfst, wie steht es dann um eine verschachtelte innere Klasse?
Da könntest du dann deine eigenen Variablen und Methoden reinpacken.

Edit: Haha, da hast du ne halbe Sekunde früher auf senden gedrückt ;)

Kommentar von maryem123 ,

eine neue klasse auch darf man nicht schreiben am weitesten können wir Hilfsfunktion für unsere Aufgabenfunktionen schreiben als privat und dann sie ausnutzen .. 

Kommentar von Purphoros ,

Dann wäre FouLou's Empfehlung auch meine. Wenn du keine Variablen deklarieren darfst, muss das eben derjenige tun, der es darf.

Es ist zwar umständlich und kein guter Stil, aber wenn mehrere Programmierer oder Teams zusammenarbeiten, lassen sich solche Eigenarten eben nicht immer ausschließen.

Kommentar von maryem123 ,

ja ich denke , dass der Vorschlag von Foulou gut ist .. danke euch alle für die Hilfe und mitdenken .. sehr nett :D 

Kommentar von Purphoros ,

Ich muss schon sagen, es ist auch ziemlich schräg, dass du nur in der vom Button aufgerufenen Methode arbeiten darfst.

Es wäre so einfach, von "JButton" (oder eurer existierenden Ableitung davon) eine neue Klasse "HelpButton" abzuleiten, den Code reinzupacken und dann einfach im Gui per "new HelpButton()" einzufügen...

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten