Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich versuche eine Variable an das this zu hängen, bekomme sie aber nicht ausgewertet, gibt es einen Trick.
Mit der auskomentiereten Zeile funktioniert es . Die Varialbe AusgabeFeldName ist String.
Wenn ich den Compiler dazu bewegen könnte AusgabeFeldName erst auszuwerten und dann den Verweis zu erzeugen dann wäre die Welt in Ordnung und könnte das Konzept auch auf andere Felder im Formular umsetzen.
erstens:
Variablendefinitionen werden mit Semikolon abgeschlossen.
zweitens:
Es ist Dir doch klar, dass Du mit dem Zuweisungsoperator "=" keine Variable vom Typ String einer Variablen vom Typ Label zuweisen kannst, oder?
Man kann nur raten, was Du tun willst.
Was heißt Du willst eine Variable an das this anhängen?
Versteh ich nicht.
this wird verwendet man, wenn man sich auf die Instanz eines bjekts beziehen will, indem man sich gerade befindet. Du bekommst also Zugriff auf ALLE Deine Klassenattribute und Methoden. Da wird nix angehangen.
Deine auskommentierte Zeile hilft uns überhaupt nicht, weil man nicht erkennt, welchen Typ "ausgabe6" hat.
Die letzte Zeile ist der richtige Weg, um einem Label einen text zuzuweisen.
Also schreib nochmal genauer (in Lehrbuchsprache) was Du eigentlich machen willst...
Ich habe nur ZeilenAuszüge in den Code geschrieben, die Sache mit dem Semikolon ist mir klar.
Grundsätzlich funktioniert auch alles wenn ich die auskomentiert Zeile verwende.
hier erst einmal der ganze Code
Code:
void meineMethode()
{
// Variablendeklaration __________________________
int FlagVorz; // Statische Variable
int Zeilen;
int Zahl; // Normale Variable
int BasisZahl; //
String AusgabeFeldName; //
Random r = new Random();
// Variablen Inialisierung
Zahl = 1;
FlagVorz = 1;
Zeilen = 1;
Zahl += 47;
AusgabeFeldName = "";
for (Zeilen = 1; Zeilen<7; ++Zeilen) {
// Datentypenkonvertierung von String nach Integer
Integer BasisWert = new Integer(TP11.getText());
BasisZahl = BasisWert.intValue();
FlagVorz = Math.abs(r.nextInt()) % 2;
if (FlagVorz == 0)
Zahl = BasisZahl + Math.abs(r.nextInt()) % 6;
else
Zahl = BasisZahl - Math.abs(r.nextInt()) % 6;
//System.out.println(AusgabeFeldName);
AusgabeFeldName = "ausgabe" + (Zeilen);
Label AktAusgabe = this.AusgabeFeldName;
//Label AktAusgabe = this.ausgabe6; // funktioniert
AktAusgabe.setText(" " + Zahl);
ausgabe2.setText(AusgabeFeldName);
}
}
Um es nicht allzu lang werden zu lassen.
ausgabe1 bis ausgabe6 sind label
TP11 bis TP16 sind Textfelder
Alles wird in Panels im Fenster dargestellt.
alles funktioniert mit Zeile 40 und wird in der Klasse im Fenster dargestellt, den Code habe ich jetzt nicht gepostet.
Mit Zeile 39 funktioniert es jedoch nicht.
Problem ist das ich den Kompiler dazu bekommen möchte erst AusgabeFeldName auszuwerten bevor er Label AktAusgabe erstellt. Also in der ForSchleife ausgabe1 bis ausgabe6 erzeugt.
...wilst Du bezwecken, dass der WERT (Inhalt) der String-Variablen "AusgabeFeldName", was in dem Fall der String "ausgabe" und ein int-Wert "6" ist...sprich "ausgabe6", als VariablenName angesehen wird, was ein Label bezeichnen würde. OMG!
So geht das nicht. String bleibt String. Der Wert einer Variablen ist nicht gleich einer Variablen die genauso heißt wie der Wert ist!
Merk Dir das...WICHTIG!
Du kannst es aber einfacher haben, indem Du Deine Label in ein Array steckst Label[] labelArray. Wenn Du dann deine "Zeilen" durcgehst, hast Du einen Index. Du fängst bei 1 an, deswegen musst Du mit labelArray[Index-1] auf Dein label-Array zugreifen und bekommst das Label was Du haben willst.
Ich muss mir jetzt mal das mit der Variable klar machen und dann die Variante mit dem Array ausprobieren.
Ich benutze gerade die Beispiele aus den Javabüchern und probiere ein paar Sachen in dem Umfeld aus um zu lernen, deshalb auch die unprofessionellen Beschreibungen.
Auf jeden Fall schönen Dank für die Hilfe, ich denke ich brauch jetzt erst mal ein bißchen Zeit um das zu probieren.
Mit den Arrays habe ich noch nichts gemacht, ist denn labelArray ein Objekt wie Label oder TextField usw.
Ich weiß ja, das man Array definieren kann, das habe ich aber immer in dem Zusammenhang, Datenstrukturen in Form von Tabellen mit Werten gesehen, Sie als Struktur für Felder zu nutzen kenn ich noch nicht.
kein Ding.
Ist schon richtig, dass ein Array eine Struktur ist, um mehrere Dinge des gleichen Typs gebündelt im Programm vorzuhalten.
Ein int-Array nimmt nur ints auf, ein String-Array nur Strings und man kann eben auch Label in ein Array packen, sofern man das Array vom Typ Label macht.
Aber mit den JavaBüchern schaffst Du das schon. Ist das gleiche wie mit int oder string.
void meineMethode() {
// Variablendeklaration __________________________
int FlagVorz; // Statische Variable
int Zeilen;
int Zahl; // Normale Variable
int BasisZahl; //
String AusgabeFeldName; //
Random r = new Random();
// Variablen Inialisierung
Zahl = 1;
FlagVorz = 1;
Zeilen = 1;
Zahl += 47;
AusgabeFeldName = "";
for (Zeilen = 1; Zeilen < 7; ++Zeilen) {
// Datentypenkonvertierung von String nach Integer
// Integer BasisWert = new Integer(TP11.getText());
// BasisZahl = BasisWert.intValue();
// SLi: Das geht auch so...
// ... Exceptions mal außen vor...
BasisZahl = Integer.parseInt(TP11.getText());
FlagVorz = Math.abs(r.nextInt()) % 2;
if (FlagVorz == 0)
Zahl = BasisZahl + Math.abs(r.nextInt()) % 6;
else
Zahl = BasisZahl - Math.abs(r.nextInt()) % 6;
// System.out.println(AusgabeFeldName);
AusgabeFeldName = "ausgabe" + (Zeilen);
// Diese zeile gibt Dir genau das Label zurück, was Du haben willst.
// Ob das speichern in einer anderen Variable nötig ist, weiß ich nicht...
Label AktAusgabe = meinLabelArray[Zeilen-1];
// Ginge auch so:
meinLabelArray[Zeilen-1].setText(" " + Zahl);
ausgabe2.setText(AusgabeFeldName);
}
}
Nochmal allgemein:
1. Variablennamen bitte klein schreiben.
2. Variablen im kleinst möglichen und größt nötigen Bereich definieren. Heißt...nur da wo sie gebraucht werden... nicht per se oben in der Methode.