Datentypen List - gleiche Einträge bei neuen Objekten

J

JayGabriel

Gast
Hallo, ich hoffe, mir kann hier jemand weiter helfen und hoffe, dass ich hier auch richtig bin.

Mein Problem:
Ich hole mit über ein WebService ein Datanarray, welches ich selbst noch aufbereiten muss, um die entsprechenden Werte
in einer ArrayList von einer selbst erstellten Struktur zu speichern.

Das Auslesen über den WebService klappt soweit, mit Testausgaben habe ich die Einträge überprüft.
Jetzt wollte ich die ArrayList in einer For Schleife füllen lassen und gehe mit der Zählvariablen i durch das mir zugeschickte
Array. Mit add(Objekt) hatte ich es als erstes Versucht, dass das nicht klappt ist klar, da es nur Refferenzen speichert.
Doch auch wenn ich "add(new Objet("meineWerte")" benutze, habe ich jedes Mal die gleichen Einträge nur noch in dem
ArrayList.

Kann mir jemand sagen, wo mein Denkfehler sein könnte? Nicht mal mit einem Array statt einer ArrayList, wo ich explizit
die Felder, wo er hineinschreiben soll mit den Zählvariablen bzw. hardcoded eintrage, klappt es.

Code:

Java:
//das ist das Array, was ich mir herhole
subs_list = mmod.getSubscriptionInformations(clientID);

for(int i=0; i<subs_list.length; i++) {
    //hier leg ich mir eine neue Struktur an, um meine Werte schließlich entsprechend dann zuzuordnen
    subscription = new SubscriptionData();

    //da es ein Test ist, lass ich nur Testwerte erst einmal eintragen
    subscription.setProdukt("produkt"+i);

    //hinzufügen
    subscriptions.add(subscription);

    //testausgabe
    testausgabe = subscriptions.get(0).getProdukt();
}//for

Die Struktur SubscriptionData besteht nur aus 5 StringVariablen, mit den entsprechenden Gettern und Settern und zwei Konstruktoren (einer leer, einer mti dem man die 5 Werte gleich übergeben kann).

Ich denk, es wird einfach nur ein Knoten in meinem Gehirn sein, aber ich hoff, ich könnt mir trotzdem helfen. ;)

mfg
Jay
 
Zuletzt bearbeitet von einem Moderator:

faetzminator

Gesperrter Benutzer
[c]testausgabe = subscriptions.get(0).getProdukt();[/c]
->
[c]testausgabe = subscriptions.get(i).getProdukt();[/c]
?

"geaddete" Objekte werden hinten angehängt.
 
J

JayGabriel

Gast
das ist schon klar, dass die hinten angehängt werden. Aber die geaddeten Objekte überschreiben bei mir ständig die
Objekte, die vor ihnen geaddet wurden!

mit meiner testausgabe versucht ich auf das erste Objekt (also 0) der Liste zuzugreifen, um zu sehen, ob auch das
erste und nicht das letzte drin steht. Aber auch wenn ich auf eins in der Mitte zugreifen, ist es egal, denn es ist immer
das gleiche.
 

faetzminator

Gesperrter Benutzer
Da fällt mir gerade auf, du machst in der Schleife gar keine Ausgabe. Diese Variable wird dann natürlich immer überschriben. Poste doch den gesamten Code des Tests und/oder ein KSKB.
 
J

JayGabriel

Gast
Das wär meine gesamte Methode, die sich halt die Daten aus ner Klasse holt, die den WebService anspricht.
Ausgelöst wird die Methode, wenn man auf ner Webseite nen Button klickt.

Java:
public void processAction(ActionEvent arg0) throws AbortProcessingException {
    mmod = Model.getInstanz();
    helper = new ToStringHelpClass();
    subscriptions = new ArrayList<SubscriptionData>();
    mmod.setClientID(clientID);
    client = mmod.getClientInformations(clientID);
  
    if(client != null)
    {
      name = client.getName();
      firstname = client.getFirstName();
      
      subs_list = mmod.getSubscriptionInformations(clientID);
      for(int i=0; i<subs_list.length; i++) {
        subscription = new SubscriptionData();
        subscription.setProdukt("produkt"+i);
        //subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        testausgabe = subscriptions.get(0).getProdukt();
      }//for
    }//if(client != null)
  }

Innerhalb hab ich auch die andere Variante noch als Kommentar stehen, wie ich es auch schon versucht habe.
In dieser Funktion will ich aber auch nur die ArrayList setzen lassen und später anderweitig ausgeben lassen.
 
J

JayGabriel

Gast
Ich will nicht die gesamte Liste ausgeben, sondern nur eine Stelle... in dem Beispiel greif ich gerade auf die erste (also 0) zu. Aber es geht ja um den Inhalt, nicht die Ausgabe (ist ja nur ein Test, um zu sehen, was denn los ist) ...
 

