Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context

allo zusammen,

ich versuche mich seit kurzem mit der Javaprogrammierung, bin ganz am Anfang. Ich habe folgendes Problem. ich möchte gerne, dass mir der Text "Gleichstand, bitte noch einmal" ausgegeben wird. Ich bekomme aber die FEhlermeldung angezeigt und weiß nicht, was ich machen soll.

Code:
Stein_Papier_Schere.java:7: error: non-static variable player0 cannot be referenced from a static context
   System.out.println(Play.player0.getPlay());
                          ^
1 error
Kann mir jemand helfen?

Main:

Java:
public class Stein_Papier_Schere
{

  public static void main(String[] args)
    {

    System.out.println(Play.player0.getPlay());

  }
}
Klasse:

Java:
public class Play
{
  //Attribut
  private String value;
  //Konstruktor
  public Play (String value)
  {
  this.value=value;
  }
  // Getter und Setter
  public String getPlay()
  {
    this.value=value;
    return value;
  }
  public void setPlay(String value)
  {
    this.value=value;
  }
  Play player0=new Play("test");
  Play player1=new Play("Schere");
  Play player2=new Play("Schere");

public String playmethode()
  {
  if (player1.getPlay()==player2.getPlay())
    {
      player0.setPlay("Gleichstand, bitte noch einmal");
    }
    return player0.getPlay();
  }

}
 
Zuletzt bearbeitet von einem Moderator:
Hi, vorab: bitte Code immer in Code-Tags posten (die drei Punkte neben dem Smiley -> Code -> Java auswählen und Text inkl. Einrückungen in Textfeld einfügen).

Zur Fehlermeldung: Eine Klasse ist dazu da, Objekte zu erzeugen. Du brauchst also erstmal ein Objekt von Play, dann kannst Du auf dessen Attribute und Methoden zugreifen.
 
Und die Logik würde ich auch einmal überprüpfen!

Du hast eine Klasse Play. Diese enthält drei Spieler, die alle auch vom Typ Play sind und bei Erstellung eines Objekts werden die direkt initialisiert.

Also etwas vereinfacht steht da für den Computer folgende Anleitung:
a) Erstelle ein Play mit Namen player0 und weise dem ein Play("test") zu.
b) Erstelle ein Play mit Namen player1 und ....
c) ....

Also was passiert nun wenn du den Computer aufforderst, da was zu erzeugen:
1) Er erstellt das leere Objekt um dann (nach Anleitung) player0 zu füllen ...
2) um player0 zu füllen erzeugt er ein leeres Objekt um dann (nach Anleitung) dessen player0 zu füllen
3) um player0 zu füllen erzeugt er ein leeres Objekt um dann (nach Anleitung) dessen player0 zu füllen
...
Und das läuft dann so lange, bis der Computer sagt: "Hey Du hast einen Vogel - ich habe kein Bock mehr". Das drückt er nur etwas anders aus - in der Regel als Stack Overflow :)

Also sowas vermeidet man am Besten, dass man sich genau überlegt, was für Objekte es gibt. Und wenn eine Instanzvariable irgendwo drin ist, dann kann man klar sagen: "Hat ein": Ein Flugzeug hat ein Höhenmesser.

Aber hat ein Spieler einen Spieler in sich drin? Eher nicht. Also gibt es da doch andere Objekte: Es gibt von mir aus das Spiel selbst. Das hat dann mehrere Spieler.
 
Hier wurden ja schon ein paar Probleme bei der generellen Umsetzung des Programms angesprochen, aber zu deiner Frage wegen der Fehlermeldung:
Die bedeutet, dass du in einer "static" Methode (hier der main-Methode), versuchst, eine Variable, die nicht "static" ist (hier player0) zu verwenden. Das kannst du beheben indem du (nachdem du das Programm mithilfe der anderen Ratschläge hier funktionstüchtig gemacht hast) player0 bei der Erstellung "static" machst. Dazu schreibst du davor einfach static
 
Das kannst du beheben indem du (nachdem du das Programm mithilfe der anderen Ratschläge hier funktionstüchtig gemacht hast) player0 bei der Erstellung "static" machst. Dazu schreibst du davor einfach static
Das ist allerdings genau der Weg, der nicht empfehlenswert ist. static sollten erstmal nur die main und (unveränderliche) Konstanten sein, irgendwelche Objekte aber grad nicht.

Wenn sie das ganze mit den anderen Ratschlägen hier funktionstüchtig gemacht hat, wird auch kein statisches player0 mehr gebraucht ;)
Einmal, weil sie dann ein Objekt hat, mit dem gearbeitet werden kann, und zusätzlich weil es das Feld player0 dann nicht mehr gibt.
 
Passende Stellenanzeigen aus deiner Region:

Oben