Kigo: Schleife für Variablennamen?

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

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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

      1. 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

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. 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

    --
    "Non dura iubeantur, non prohibeantur inpura."
    1. 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

      1. 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

        --
        "Non dura iubeantur, non prohibeantur inpura."
        1. 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

          1. 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

            --
            "Non dura iubeantur, non prohibeantur inpura."
          2. 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

            --
            "Non dura iubeantur, non prohibeantur inpura."
            1. 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

              1. Salvete Daniel,

                ganz schoen umstaendlich; aber es funktioniert.

                Herzlichen Dank!

                MfG,
                Sympatisant

                --
                "Non dura iubeantur, non prohibeantur inpura."