faetzminator

Gesperrter Benutzer
Hab deinen Ursprungspost nochmals gelesen und nun ist mir nicht mehr ganz klar, was das Problem sein soll.
Behauptest du gerade, dass in der [c]List[/c] x Mal das gleiche Objekt drin ist?
Oder willst du einfach nur Klone der ursprünglichen Objeke (aus dem Array) in die List speichern?
Veränderst du denn die Daten in der Liste und benötigst im Array noch die ursprünglichen o.ä.?
 
J

JayGabriel

Gast
meine SubscriptionData.java, besonders viel steht da halt aber nicht drin.

Java:
public class SubscriptionData {
  private String produkt;
  private String abboart;
  private String start;
  private String ende;
  private String anzahl;
  
  public SubscriptionData(String produkt, String abboart, String start, String ende, String anzahl) {
    this.setProdukt(produkt);
    this.setAbboart(abboart);
    this.setStart(start);
    this.setEnde(ende);
    this.setAnzahl(anzahl);
  }
  
  public SubscriptionData() { 
  }

  public void setProdukt(String produkt) {
    this.produkt = produkt;
  }

  public String getProdukt() {
    return produkt;
  }

  public void setAbboart(String abboart) {
    this.abboart = abboart;
  }

  public String getAbboart() {
    return abboart;
  }

  public void setStart(String start) {
    this.start = start;
  }

  public String getStart() {
    return start;
  }

  public void setEnde(String ende) {
    this.ende = ende;
  }

  public String getEnde() {
    return ende;
  }

  public void setAnzahl(String anzahl) {
    this.anzahl = anzahl;
  }

  public String getAnzahl() {
    return anzahl;
  }

}//class SubscriptionData

Zu meinem Problem noch mal:
Ich bekomme ein Array aus einem WebService. Da muss man sich die Daten aber noch herausfieseln, was ich eigentlich in dieser Methode hier machen wollte. Also neue SubscriptionData Instanz erzeugen, die gebrauchten Werte (Produkt, aboart, start, ende, anzahl) setzen und das "neue Objekt" dann dem ArrayList zur Aufbewahrung hinzufügen.

Ausgabe ist in dieser Methode nicht gewünscht. Meine Testausgabe hab ich nur hineingeschrieben, um zu sehen, wo der Fehler ist.
Und irgendwie überschreibt mir die For Schleifen halt immer alle Objekte in der ArrayList und hängt es nicht nur hinten an.
 

Michael...

Top Contributor
Kann da auf Anhieb keinen Fehler in der Klasse und in der Schleife finden.
Mach doch mal ein paar Ausgaben in der Schleife. Lass Dir z.B. direkt Schleifenzähler und ...get(0).getProdukt() in der Schleife ausgeben - ohne das in testausgabe zwischen zu speichern.
Vielleicht liegt ja der Fehler wo anders.
 
S

SlaterB

Gast
der bisherige Code enthält keinen Fehler und auch wenig bis keine Information darüber wo du je irgendwas tatsächlich verifizierst,
man könnte deine Vermutungen einfach falsch nennen, alles funktioniert

Java:
public class Test {
    public static void main(String[] args) {
        List<SubscriptionData> subscriptions = new ArrayList<SubscriptionData>();
        String testausgabe = "";
        SubscriptionData subscription;
        for (int i = 0; i < 4; i++) {
            subscription = new SubscriptionData();
            subscription.setProdukt("produkt" + i);
            // subscriptions.add(new
            // SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
            subscriptions.add(subscription);
            testausgabe = subscriptions.get(0).getProdukt();
        }// for

        System.out.println("testausgabe: " + testausgabe);
        for (int i = 0; i < 4; i++)  {
            System.out.println("i: " + i + ", " + subscriptions.get(i).getProdukt());
        }// for
    }
}
Ausgabe:
Code:
testausgabe: produkt0
i: 0, produkt0
i: 1, produkt1
i: 2, produkt2
i: 3, produkt3
 
J

JayGabriel

Gast
Tja, nach meinem Empfinden hab ich auch nirgends einen Fehler drin, aber wie schon mehrmals geschrieben, es werden tatsächlich immer nur die gleichen Einträge schließlich ausgegeben.

Ausgabe:
Code:
i=0 - produkt5
i=1 - produkt5
i=2 - produkt5
i=3 - produkt5
i=4 - produkt5
i=5 - produkt5

Ich hab das gesamte Projekt sogar schon neu aufgesetzt und einzeln und Schritt für Schritt noch einmal nachporgrammiert.
Immer wieder taucht der Fehler auf... Hab schon das Gefühl, dass Eclipse dran Schuld ist, und mich nur ärgner will ;)

Zur Ausgabe:
meine Ausgabe wird von einem JSP übernommen in einer JSF Umgebung (oder wie man das nennt), aber die lass ich ja bisher sogar außenvor, da ich ja schob beim Befüllen der ArrayList Probleme hab...

Kann es eigentlich passieren, dass ein new die gleiche Referenz auf ein neues Objekt mehrmals erzeugt?
 
S

SlaterB

Gast
mit welchem Code testest du denn an welcher Stelle auf welche Weise?
deine Ausgabe läßt nicht vermuten, dass du genau meinen Code verwendet hast

> Kann es eigentlich passieren, dass ein new die gleiche Referenz auf ein neues Objekt mehrmals erzeugt?

wahrscheinlich nein, aber es kann passieren dass du komische Sachen erzählst die dann falsch verstanden werden,
gibt es denn 'unterschiedliche Referenzen auf ein neues Objekt'?
 
J

JayGabriel

Gast
Also:

oben ist die testausgabe Variable (vom Typ String), der geb ich jenachdem welche Stelle ich aus dem ArrayList herauslesen will, den entsprechenden Wert durch eine hardcodet Zahl (also 0 oder halt jenachdem).
Dann deploy ich und schau nach, was in der Variablen steht (die wird von einem JSP ausgelesen und angezeigt - als Label, daher immer nur eine Angabe) Es sind immer gleich viele For Schleifendurchläufe, daher kann ich die Werte auch einfach hardcodet hineinschreiben ohne OutOfBounds zu erzeugen...

das mit dem i=0 ist das, was ich in der Zeile testausgabe = subscriptions.get(0).getProdukt(); halt eintrage. Das
produkt5 ist das, was dann angezeigt wird... habs doch nur verdeutlichen wollen *seufz*

Wenn ich innerhalb der For Schleife die Variable nur dann setzen lasse, wenn i == 0 ist, dann steht das richtige drin.
Später, nachdem die For komplett durchgelaufen ist, steht an der gleichen Stelle produkt5 drin.
 
J

JayGabriel

Gast
meine Importe:

import java.util.List;
import java.util.ArrayList;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.component.UICommand;
import javax.faces.component.UIForm;
import javax.faces.model.SelectItem;

Ja, es sind die util Importe und nein, ich hab mir da nichts eigenes erstellt und auch nicht durch Überladung oder sonstwas dran rumgedocktert.
 
S

SlaterB

Gast
mit Text a la 'Wenn ich innerhalb der For Schleife die Variable nur dann setzen lasse' kannst du kommen wenn auf allen Seiten klare Verständnisse herschen und in schnellen Schritten erfolgreich exakte Probleme besprochen und gelöst werden,

im Moment sage persönlich dazu nur: spar dir die Buchstaben und poste Code, ansonsten ist dir nicht zu helfen
 
J

JayGabriel

Gast
Dann also in Minischritten...

Das war die Variante, die ich oben gepostet hab. Hier wird testausgabe immer wieder neu bei jedem Durchlauf der For Schleife neu gesetzt (das weiß ich). Im Endeffekt steht nach der Ausführung schließlich "produkt5" auf meiner Seite (mehr wird nicht ausgeben).
Java:
for(int i=0; i<subs_list.length; i++) {
        subscription = new SubscriptionData();
        subscription.setProdukt(helper.parseProductCode(subs_list[i].getProductCode()));
        //subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        testausgabe = subscriptions.get(0).getProdukt();
      }//for


Ein weiterer Versuch war, mir direkt bei einem bestimmten Schleifendurchlauf den aktuellen Wert ausgeben zu lassen. Am Code wurde dafür nicht viel geändert, daher dachte ich, dass das irrelevant ist fürs Posten...
Bei dieser Variante wird tatsächlich produkt0 ausgegeben. Also schloss ich daraus, dass in dem nächsten Schleifendurchlauf tatsächlich das erste überschrieben wird.
Java:
for(int i=0; i<subs_list.length; i++) {
        subscription = new SubscriptionData();
        subscription.setProdukt(helper.parseProductCode(subs_list[i].getProductCode()));
        //subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        if(i==0)
                testausgabe = subscriptions.get(0).getProdukt();
      }//for

die foglenden Versuche ergaben alle produkt3
Java:
for(int i=0; i<subs_list.length; i++) {
        subscription = new SubscriptionData();
        subscription.setProdukt(helper.parseProductCode(subs_list[i].getProductCode()));
        //subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        if(i==3)
                testausgabe = subscriptions.get(3).getProdukt();
      }//for


Java:
for(int i=0; i<subs_list.length; i++) {
        subscription = new SubscriptionData();
        subscription.setProdukt(helper.parseProductCode(subs_list[i].getProductCode()));
        //subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        if(i==3)
                testausgabe = subscriptions.get(2).getProdukt();
      }//for


Java:
for(int i=0; i<subs_list.length; i++) {
        subscription = new SubscriptionData();
        subscription.setProdukt(helper.parseProductCode(subs_list[i].getProductCode()));
        //subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        if(i==3)
                testausgabe = subscriptions.get(1).getProdukt();
      }//for


