Auf Methode zugreifen von anderen Klassen

S

SteveT

Mitglied
Hallo,

ich programmiere ein TextAdventure und habe in einer Klasse ein Objekt (Raum) erstellt. In der selben Klasse möchte ich nun auch übersichtshalber die Räume deklarieren. Wenn kein Modifier vor der Methode steht ist es doch vom selben Package aus zugänglich oder? Dann müsste es doch eig kein Problem sein oder?
Alternativ habe ich in der selben Klasse eine Methode erstellt (ist im Hauptcode auskommentiert) aber darauf kann auch nicht zugegriffen werden.
Als Fehlermeldung kommt in Zeile 77: "r cannot be resolved to a variable"

Hier der Code zur Raum Klasse:
Java:
package com.Steve.tak;

public class Raum {


    String beschra;
    int[] hr = new int[4];


    Raum(String beschr, int n, int s, int o, int w) {
        beschra = beschr;
        hr[0] = n;
        hr[1] = s;
        hr[2] = o;
        hr[3] = w;
    }
    void räume() {
        Raum[] r = new Raum[2];
        r[0] = new Raum("", -1, 2, 3, 4);
        r[1] = new Raum("", 2, 4, -1, -1);


    }
}

Und zum "Hauptcode":
Java:
package com.Steve.tak;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;


public class Norden extends Activity implements View.OnClickListener {


    Button norden;
    Button süden;
    Button osten;
    Button westen;
    Button untersuchen;
    TextView tv;
    TextView ausgabe;
    int derraum = 0;
    int gesundheit = 3;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);


        setContentView(R.layout.activity_main);


        initialize();
        // räume();


    }


    private void initialize() {
        // TODO Auto-generated method stub
        norden = (Button) findViewById(R.id.norden);
        süden = (Button) findViewById(R.id.sueden);
        osten = (Button) findViewById(R.id.osten);
        westen = (Button) findViewById(R.id.westen);
        untersuchen = (Button) findViewById(R.id.untersuchen);


        tv = (TextView) findViewById(R.id.tv1);
        ausgabe = (TextView) findViewById(R.id.ausgabe);


        Spieler spieler = new Spieler(0, 3, 1, "", new String[] {});
    }




      /*private void räume() {
      Raum[] r = new Raum[2]; r[0] = new Raum("", -1, 2, 3, 4); 
      r[1] = new Raum("jfasdf", 2, 4, -1, -1);
     }*/




    @Override
    public void onClick(View btn) {
        // TODO Auto-generated method stub
        while (gesundheit > 0) {


            tv.setText(r[derraum].beschr);


        }
    }


}

Vielen Dank für eure Hilfe!
PS. Das ist mein erster Post, seid Gnädig:)
 
Zuletzt bearbeitet:
C

camelCase90

Aktives Mitglied
Man gibt immer public, protected oder private an.

Gibt man das nicht an, wird automatisch der Default-Modifikator angewendet. Sichtbarkeit im eigenen Package ja.

Aber in der Hauptklasse rufst Du die Methode räume() überhaupt gar nicht auf. Du rufst stattdessen eine Variable r auf, die Du in der Klasse auskommentiert hast.

Außerdem müsstest Du den String beschra und nicht beschr aufrufen, da beschr im Kontrukter als Parameter-Variable dient.

Wenn Du die räume() Methode in der Hauptklasse aufrufen möchtest brauchst Du erstmal eine Objektreferenz oder Du musst die Methode static machen, dann kannst Du die Methode über Raum.räume(); ohne Objektreferenz aufrufen.
 
Zuletzt bearbeitet:
S

SteveT

Mitglied
Ich habe meinen Code jetzt geändert, aber ich muss noch irgendwas falsch gemacht haben,denn die Fehlermeldung bleibt.

Java:
package com.Steve.tak;

public class Raum {


	String beschr;
	int[] hr = new int[4];


	Raum(String beschra, int n, int s, int o, int w) {
		beschr = beschra;
		hr[0] = n;
		hr[1] = s;
		hr[2] = o;
		hr[3] = w;
	}
	public static void räume() {
		Raum[] r = new Raum[2];
		r[0] = new Raum("", -1, 2, 3, 4);
		r[1] = new Raum("", 2, 4, -1, -1);


	}
}

Java:
package com.Steve.tak;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;


public class Norden extends Activity implements View.OnClickListener {


