Schleife für Variablennamen?
Kigo
- java
Hallo,
ich habe folgendes Problem:
Ich benötige Variablendeklarationen innerhalb einer Schleife. Dabei weiß ich nicht, wie oft diese Schleife durchlaufen wird (das hängt von der Anzahl der Treffer einer Suchanfrage ab). Für jeden Treffer muss ich nun eine Reihe an Variablen deklarieren.
Gibt es eine Möglichkeit diese Deklaration in einer Schleife laufen zu lassen und dabei den Laufindex in den Variablennamen einzubauen.
Im Prinzip sowas wie:
for(i=0; i<anzahlDerTreffer; i++){
String testvariable_i = "blablubb";
}
was aber so natürlich nicht geht ;).
Grüße
Sascha
Hi,
Ich benötige Variablendeklarationen innerhalb einer Schleife. Dabei weiß ich nicht, wie oft diese Schleife durchlaufen wird (das hängt von der Anzahl der Treffer einer Suchanfrage ab). Für jeden Treffer muss ich nun eine Reihe an Variablen deklarieren.
auch in Java gibt es Arrays und ähnliche Klassen. Für sowas, was auch gerne mal "variable Variablen" genannt wird, sehe ich in *keiner* Sprache einen Grund - und wenn es doch eine gibt, sollte sie sich schämen.
was aber so natürlich nicht geht ;).
Java gehört glücklicherweise zu den Sprachen, in denen Dir hierfür Steine und Hindernisse aller Art in den Weg gelegt werden - notfalls mit Gewalt. Merke Dir für die Zukunft, dass Deine Idee so ziemlich eines der miesesten Konzepte ist, die man sich im Bereich der Programmierung überlegen kann.
Cheatah
Grundlage für Zitat #1114.
Hallo,
Java gehört glücklicherweise zu den Sprachen, in denen Dir hierfür Steine und Hindernisse aller Art in den Weg gelegt werden - notfalls mit Gewalt.
Reflection? ;-)
Gruß
Slyh
Hi,
Java gehört glücklicherweise zu den Sprachen, in denen Dir hierfür Steine und Hindernisse aller Art in den Weg gelegt werden - notfalls mit Gewalt.
Reflection? ;-)
ich hab ja nicht gesagt, es sei unmöglich ;-)
Cheatah
Salvete,
da gibt es einige Moeglichkeiten.
Zum Beispiel kannst du mit einem Array arbeiten:
String[] myStringArr = new String[]{}; // groesse = anzahlDerTreffer
for(int i=0; i<anzahlDerTreffer; i++){
myStringArr[i].add("blablubb");
}
..oder mit einer Liste:
List myList = new ArrayList(anzahlDerTreffer);
for(int i=0; i<anzahlDerTreffer; i++){
myList.add("blablubb");
}
Wobei du im letzteren Falle auch eine foreach-Schleife nutzen koenntest,
da du den Index (i) dann ja nichts benoetigst.
MfG,
Sympatisant
Hallo,
String[] myStringArr = new String[]{}; // groesse = anzahlDerTreffer
Dir ist klar, dass du damit ein Array der Größe 0 erzeugst, ja?
Wieso nicht so?
String[] myStringArr = new String[anzahlDerTreffer];
Gruß
Slyh
Salvete Slyh,
String[] myStringArr = new String[]{}; // groesse = anzahlDerTreffer
Dir ist klar, dass du damit ein Array der Größe 0 erzeugst, ja?
Der Kommentar sollte lediglich aussagen, dass er es auch der Groesse anpassen kann.
Vielleicht haette ich es deutlicher darstellen koennen, OK. Aber einen
Mindestverstand darf man dem OP ja durchaus voraussetzen ;)
MfG,
Sympatisant
Hallo Sympatisant,
Der Kommentar sollte lediglich aussagen, dass er es auch der Groesse anpassen kann.
Nicht kann, muss. Arrays wachsen ja nicht.
Dieser Code funktioniert einfach erstmal nicht:
String[] myStringArr = new String[]{}; // groesse = anzahlDerTreffer
for(int i=0; i<anzahlDerTreffer; i++){
myStringArr[i].add("blablubb");
}
Einmal natürlich wegen des leeren Arrays und wegen des Aufrufs von "add". Das gibt sogar schon einen Kompilerfehler, aber vielleicht hast Du das nur aus Versehen von der Variante mit der Liste kopiert.
Korrekt sollte es jedenfalls so aussehen:
String[] myStringArr = new String[anzahlDerTreffer];
for(int i=0; i<anzahlDerTreffer; i++){
myStringArr[i] = "blablubb";
}
Grüße
Daniel
Salvete Daniel,
Mensch; so wenig Code - und so viele Fehler. Ohne Compiler ist man gar
nicht mehr gewohnt ;-)
[..] aber vielleicht hast Du das nur aus Versehen von der Variante
mit der Liste kopiert.
Exakt.
Korrekt sollte es jedenfalls so aussehen:
[code lang=java]
String[] myStringArr = new String[anzahlDerTreffer];
for(int i=0; i<anzahlDerTreffer; i++){
myStringArr[i] = "blablubb";
}
Jetzt sollte es stimmen.
MfG,
Sympatisant
Salvete,
ich musste feststellen, dass man den Text eines JLabels nur mittels des
Praefixes <html><u> (bzw. des Suffixes /</u><html>) unterstreichen lassen kann.
Die Font-Klasse bietet nur die Moeglichkeiten hinsichtlich der Verwendung
von Italic und Bold.
Nun ist es jedoch so, dass sich die Darstellung des Textes dann anders
verhaelt. Zum Beispiel wird automatisch umgebrochen, wenn der Text zu
lang ist. Das Default-Verhalten - und zwar das Abschneiden des Textes und
das Hinzufuegen dreier Punkte am Ende - wird zudem umgangen. Und wenn in
dem String auch noch irgendwelcher HTML-Code steht, so wird dieser natuerlich
auch umgesetzt.
Frage:
Gibt es eine alternative Moeglichkeit einen Text zu unterstreichen?
Oder kann ich, wenn ich hmtl und <u> verwende, dennoch das Default-Verhalten
(Abschneiden des Textes bei Ueberlaenge*) implementieren?
Danke & Gruss
* Das manuell zu machen, sprich, die Anzahl der Zeichen zu zaehlen, reicht
nicht aus, da zb Grossbuchstaben mehr Platz einnehmen als Kleinbuchstaben.
MfG,
Sympatisant
Hallo Sympatisant,
Die Font-Klasse bietet nur die Moeglichkeiten hinsichtlich der Verwendung von Italic und Bold.
Nein, man kann noch jede Menge anderer Attribute hinzufügen, auch eines für Unterstreichung. Fett- bzw. Schrägdruck sind unterschiedliche Schriftschnitte für die idR. auch eigene Glyphen vorhanden sind. Die Unterstreichung hingegen wird beim Rendern der Schriftart hinzugefügt. Deswegen wird das in der API auch anders gehandhabt, auch wenn gängige Textverarbeitungsprogramme das zusammenfassen ;-)
Schriftart, -schnitt und -größe bestimmen, welche Glyphen das Font-Objekt wirklich repräsentiert. Die hinzugefügten Attribute sagen dem Renderer dann, wie er die Glyphen erst noch transformieren soll. Da kann man auch so Kram machen wie Zeichen zu drehen oder zu verzerren.
Der Doku zu folge sollte so etwas gehen:
Font font = Font.decode("Verdana 12").derive(Collections.singletonMap(TextAttributes.UNDERLINE, TextAttributes.UNDERLINE_ON))
Daniel
Salvete Daniel,
ganz schoen umstaendlich; aber es funktioniert.
Herzlichen Dank!
MfG,
Sympatisant