Java:
for(int i=0; i<subs_list.length; i++) {
        subscription = new SubscriptionData();
        subscription.setProdukt(helper.parseProductCode(subs_list[i].getProductCode()));
        //subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        if(i==3)
                testausgabe = subscriptions.get(0).getProdukt();
      }//for

Ist es so besser? Was genau wollt ihr noch? Mehr an Quelltext, außer wo ich den internen WebService aufrufe, hab ich ja noch nicht. Höchstens noch meine JSP.
 
S

SlaterB

Gast
nun, ein bisschen verständlicher ist es für mich geworden, dann gehe ich jetzt auch auf deine Stichpunkte Deploy + JSP ein:
kann es nicht sein, dass du irgendwo alten Code wiederverwendest? eine immer gleiche Ausgabe ist ein schlechter Beweis für irgendwas

vergleiche dagegen:
Java:
if(i==3) {
   testausgabe = "teste i == 3: "+subscriptions.get(3).getProdukt();
}
mit später
Java:
if(i==2) {
   testausgabe = "teste i == 2: "+subscriptions.get(2).getProdukt();
}
kommt immer noch immer produkt3 raus, aber mal mit "i == 3", mal mit "i == 2"?
das wäre übel, aber damit wären wenigstens Probleme beim Kompilieren usw. ausgeschlossen

natürlich kann, wenn man sowas macht, gleich auf komplettes Rätselraten verzichten und den String testausgabe umfassend zusammenbauen:
Java:
vor der Schleife:
testausgabe = "jetzt kommt Schleife mit .. Elementen ";

in der Schleife:
testausgabe += " - i: " + i + ", " + subscriptions.get(i).getProdukt();
wobei das noch gar nicht soviel aussagt, wenn jeder Schleifendurchlauf alle Elemente ändern würde, könnte diese Ausgabe das nicht erkennen,
lieber nach der Befüllungs-Schleife nochmal die Liste durchgehen, siehe mein Testprogramm
 
T

tommysenf

Gast
Was hier von dir gewünscht wird ist ein Nachvollziehbares Beispiel, wie die Vorposter schon geschrieben haben sieht der von dir gepostete Code soweit gut. Also muss der Fehler zum Beispiel in der Ausgabe liegen. Dazu werden einfach mehr Informationen von
dir benötigt. Modifiziere den Code doch einmal auf die folgende Weise und poste dann die Ausgabe:

Java:
for(int i=0; i<subs_list.length; i++) {
        subscription = new SubscriptionData();
        subscription.setProdukt("product" + i);
        subscriptions.add(subscription);
      }//for
for(SubscriptionData data: Subscription) {
    System.out.println(data.getProduct());
}

Alternativ solltest du besser einen Logger verwenden und das Ganze mal mit einem Debugger durchchecken.
 

fastjack

Top Contributor
check doch mal das Ergebnis von hier:

Code:
subs_list = mmod.getSubscriptionInformations(clientID);

ich denke hier werden schon dieselben reinkommen.


edit: der Fehler kann nicht in deinem vorherigen Beispiel liegen.
 
J

JayGabriel

Gast
Hab mir grad ne verspätete Mittagspause gegönnt, daher hats etwas gedauert mit der Umsetzung. Aber jetzt wirds noch irrer...

@SlaterB:
habs umgeschrieben wie folgt:
Java:
      testausgabe = "Vor der Schleife mit Länge: "+subs_list.length;
      for(int i=0; i<subs_list.length; i++) {
        subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        testausgabe += "| Subscriptions (ArrayList) ("+i+"): "+subscriptions.get(i).getProdukt()+" --- ";
      }//for
      
      testausgabe += "Nach der Schleife in einer weiteren Schleife für einfache Ausgabe: ";
      for(int i=0; i<6; i++) {
        testausgabe += subscriptions.get(i).getProdukt()+", ";
      }

Und die Ausgabe sieht daraufhin wie folgt aus (wegen Übersichtlichkeit hab ich ein paar Enter eingefügt)
Code:
Vor der Schleite mit Länge: 6
| Subscriptions (ArrayList) (0): produkt0 ---
| Subscriptions (ArrayList) (1): produkt1 --- 
| Subscriptions (ArrayList) (2): produkt2 --- 
| Subscriptions (ArrayList) (3): produkt3 --- 
| Subscriptions (ArrayList) (4): produkt4 --- 
| Subscriptions (ArrayList) (5): produkt5 --- 
Nach der Schleife in einer weiteren Schleife für einfache Ausgabe:
produkt5, produkt5, produkt5, produkt5, produkt5, produkt5,
Das zeigt mir wieder das Problem, dass es wohl richtig im ersten Schritt hineingeschrieben, danach aber wieder überschrieben wird...

@faetzminator: Auf den Inhalt von subs_list, greif ich zum Testen ja erst einmal nicht zu (sonst würde statt produkt0 FR und so drin stehen) Die Einträge für die ArrayList werden direkt durch die Schleife hardcodet erzeugt und nur der Zählparameter i hinten drangehaben, damit ich den Unterschied sehen kann.

@tommysenf: Hmm, ich glaube, ich sollte für heute Schluss machen... o.ô
Nachdem ich den Code an deine Version umgeschrieben habe, hat mein Array nun plötzlich 12 Einträge und nicht nur 6.

Code:
Java:
testausgabe = "Vor der Schleife mit Länge: "+subs_list.length;
      for(int i=0; i<subs_list.length; i++) {
        subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        //testausgabe += "| subs_list["+i+"]: "+subs_list[i].getProductCode();
        //testausgabe += "| Subscriptions (ArrayList) ("+i+"): "+subscriptions.get(i).getProdukt()+" --- ";
      }//for
  
      testausgabe += "Länge der ArrayList: "+subscriptions.size()+"---";
      testausgabe += "Nach der Schleife in einer weiteren Schleife für einfache Ausgabe: ";
      for(SubscriptionData data: subscriptions) {
        testausgabe += data.getProdukt()+", ";
      }

Ausgabe:
Code:
Vor der Schleife mit Länge: 6
Länge der ArrayList: 12---
Nach der Schleife in einer weiteren Schleife für einfache Ausgabe: 
produkt5, null, produkt5, null, produkt5, null, produkt5, null, produkt5, null, produkt5, null,

Oder hab ich bei der Umsetzung deiner For Schleife, etwas falsch gemacht?

@fastjack:

Java:
subs_list = mmod.getSubscriptionInformations(clientID);
      testausgabe = "Vor der Schleife mit Länge: "+subs_list.length;
      for(int i=0; i<subs_list.length;i++) {
        testausgabe += subs_list[i].getProductCode()+", ";
      }
      
      for(int i=0; i<subs_list.length; i++) {
        subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        //testausgabe += "| subs_list["+i+"]: "+subs_list[i].getProductCode();
        //testausgabe += "| Subscriptions (ArrayList) ("+i+"): "+subscriptions.get(i).getProdukt()+" --- ";
      }//for

Code:
Vor der Schleife mit Länge: 6
FR, ,BZ,FA,BK, ,

Also ankommen tun die Werte richtig. Auch die Leerstellen " " sind korrekt, da ich die später noch herausfiltern soll.
 

Guardi

Bekanntes Mitglied
Code:
Java:
testausgabe = "Vor der Schleife mit Länge: "+subs_list.length;
      for(int i=0; i<subs_list.length; i++) {
        subscriptions.add(new SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
        subscriptions.add(subscription);
        //testausgabe += "| subs_list["+i+"]: "+subs_list[i].getProductCode();
        //testausgabe += "| Subscriptions (ArrayList) ("+i+"): "+subscriptions.get(i).getProdukt()+" --- ";
      }//for
  
      testausgabe += "Länge der ArrayList: "+subscriptions.size()+"---";
      testausgabe += "Nach der Schleife in einer weiteren Schleife für einfache Ausgabe: ";
      for(SubscriptionData data: subscriptions) {
        testausgabe += data.getProdukt()+", ";
      }

Warum ruffst du ZWEI Mal add auf?

Die Zeile:
subscriptions.add(subscription);

Das Objekt kann nur "null" sein. Weil es nicht initialisiert ist
 
S

SlaterB

Gast
dass alle Einträge dasselbe Produkt haben bekommt man relativ leicht hin wenn die Attribute wie 'String produkt' statisch wären,

die 'produkt5, null, produkt5, null, '-Ausgabe ist noch merkwürdiger, widerspricht dem statischen Attribut,
deutet einerseits auch auf irgendwas komisches in SubscriptionData hin, andererseits ist da nicht wirklich irgendwas auch anzunehmen

-------
edit:
> Warum ruffst du ZWEI Mal add auf?
ok, damit könnte in der Richtung etwas geklärt sein, übersehen..

sind bei der ersten Schleife dann auch 12 Elemente drin? wieso dort aber kein null..
zum [c]("+i+"): "+subscriptions.get(i)[/c] in der Schleife passt das aber auch nicht
--------


ziemlich irre, wenn du Lust hast kannst du zum weitertesten folgendes verwenden bzw. vergleichbares eigenes

Java:
class Test
{
    public static void main(String[] args)
    {
        List<SubscriptionData> subscriptions = new ArrayList<SubscriptionData>();
        String testausgabe = "";
        SubscriptionData subscription;
        for (int i = 0; i < 4; i++)
        {
            subscription = new SubscriptionData("produkt" + i, "", "", "", "");
            // subscriptions.add(new
            // SubscriptionData("produkt"+i,"abboart"+i,"start"+i,"ende"+i,"anzahl"+i));
            subscriptions.add(subscription);
            testausgabe = subscriptions.get(0).getProdukt();
        }// for

        System.out.println("testausgabe: " + testausgabe);
        for (int i = 0; i < 4; i++)
        {
            System.out.println("i: " + i + ", " + subscriptions.get(i).getProdukt());
        }// for

    }
}


class SubscriptionData
{
    private final IdString produkt;

    public SubscriptionData(String produkt, String abboart, String start, String ende, String anzahl)
    {
        this.produkt = new IdString(produkt);
    }

    public SubscriptionData()
    {
        this.produkt = new IdString("nix");
    }

    public void setProdukt(String produkt)
    {
    }

    public String getProdukt()
    {
        return produkt.toString();
    }

    public void setAbboart(String abboart)
    {
    }

    public String getAbboart()
    {
        return null;
    }

    public void setStart(String start)
    {
    }

    public String getStart()
    {
        return null;
    }

    public void setEnde(String ende)
    {
    }

    public String getEnde()
    {
        return null;
    }

    public void setAnzahl(String anzahl)
    {
    }

    public String getAnzahl()
    {
        return null;
    }

}


class IdString
{
    private static int count=75;
    private int number;
    private String st;

    public IdString(String st)
    {
        this.number = count++;
        this.st = st;
    }

    public String toString()
    {
        return number + "/" + st;
    }
}
nett ist allein schon, überhaupt irgendwie die SubscriptionData-Klasse zu ändern, um gegen alten Code vielleicht noch mit statischer Variable vorzugehen, auch wenn das offensichtlich nicht zu allen deinen Ausgaben passt,
ich habe hier alles außer Produkt entfernt, kannst du vielleicht nicht ganz so extrem machen ohne dass dein Programm abschmiert,
die Produkte werden einmalig gesetzt, sind durch final quasi nicht mehr zu ersetzen, zu ändern schon gar nicht,
jeder IdString hat außerdem eine eindeutige Nummer, wenn nötig kann bei unbekannten Fund durch Logging herausgefunden werden wo und wann das Objekt je erzeugt wurde,
die Nummerierung beginnt bei 75, um nicht unnötig mit den 0, 1, 2, 3 der Listen in Konflikt zu kommen

Ausgabe meines Programms ist
Code:
testausgabe: 75/produkt0
i: 0, 75/produkt0
i: 1, 76/produkt1
i: 2, 77/produkt2
i: 3, 78/produkt3
ich will gar nicht groß vorhersehen, was bei dir passiert, wenn du es irgendwie zum Laufen bringst wären neue Logs interessant,

evtl. reicht irgendwann nicht nur der String testausgabe, sondern es wären auch Log-Ausgaben im SubscriptionData- + IdString-Konstruktor interessant, vielleicht auch in der setProdukt-Methode,
du könntest testausgabe temporär zu einer statischen Variable in einer allgemein bekannten Klasse machen, so dass jeder dort reinschreiben kann,
Thread-Probleme wird es im Moment ja hoffentlich nicht auch noch geben
 
Zuletzt bearbeitet von einem Moderator:
J

JayGabriel

Gast
@Guardi: Stimmt. Berechtigte Frage. Hab ich raus genommen und nun ist es wieder normal (ArrayList mit 6 Einträgen und 6 mal produkt5)
Wie das da hinkommt, gute Frage. Hab wohl einmal zu viel Strg Z bzw. zu viel Kommentare drin gehabt. Ich sollte wirklich für heute Schluss machen und morgen mir den Schmarn, den ich programmiert hab, noch mal anschauen.
Seltsam nur, wenn ich das so mit einer dataTable im JSP ausgeben lasse, wurden die NULL Elemente rausgenommen.

@SlaterB:
hab noch mal vorsichtshalber nachgeschaut, aber in der SubscriptionData Klasse sind die Parameter "nicht" statisch. Hätt mich zwar gewundert, warum ich sowas machen sollte, aber man weiß ja nie. Und da ich Eclipse benutz, würde sich das ja bemerkbar machen, falls doch. Und das hätte ich nach Stunden der Problemsuche ja schon gefunden ;)

Das mit der Länge 12 und den NULL Einträgen hat sich geklärt. Hab wohl aus Versehen einmal // zu viel entfernt, warum das bei den anderen Beispielen dann aber nicht auch passiert ist, weiß ich nicht...

Danke für die gedulige Hilfe von euch allen! Werd morgen noch mal über mein Programm schauen und weitere Fortschritte und hoffentlich Lösungen posten. Ich mach nun aber Feierabend, mir schwirrt einfach nur noch der Kopf und hätt eh in knapp ner halben Stunde Schluss ;)
 

fastjack

Top Contributor
Das ist doch alles nur noch gerate... und es werden immer Fehlerquellen, Dein Problem wird sich nicht vereinfachen. Vereinfache Deine Methode (Code extrahieren, andere Methoden daraus machen etc.). Schreib Dir einen Unit-Test und teste die verschiedenen Bereiche mit festen Daten. Teste auch die Klasse SubscriptionData und füge nicht null an, was bei einem Unit schon längst aufgefallen wäre... Teste auch das Teil, mit dem Du die Produktinformationen parst.
 

Guardi

Bekanntes Mitglied
Ja ok aber da scheiterts an was anderem als Unit-Tests.
Objekte in einer Schleife erzeugen und diverse Member-Variablen anhand des Schleifen-Index zu setzen ist Java-Grundkurs. Da kann man im Prinzip nicht so hart viel falsch machen.
Warum fängst du eigentlich gleich mit Themen wie WebService an? Meiner Meinung nach fehlen da noch einige Basics. Glaub mir du machst dir das Leben wesentlich einfacher diese zu erlnen als ad-hoc jetzt schon Enterprise Apps entwickeln zu wollen.
 

fastjack

Top Contributor
ich glaub nicht, das er sich das freiwillig ausgesucht hat ;)

Aber egal, trotzdem helfen die Tests, z.B. bei der Methode, die die Informationen parst und daraus ein SubscriptionData macht, die kann ja sonst was zurückliefern. Wenn das nicht getestet ist, ist alles andere nur noch gerate. Die Beispiele nützen ihm auch nix, wenn in Wirklichkeit ganz andere Methoden genutzt werden, und das ist halt leider nur mit Tests sicherstellen.
 
J

JayGabriel

Gast
@fastjack: stimmt, die Aufgabe habe ich zugeteilt bekommen ;)

So, zu meinem Stand:
nach vielem Ärger, Frust und grauen Haaren funktioniert die Werteübergabe nun.

Der Grund ist nicht ganz klar, irgendwo schien in den Projekteinstellungen wohl ein Fehler gewesen zu sein. Mir ist nur schleierhaft wo und warum.
Hab ein neues Projekt erstellt und alles nach einander hinzugefügt. Nichts geändert, alles beibehalten und immer nur copy and paste.
Und es hat nach dem dritten Anlauf funktioniert (nach extremer Staffelung der kopierten Einzelheiten). Hatte schon über ne Neuinstallation von Eclipse und allem nachgedacht, aber da bin ich drumrum gekommen. Zumindest im Moment... Eigentlich wurde der PC erst vor zwei Wochen neu aufgesetzt...

Den gestrigen Tag hab ich mit zig Tests zugebracht, dessen Ergebnisse mit der Zeit immer abstruser wurden, so dass ich die Befürchtung hatte, dass der PC von nem Virus geplagt wird. Hat sich bisher aber nicht bestätigt.

Ich hab keine Ahnung, was los war, und da der Fehler nun nicht mehr reproduzierbar ist (selbst mein altes Projekt funktioniert nun plötzlich), verbuche ich das Problem unter "Heinzelmännchenbefall" und hoffe, dass die mich so schnell nicht wieder heimsuchen.

Danke jedenfalls an alle, die mir geholfen haben! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
J Array.list vergleichen Java Basics - Anfänger-Themen 1
B Vektor vs List Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
T Linked List set-Methode Java Basics - Anfänger-Themen 2
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
L Datentypen Array List Java Basics - Anfänger-Themen 9
J Java List, Bitte um Hilfe Java Basics - Anfänger-Themen 15
J Java List, bitte um Hilfe Java Basics - Anfänger-Themen 3
F GSON file mit einer List erstellen Java Basics - Anfänger-Themen 2
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
G Linked list, Methode zum Vertauschen von Elementen Java Basics - Anfänger-Themen 14
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
B SWAP List; Liste neu anordnen Java Basics - Anfänger-Themen 4
W Stream Array List - Frage Java Basics - Anfänger-Themen 5
E Interface List nicht als Collection an erkannt. Java Basics - Anfänger-Themen 14
X Array List geordnet ausgeben. (JSF und JAVA) Java Basics - Anfänger-Themen 1
D new arraylist (List) dynamisch erstellen Java Basics - Anfänger-Themen 1
Yjuq Generic Methode - Wie muss die List Definition aussehen? Java Basics - Anfänger-Themen 3
M List<String> auswählen Java Basics - Anfänger-Themen 42
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
T HashSet in List-Object Java Basics - Anfänger-Themen 5
B ENUM to List<String> konvertieren Java Basics - Anfänger-Themen 2
E Array-list mit einer bestimmten Länge Java Basics - Anfänger-Themen 17
B Sorting List und Remove Java Basics - Anfänger-Themen 2
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
M Methode überladen - Array List Java Basics - Anfänger-Themen 5
L LIST.ADD Java Basics - Anfänger-Themen 2
M XWPF - Bullet Point list erstellen Java Basics - Anfänger-Themen 1
I <List> sortieren Java Basics - Anfänger-Themen 2
N Klassen List-Art Java Basics - Anfänger-Themen 5
S List<T<X,Y> sortieren Java Basics - Anfänger-Themen 5
Salo Datentypen "Doppelt" List(e) ("gesucht") Java Basics - Anfänger-Themen 6
F .csv Export aus einer list Java Basics - Anfänger-Themen 25
T KlausurÜbung- Förderband-Linked List Java Basics - Anfänger-Themen 53
D Komischer Fehler nach <Integer> List Java Basics - Anfänger-Themen 2
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
T List und ArrayList Java Basics - Anfänger-Themen 3
UnityFriday method getPrevious in class List<ContentType> cannot be applied to given types Java Basics - Anfänger-Themen 29
hooked Verkettete Liste / linked list Java Basics - Anfänger-Themen 2
T Datentypen InputStream to list of Int (or similar) Java Basics - Anfänger-Themen 4
D Input/Output CSV Parser list unvollständig Java Basics - Anfänger-Themen 25
V Erste Schritte Dateinamen aus einer FIle[] in eine List Java Basics - Anfänger-Themen 11
S Methoden Linked List Methoden können nicht aufgerufen werden Java Basics - Anfänger-Themen 1
U JAXB - List wird nicht ausgefüllt Java Basics - Anfänger-Themen 1
L Linked List - Array List Java Basics - Anfänger-Themen 2
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
D Bestimmten Wert aus Array List ausgeben Java Basics - Anfänger-Themen 7
V Personenverwaltung mit List<>, falsche Ausgaben Java Basics - Anfänger-Themen 5
M List befüllen Java Basics - Anfänger-Themen 3
S Datentypen List.toString wirft NullPointerException Java Basics - Anfänger-Themen 5
P Anlegen und Abfragen von Array List Java Basics - Anfänger-Themen 4
S Element von List<E> in String umwandeln Java Basics - Anfänger-Themen 3
A Wie nutze ich List<List<String>> Java Basics - Anfänger-Themen 4
M Endlos schleife in List Java Basics - Anfänger-Themen 5
P Zufallszahlen ohne zahlen einer List Java Basics - Anfänger-Themen 21
C Array List mit String vergleichen und Fehlermeldung ausgeben Java Basics - Anfänger-Themen 6
S Probleme bei Ausgabe von rekursiver Methode (List) Java Basics - Anfänger-Themen 16
T Tabstopp in AWT-List? Java Basics - Anfänger-Themen 8
P Doppelte Einträge in eine List Java Basics - Anfänger-Themen 5
M Wozu Upcasting? Am Beispiel List = ArrayList Java Basics - Anfänger-Themen 2
A List mit integern füllen Java Basics - Anfänger-Themen 4
D sortieren von List<> Java Basics - Anfänger-Themen 2
B List - Drag&Drop Java Basics - Anfänger-Themen 8
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
G Linked List Programm add Problem Java Basics - Anfänger-Themen 5
C List Abfragenproblem Java Basics - Anfänger-Themen 3
J List als anonyme Klasse Java Basics - Anfänger-Themen 9
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
F Wozu braucht man array list? Java Basics - Anfänger-Themen 29
T Collections Wie funktioniert List() ? Java Basics - Anfänger-Themen 7
Kenan89 Java Date List Java Basics - Anfänger-Themen 4
tux20 Problem beim Schreiben von List to File Java Basics - Anfänger-Themen 2
K Frage Set List Java Basics - Anfänger-Themen 3
M Array List ausgeben Java Basics - Anfänger-Themen 13
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
S Gute List Implementation Java Basics - Anfänger-Themen 5
S Synchronisieren einer Linked List Java Basics - Anfänger-Themen 16
A List Array - wie instanzieren Java Basics - Anfänger-Themen 7
T List mit mehreren gleichen Strings bereinigen Java Basics - Anfänger-Themen 4
R List to BinaryTree Java Basics - Anfänger-Themen 13
P Set mit List vergleichen Java Basics - Anfänger-Themen 8
Binary.Coder List bzw. ArrayList als String ausgeben Java Basics - Anfänger-Themen 2
T List.add(Object) führt zu NullPointerException Java Basics - Anfänger-Themen 14
M Collections Cast bei ArrayList (List) Java Basics - Anfänger-Themen 2
B List list - anstatt ArrayList list = new ArrayList Java Basics - Anfänger-Themen 10
H Remove Methode von List Java Basics - Anfänger-Themen 6
T Datentypen List<?> Java Basics - Anfänger-Themen 5
E Linked List generisch Java Basics - Anfänger-Themen 5
S Einen neuen String ohne Array oder List erzeugen??? Java Basics - Anfänger-Themen 13
S List angaben in textfelder Java Basics - Anfänger-Themen 7
D List<String[]> initialisieren Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben