• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Variablenzugriff über string

J

Jhue89

Aktives Mitglied
Guten Morgen Zusammen,


ich habe in meiner Klasse Data Stringvariablen aus dem ganzen Alphabet angelegt.
Jetzt will ich wissen in welcher Variabele etwas drinsteht und bei vorhanden sein eines Wertes diesen dann in eine Tabelle zu schreiben.


Java:
    public String A="";   
    public String B="";   
    public String C="";   
    public String D="";   
    public String E="";   
    public String F="";   
    public String G="";   
    public String H="";   
    public String I="";
Dazu habe ich mir überlegt eine Methode zu verwenden. Jetzt stellt sich für mich die Frage ob ich über einen String eine bestimmte variable abfragen kann.
Sicherlich würde das auch mit einer Switchcase Anweisung gehen, aber das würde ich dann ja auch 24x mal machen.

So hatte ich mir das vorgestellt:

Java:
  public void setValueTable (Data Testdata , String value)
    {
            
        if(testdata + "."+value != "")
        {
            OutputStream(Testdata + "."+value);
            tblSchachtel1.setValueAt(value,rowCounter,0);
            rowCounter++;
        }
 
kneitzel

kneitzel

Top Contributor
Also mir erschließt sich der Sinn noch nicht wirklich. Wenn A-Z (Also die Variablennamen) mit zu den Daten selbst gehören, dann solltest Du es auch als Daten haben, also als Variableninhalt.
Das ginge z.B. über eine Map, die key/value Paare speichert.
 
J

Jhue89

Aktives Mitglied
Also mir erschließt sich der Sinn noch nicht wirklich. Wenn A-Z (Also die Variablennamen) mit zu den Daten selbst gehören, dann solltest Du es auch als Daten haben, also als Variableninhalt.
Das ginge z.B. über eine Map, die key/value Paare speichert.
Naja der Sinn ist halt das ich mir Schreibarbeit spare. Oder wie ist das genau gemeint?

Mit einer Map habe ich noch nicht gearbeitet, aber wenn ich das richtig verstanden habe wird eine "Karte" angelegt mit einer eindeutigen ID in der entsprechende Parameter gespeichert sind. oder
 
temi

temi

Top Contributor
Du solltes mal kurz beschreiben, was du wirklich machen möchtest. Mir scheint, das es da bestimmt einen geschickteren Ansatz gibt.
 
kneitzel

kneitzel

Top Contributor
In einer Map speichert man Key/Value Paare, die über den Key abrufbar sind:
Java:
map<String,String> myMap = new HashMap<>();
myMap.put("A", "Something used for A");
myMap.put("B", "Something used for B");
myMap.put("C", "Something used for C");
System.out.println(myMap.get("A"));

Das einfach nur einmal als kleines Beispiel.

Generell trenne Dich von Variablennamen. Die dienen nur der Lesbarkeit vom Code und können sich immer ändern.
Und Variablen sollten immer ausdrücken, was sie speichern. A, B, ... sind also ganz schlechte Namen!
Das können Auswahlmöglichkeiten sein oder so ... also in einem Programm für den User Sinn machen. Aber im Programmcode sind die fehl am Platz.
 
J

Jhue89

Aktives Mitglied
Du solltes mal kurz beschreiben, was du wirklich machen möchtest. Mir scheint, das es da bestimmt einen geschickteren Ansatz gibt.
Ok, ich versuchs nochmal zu erklären.

Wie bereits gesagt habe ich eine Klasse Daten. Darin enthalt sind unteranderem die Variabelen A,B,C,D usw.

In diese Klasse werden Daten aus einem Json file ausgelesen. Die Json Datei ist so aufgebaut:

JSON:
 "A": 230,
 "B": null,
 "C": 100,
usw...

Diese Daten lese ich dann in meine Klasse ein.

Java:
daten.X = holedate(para, "PARAMETERS", "X");

Jetzt möchte ich "nur" die Daten in einer Tabelle ausgeben die einen Wert beinhalten.

Java:
 if(testdata.X ! = "")
        {           
            tblSchachtel1.setValueAt("X",rowCounter,0);
            rowCounter++;
        }

Da ich aber 24 Buchstaben in meinem jsonFile habe und ich diese abfrage dementsprechend 24x machen muss, gibt es bestimmt einen besseren weg.
Daher die Frage ob ich sowas machen kann:

Java:
  public void setValueTable (Data Testdata , String value)
    {
            
        if(testdata + "."+value != "")
        {
            OutputStream(Testdata + "."+value);
            tblSchachtel1.setValueAt(value,rowCounter,0);
            rowCounter++;
        }
setValueTable(jsondaten, "X");

Ich hoffe jetzt ist es ein bisschen klarer geworden
 
C

CSHW89

Bekanntes Mitglied
Da die Daten in der Json-Datei als Key-Value-Paare gespeichert sind, solltest du die Daten auch genauso in deinem Programm verwalten. Und dafür ist die Datenstruktur Map bestens geeignet.
Klasse Testdaten:
Java:
class Testdaten {
    private Map<String,String> values = HashMap<>();
}
Einlesen der Daten:
Java:
for(char c = 'A'; c <= 'Z'; ++c) {
    String key = ""+c;
    daten.values.put(key, holedate(para, "PARAMETERS", key));
}
Setzen der Tabellendaten:
Java:
public void setValueTable(Data testdata, String key) {
    String value = testdata.values.get(key);
    if (! value.equals("")) {
        OutputStream(value);
        tblSchachtel1.setValueAt(key, rowCounter, 0);   // Hier vermutlich auch 'value' statt 'key'. Hab die Logik aber von deinem Code übernommen
        rowCounter++;
    }
}
 
Thallius

Thallius

Top Contributor
CSHW89 hat gesagt.:
[/code]
Einlesen der Daten:
Java:

for(char c = 'A'; c <= 'Z'; ++c) {
String key = ""+c;
daten.values.put(key, holedate(para, "PARAMETERS", key));
}
Zum Vergrößern anklicken....
Das ist aber eine ganz schlechte Idee. Was passiert wenn im JSON mal ein Buchstabe fehlt oder vertauscht ist?
 
C

CSHW89

Bekanntes Mitglied
Ja das stimmt. Aber so wie ich das sehe, macht der Threadersteller nichts anderes, als für jeden Buchstaben "holedate" aufzurufen. Mein Code ist erstmal eine identische Übersetzung. Falls diese Methode eine Fehlerbehandlung besitzt bzw. ein leeren String zurückgibt, falls der Key nicht existiert, würde ich sagen, kann man das auch so machen. Die bessere Alternative wäre natürlich über die Keys (der Gruppe in) der JSON-Datei zu iterieren.
 
J

Jhue89

Aktives Mitglied
Da die Daten in der Json-Datei als Key-Value-Paare gespeichert sind, solltest du die Daten auch genauso in deinem Programm verwalten. Und dafür ist die Datenstruktur Map bestens geeignet.
Klasse Testdaten:
Java:
class Testdaten {
    private Map<String,String> values = HashMap<>();
}
Einlesen der Daten:
Java:
for(char c = 'A'; c <= 'Z'; ++c) {
    String key = ""+c;
    daten.values.put(key, holedate(para, "PARAMETERS", key));
}
Setzen der Tabellendaten:
Java:
public void setValueTable(Data testdata, String key) {
    String value = testdata.values.get(key);
    if (! value.equals("")) {
        OutputStream(value);
        tblSchachtel1.setValueAt(key, rowCounter, 0);   // Hier vermutlich auch 'value' statt 'key'. Hab die Logik aber von deinem Code übernommen
        rowCounter++;
    }
}

Erstmal Danke für eure Hilfe.

Also wenn ich das richtig verstanden habe, komme ich um einen Hashmap nicht herum. Ich versuche das mal umsetzen.

Diesen Teil verstehe ich aber noch nicht so ganz.
Wo muss ich diese Klasse erstellen?
Klasse Testdaten:
Java:
class Testdaten {
    private Map<String,String> values = HashMap<>();
}

Kannst du das nochmal ein bisschen genauer eklären.

In der Methode holedaten ist bereits eine Fehlerabfrage enthalten. (abfrage auf ."isJsonNull").
 
N

Neumi5694

Bekanntes Mitglied
Das ist aber eine ganz schlechte Idee. Was passiert wenn im JSON mal ein Buchstabe fehlt oder vertauscht ist?
Was verstehst du unter "vertausche Buchstaben"?

Für den Fall, dass die Map im JSON korrupt ist (also doppelte keys enthält), lass ich solche nie direkt einlesen, da z.B. GSON bei doppelten keys einfach abbricht. Stattdessen schalte erst mal eine TupelListe vor, die auch doppelte Keys erlaubt und füge erst dann ein - gegebenenfalls mit Fehlerbehandlung. So viel Zeit muss sein.

Falls keys fehlen, dann muss man halt sicherstellen, dass die Map nach dem Einlesen immer alle notwendigen Keys enthält, schlimmstenfalls über computerIfAbsent. Das sollte aber nicht notwendig sein, falls null als Value erlaubt ist.

Alles in einzelne Variablen einer Klasse zu speichern, hat natürlich auch seine Daseinsberechtigung. In diesem Fall ist es vielleicht nicht sinnvoll.

@ JHUE89 anstatt einer Map<String,String> kannst du auch ein Properties-Objekt verwenden, was im Grunde auch nur eine Map ist mit schönerem Namen.
Du musst "TestDaten" gar nicht nicht erstellen, wichtig ist das nur, wenn du einen vorgefertigten Automatismus zum Einlesen verwendet und die Map nicht direkt im JSON steht, sondern in ein anderes Objekt eingebettet ist.
Mach mal folgendes: Erstell dir die Klasse so wie beschrieben, befüll ein paar Werte wie von kneitzel beschrieben.
Dann speichere einmal nur die Map nach JSON, danach die Klasse, welche die Map enthält, damit du den Unterschied siehst.
Wenn ersteres der Struktur deiner Quelldatei entspricht, dann brauchst du gar keine Wrapper-Klasse.
 
C

CSHW89

Bekanntes Mitglied
Deine Variable "Testdata" hat mich verwirrt. In der Klasse, in der alle deine Variablen "A" bis "Z" sind, benötigt die Map. Dafür kannst du dann die "A"-"Z" Variablen rausschmeißen. Bei dir heißt sie, glaub ich, "Data".
 
J

Jhue89

Aktives Mitglied
Ich bin begeistert. Es hat ein bisschen gedauert und ich musste auch einiges nachlesen aber jetzt funktioniert es.

Vielen Dank für eure super Unterstützung!
 
J

Jhue89

Aktives Mitglied
Das ist aber eine ganz schlechte Idee. Was passiert wenn im JSON mal ein Buchstabe fehlt oder vertauscht ist?
Ich habe grade nochmal mögliche Fehler durch gespielt.

Wenn eine Varibale in der json Datei nicht vorhanden ist, bekomme ich eine Exception.
Java:
    if (para.get(2).getAsJsonObject().getAsJsonObject(objekt).get(value).isJsonNull())
damit habe ich versucht den Fehler abzufangen.

Aber als Meldung bekomme ich das zurück.

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "com.google.gson.JsonElement.isJsonNull()" because the return value of "com.google.gson.JsonObject.get(String)" is null

    at classes.getJson.holedate(getJson.java:119)

Natürlich ist die Variable ist in der Datei nicht vorhanden und daher der Fehler, aber wie kann ich das noch abfragen?
 
kneitzel

kneitzel

Top Contributor
Natürlich ist die Variable ist in der Datei nicht vorhanden und daher der Fehler, aber wie kann ich das noch abfragen?
Der Wert ist in JSON ja nicht null sondern nicht vorhanden. Daher musst du prüfen, ob das get(value) null zurück gibt und kein isJsonNull aufrufen:
Java:
if (para.get(2).getAsJsonObject().getAsJsonObject(objekt).get(value) == null)
 
kneitzel

kneitzel

Top Contributor
Ansonsten vielleicht wichtig: Wenn Du das ganze Json einlesen willst, dann kann es ausreichen, einfach eine entsprechende Klasse zu erstellen und dann eine Library wie gson zu nutzen, um eben aus dem Json eine Instanz der Klasse zu bekommen. Wenn Du also nicht nur ein paar einzelne Werte brauchst, dann iss das ggf. der einfachste Weg.
 
J

Jhue89

Aktives Mitglied
Danke, jetzt ist das Programm erstmal wieder safe...

Eigentlich benötige ich nur einen kleinen Teil der Datei. Die Datei an und für sich besteht noch aus vielen weiteren Elementen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Variablenzugriff / Wert in Array überprüfen Java Basics - Anfänger-Themen 7
D Variablenzugriff auf übergeordnete Objekte? Java Basics - Anfänger-Themen 6
G Variablenzugriff Java Basics - Anfänger-Themen 8
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
M Java Kompilieren über Package grenzen hinaus Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
I GUI über Eclipse oder NetBeans Java Basics - Anfänger-Themen 23
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
O Methode über Leerzeichen Java Basics - Anfänger-Themen 13
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
UnknownInnocent Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
UnknownInnocent Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
G Arraynamen über eine Schleife ansprechen Java Basics - Anfänger-Themen 4
S Bild über JButton legen Java Basics - Anfänger-Themen 3
temi Druckeransteuerung über ESC-Sequenz Java Basics - Anfänger-Themen 21
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
P Threads Prozess kann nicht über die GUI gestartet werden Java Basics - Anfänger-Themen 8
T CMD über Java-Programm aufrufen Java Basics - Anfänger-Themen 2
X Finde die Files über FTP nicht Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
P Programm kann über CMD nicht ausgeführt werden Java Basics - Anfänger-Themen 2
E Frage über Speichern und Ausgabe Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
X Betriebssytem interne Consolen Commands über Java starten Java Basics - Anfänger-Themen 2
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
A .jar über Webbrowser aufrufen Java Basics - Anfänger-Themen 2
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
B OOP Über eine doppelt verkettete Liste iterieren Java Basics - Anfänger-Themen 4
D Ausgabe über JLabel Java Basics - Anfänger-Themen 12
L Erste Schritte Arrays über eine for Schleife ansprechen. Java Basics - Anfänger-Themen 6
M Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
K Objekt soll Anwendung über Änderungen informieren Java Basics - Anfänger-Themen 8
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
F Gewichteter Mittelwert über eine Zeitperiode Java Basics - Anfänger-Themen 3
B Schleife über einen Container Java Basics - Anfänger-Themen 7
Henri Paare Frage über Java Programmierung Java Basics - Anfänger-Themen 10
T jar von stick aus über jre auf stick starten Java Basics - Anfänger-Themen 6
L Iterieren über ArrayList Java Basics - Anfänger-Themen 1
D Java doppelte Zahlen auch über 10 in einem String entfernen Java Basics - Anfänger-Themen 2
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
O Über Map laufen Erklärung Java Basics - Anfänger-Themen 4
U Best Practice Buttons sollen ÜBER Labeln liegen, also quasi im Vordergrund. WIE? Java Basics - Anfänger-Themen 4
F Methoden aus anderer classe über nehmen Java Basics - Anfänger-Themen 10
N .propertiesdatei über Relativen Pfad einlesen lassen Java Basics - Anfänger-Themen 5
G Input/Output CSV-Datei über Java-Programm erstellen, Zeichensalat Java Basics - Anfänger-Themen 3
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
AssELAss Über ein Objekt vom Typ BigDecimal iterieren Java Basics - Anfänger-Themen 6
D Werte von Variablen über Methode ändern Java Basics - Anfänger-Themen 10
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
O Input/Output Ein (negatives) Byte über PrintWriter hinausschreiben Java Basics - Anfänger-Themen 3
F Problem bei eshop -> Ausführen einer Methode über eine Shopverwaltung Java Basics - Anfänger-Themen 6
Thallius Hidden Feature über Key Event starten Java Basics - Anfänger-Themen 4
D Erste Schritte Frage über .length in Strings Java Basics - Anfänger-Themen 4
V AD per LDAP anbinden über Java Java Basics - Anfänger-Themen 2
D ItemsateChangeEvent über 3 Panels Java Basics - Anfänger-Themen 1
F Glassfish APP über SSL ausführen Java Basics - Anfänger-Themen 0
L Über 100e Werte anzeigen Java GUI Java Basics - Anfänger-Themen 1
M Löschen von Objekten während Iteration über Liste Java Basics - Anfänger-Themen 9
0 Über CMD die JAVA Datei ausführen? möglich? Java Basics - Anfänger-Themen 8
L String extrahieren mit Regular Expression über mehrere Zeilen hinweg Java Basics - Anfänger-Themen 1
I Werte im Speicher auswerten ohne Umweg über eine Datei Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Anzeige

Neue Themen


Oben