	Button norden;
	Button süden;
	Button osten;
	Button westen;
	Button untersuchen;
	TextView tv;
	TextView ausgabe;
	int derraum = 0;
	int gesundheit = 3;


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);


		setContentView(R.layout.activity_main);


		initialize();
		Raum.räume();


	}


	private void initialize() {
		// TODO Auto-generated method stub
		norden = (Button) findViewById(R.id.norden);
		süden = (Button) findViewById(R.id.sueden);
		osten = (Button) findViewById(R.id.osten);
		westen = (Button) findViewById(R.id.westen);
		untersuchen = (Button) findViewById(R.id.untersuchen);


		tv = (TextView) findViewById(R.id.tv1);
		ausgabe = (TextView) findViewById(R.id.ausgabe);


		Spieler spieler = new Spieler(0, 3, 1, "", new String[] {});
	}


	@Override
	public void onClick(View btn) {
		// TODO Auto-generated method stub
		while (gesundheit > 0) {


			tv.setText(r[derraum].beschr);


		}
	}


}
 
C

camelCase90

Aktives Mitglied
Mach bei der räume Methode aus void -> raum[] und füge ein return r am ende der Methode ein. Füge am Anfang der Klasse unter den anderen Attributen private Raum[] r; und mach aus Raum.räume() -> r = Raum.räume();
 
Zuletzt bearbeitet:
S

SteveT

Mitglied
Es klappt jetzt, aber nicht, wenn ich Raum[] r = Raum.räume(); in eine andere Methode reinschreibe. An sich ist das nicht schlimm, aber mich würde es interessieren wieso das so ist. Sind initialisierte Objekte global oder wie kann ich mir das vorstellen?
 
C

camelCase90

Aktives Mitglied
Variablen, die du innerhalb von Methoden erzeugst nennt man lokale Variablen und können nur innerhalb der Methoden genutzt werden. Um Variablen in der kompletten Klasse nutzen zu können musst Du den Statischenteil (Objektname Variablennamen;) innerhalb der Klasse und außerhalb von Methoden deklarieren, als sogenannten Membervariablen oder auch Attribute.Die dynamischen Werte(new Raum() z.B) kannst Du dann innerhalb von Methoden etc ändern.

Das ganze kannst Du zum Beispiel auch hier nochmal nachlesen:

Tutorial / Java Grundlagen / Variablen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Regelmäßig eine Methode im Hintergund ausführen Android & Cross-Platform Mobile Apps 1
K Methode wird nicht gefunden Android & Cross-Platform Mobile Apps 1
L Android Methode funktioniert nicht unter Android Android & Cross-Platform Mobile Apps 3
R Android App mit Datenbankeinträgen und Math.random() Methode programmieren Android & Cross-Platform Mobile Apps 0
J Android button mithilfe einer Methode automatisch erstellen Android & Cross-Platform Mobile Apps 6
Z Canvas onDraw() Variablen muss in der Methode initialisiert werden Android & Cross-Platform Mobile Apps 1
S Back-Button Methode überschreiben Android & Cross-Platform Mobile Apps 2
G eine Methode einer anderen Activity aufrufen Android & Cross-Platform Mobile Apps 9
P Android Sort Methode von ArrayAdapter überschreiben Android & Cross-Platform Mobile Apps 5
K Apps durchsuchen nach verwendeter Methode Android & Cross-Platform Mobile Apps 4
F Android Fehlermeldung bei onClick-Methode Android & Cross-Platform Mobile Apps 2
R Meine arctan-Methode geht nicht Android & Cross-Platform Mobile Apps 6
U Probleme mit der drawString Methode bei Canvas Android & Cross-Platform Mobile Apps 8
N Android Ich kann mit meiner App nicht auf die Datenbank zugreifen Android & Cross-Platform Mobile Apps 2
A Von verschiedenen Klassen auf Thread zugreifen Android & Cross-Platform Mobile Apps 2
J Android BroadcastHandler extends BroadcastReceiver; auf Activity zugreifen? Android & Cross-Platform Mobile Apps 5
A Android Von einem Thread auf anderen zugreifen Android & Cross-Platform Mobile Apps 3
K Android DialogFragment mit SimpleCursorAdapter: Auf Daten zugreifen? Android & Cross-Platform Mobile Apps 4
C Auf innere (Thread)Klasse zugreifen, von anderer Klasse aus Android & Cross-Platform Mobile Apps 3
S Android Auf Funktionen zwischen Activitys zugreifen Android & Cross-Platform Mobile Apps 3
M Android Von Smartphone auf Daten von Server zugreifen Android & Cross-Platform Mobile Apps 2
T Android App auf sms zugreifen Android & Cross-Platform Mobile Apps 1
G Auf vorhandene Dateien zugreifen Android & Cross-Platform Mobile Apps 6
F Projekt mit GIT auf anderen Rechner umgezogen Android & Cross-Platform Mobile Apps 2
L Android Marker mit Icons versehen und mit anderen icons clustern lassen Android & Cross-Platform Mobile Apps 0
H Android Aufrufen von "setContentView" in einer anderen Klasse Android & Cross-Platform Mobile Apps 3
A Kann nicht in TextView einer anderen Klasse schreiben - wieso? Android & Cross-Platform Mobile Apps 9
M Wie in einer anderen "nicht canvas" klasse zeichne Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben