Objekt nachträglich verändern

Status
Nicht offen für weitere Antworten.

MASTERmind

Bekanntes Mitglied
Hallo!
Die nachfolgende Klasse instanziiert ein Objekt, das Anzahl Zeilen hält.
Ich verzweifel noch an der Frage, wie ich im Nachhinein also hinterher einfach nur eine Leerzeile oder mehrere hinzufügen zu dem Objekt von außen also aus einer anderen Klasse.

Klasse, dessen Objekt eine Leerzeile/Platzhalter Zeile entahlten soll:


Code:
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import com.amaris.util.StringUtil;

public class FormattedSpecifications
{ 
  private static final int MAXLENGTH = 30;

  private static final String index_delim = "_"; 

  private String specifications;

  private int partMaxLength;

  private int specificationLength;

  private int minRows;

  private List<String> lines = new ArrayList<String>();
  
  

  public FormattedSpecifications(String specifications)
  {
    this.specificationLength = specifications.length();
    this.specifications = specifications;
  }

  private void calculatePartLength(int rows)
  {
    int rowDigits = String.valueOf(rows).length();

    partMaxLength = MAXLENGTH - index_delim.length() - rowDigits;

    minRows =
        new BigDecimal(specificationLength).divide(new BigDecimal(partMaxLength),
            BigDecimal.ROUND_UP).intValue();
    int minRowDigits = String.valueOf(minRows).length();

    if (minRowDigits > rowDigits)
      calculatePartLength(minRows);
  }

  public int getCountLines()
  {
    return lines.size();
  }

  public String getSpecifications()
  {
    return specifications;
  }

  public void formatInputs(String specifications, int lineCount)
  {
    lines.clear();

    specifications = specifications.replace("¦", "-");

    if (lineCount > 1)
    {
      int start = 0;
      int end = partMaxLength;
      int index = 1;

      while (start < specificationLength)
      {
        String temp =
          specifications.substring(start, end)
                + index_delim
                + StringUtil.getAsZeroFilledString(index++, String.valueOf(
                    lineCount).length());

        lines.add(temp);

        start = end;
        end = Math.min(end + partMaxLength, specificationLength);
      }

      for (; index <= lineCount; index++)
      {
        String temp =

            index_delim
                + StringUtil.getAsZeroFilledString(index, String.valueOf(
                    lineCount).length());
        lines.add(temp);
      }
    }
    else
    {
      lines.add(specifications);
    }
  }

  public List<String> getLines(int rows)
  {
    calculatePartLength(rows);

    formatInputs(specifications, Math.max(rows, minRows));

    return lines;
  }
  
  public List<String> setLines()
  {
    lines.add("testBlablabla");
    return lines;
  }

}

Instanziierung der/des Objekts in einer anderen Klasse und hier will ich sowas machen wie setNullLines():
Code:
// Holen und evtl. formatieren der Merkmale
    for (ResultList.Row row : list)
    {
      // MerkmalsId = lBody.ID
      mId = row.getString(4);
      // Merkmal = lHdr.Text(0) + lSect.Text(2)
      attr = row.getString(0) + "_" + row.getString(2);
      // Technischer Name
      technicalName = row.getString(4) + row.getString(5) + row.getString(6);
      // Objekt instanziieren, das die Daten kapselt
      FormattedAttributes fcd = new FormattedAttributes(mId, attr); 
      // fcd.formatInputs(attr);
      formattedAttributes.add(fcd);
      ///////////////////////////////////////////////////////////
      spec = row.getString(1);
      TechnicalDataIDs tdId = new TechnicalDataIDs(technicalName);      
      techNamesList.add(tdId);
      // //////////////////////////////////////////////////////////
      FormattedSpecifications fcdSpec = new FormattedSpecifications(spec);
      formattedSpecs.add(fcdSpec);
    }
Ich bekomme auch die unterschiedlichen Zeilenanzahlen zurück.
 
S

SlaterB

Gast
was funktioniert nicht an sowas wie setNullLines()?
wo ist die Frage bei dem ganzen?

soll man jetzt du Deklaration der Operation und den Aufruf hinschreiben?
 

MASTERmind

Bekanntes Mitglied
Ähm....also eigent,lich dachte ich an sowas wie nen Tipp :)...nich gleich pampig werden!

Ist ja auch bisschen schwierig zu beschreiben.
Ich möchte einem
Code:
FormattedSpecifications fcdSpec = new FormattedSpecifications(spec);
      formattedSpecs.add(fcdSpec);
sagen: fcdSpec.bekommstNochEineZeile() mit einem beliebigen Inhalt.

Und dazu bin ich irgendwie net in der LAge :(

SlaterB hat gesagt.:
was funktioniert nicht an sowas wie setNullLines()?

Er machts einfach net

Edit:
Code:
    for(int j = 0; j < formattedAttributes.size(); j++)
    {
      int qAttr = formattedAttributes.get(j).getCountLines();
      int qSpec = formattedSpecs.get(j).getCountLines();
      
      if(qAttr > qSpec)
      {
        formattedSpecs.get(j + 1).setLines();
        System.out.println("Anzahl Attribute: " +  qAttr + " " + " Anzahl Spec: " +  qSpec + " Objektnummer: " + j);
        System.out.println(formattedAttributes.get(j).getLines(1));
      }      
    }
fügt keine Zeile hinzu....
 
S

SlaterB

Gast
nun, so funktioniert programmieren nicht,
dass eine Operatsion, die aufgerufen wurde, nicht ausgeführt wird, das gibt es nicht

aber du hast in deinem Code ja weder die Operationsdeklaration noch den Aufruf, wie soll man da etwas dazu sagen?
(das ist nicht pampig sondern direkt ;) )

schreibe

public void setNullLines()
{
System.out.println("ich mach doch");
}

+ Aufruf
System.out.println("gleich mach ich");
fcdSpec.setNullLines();
System.out.println("habs gemacht");


welche von diesen Ausgaben erscheint, welche nicht?

-------

zu deinem edit:
mit Listen und mal get(j), mal get(j+1) brauchst du gar nicht erst anfangen,
suche dir EIN Objekt raus, speichere es irgendwo in einer Variablen 'aktuellesObjekt', dann kann man versuchen etwas damit zu tun,
aber wild in if/else/ Listen, da gehen ja tausend Sachen schief
 

MASTERmind

Bekanntes Mitglied
Edit:
zu deinem edit:
mit Listen und mal get(j), mal get(j+1) brauchst du gar nicht erst anfangen,
suche dir EIN Objekt raus, speichere es irgendwo in einer Variablen 'aktuellesObjekt', dann kann man versuchen etwas damit zu tun,
aber wild in if/else/ Listen, da gehen ja tausend Sachen schief
==> Verzweiflungstaten!!!!!


alle erscheinen...hab sowas vorher ja schon mal gehabt.
Allerdings muss der List<String>lines eben eine solche Line hinzugefügt werden....und dafür bin ich wohl zu dusselig
Code:
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import com.amaris.util.StringUtil;

public class FormattedSpecifications
{
  private static final int MAXLENGTH = 30;

  private static final String index_delim = "_";

  private String specifications;

  private int partMaxLength;

  private int specificationLength;

  private int minRows;

  private List<String> lines = new ArrayList<String>();

  public FormattedSpecifications(String specifications)
  {
    this.specificationLength = specifications.length();
    this.specifications = specifications;
  }

  private void calculatePartLength(int rows)
  {
    int rowDigits = String.valueOf(rows).length();

    partMaxLength = MAXLENGTH - index_delim.length() - rowDigits;

    minRows =
        new BigDecimal(specificationLength).divide(
            new BigDecimal(partMaxLength), BigDecimal.ROUND_UP).intValue();
    int minRowDigits = String.valueOf(minRows).length();

    if (minRowDigits > rowDigits)
      calculatePartLength(minRows);
  }

  public int getCountLines()
  {
    return lines.size();
  }

  public String getSpecifications()
  {
    return specifications;
  }

  public void formatInputs(String specifications, int lineCount)
  {
    lines.clear();

    specifications = specifications.replace("¦", "-");

    if (lineCount > 1)
    {
      int start = 0;
      int end = partMaxLength;
      int index = 1;

      while (start < specificationLength)
      {
        String temp =
            specifications.substring(start, end)
                + index_delim
                + StringUtil.getAsZeroFilledString(index++, String.valueOf(
                    lineCount).length());

        lines.add(temp);

        start = end;
        end = Math.min(end + partMaxLength, specificationLength);
      }

      for (; index <= lineCount; index++)
      {
        String temp =

            index_delim
                + StringUtil.getAsZeroFilledString(index, String.valueOf(
                    lineCount).length());
        lines.add(temp);
      }
    }
    else
    {
      lines.add(specifications);
    }
  }

  public List<String> getLines(int rows)
  {
    calculatePartLength(rows);

    formatInputs(specifications, Math.max(rows, minRows));

    return lines;
  }

  public List<String> setLines()
  {
    this.lines.add("testBlablabla");
    return lines;
  }

  public void setNullLines()
  {
    System.out.println("ich mach doch");
  }

}
 
S

SlaterB

Gast
> Allerdings muss der List<String>lines eben eine solche Line hinzugefügt werden....

es geht also gar nicht um die Operation setNullLines(), sondern um die Operation setLines() die eigentlich eine neue Zeile einfügt und deshalb addLine() heißen sollte, von der du zwischendurch auch mal in Form von bekommstNochEineZeile() geredet hast?

ich darf solche Fantasienamen verwenden wenn du nix vorgibst,
aber du solltest bei Problembeschreibungen versuchen, konkrete Gegebenheiten anzugeben..

also worum auch immer es aktuell geht (könnte sich im nächsten Posting ja schon wieder ändern..),
nehmen wir mal die setLines()-Operation:

public List<String> setLines()
{
System.out.println("lines before: "+getCountLines());
this.lines.add("testBlablabla");
System.out.println("lines after: "+getCountLines()); // dürfte ja wohl um 1 größer sein
return lines;
}

klappt doch, was ist das Problem?
 

MASTERmind

Bekanntes Mitglied
Das ist ja das erstaunliche ....es klappt aber der Effekt ist nicht der gewünschte.

Zusammenfassung:
Das Objekt
Code:
FormattedSpecifications fcdSpec = new FormattedSpecifications(spec);
hält intern eine Liste mit Zeilen. Jetzt möchte ich von außen einem Objekt einfach nur eine weitere Zeile hinzufügen.

Das habe ich jetzt:
Code:
for (ResultList.Row row : list)
    {
      // MerkmalsId = lBody.ID
      mId = row.getString(4);
      // Merkmal = lHdr.Text(0) + lSect.Text(2)
      attr = row.getString(0) + "_" + row.getString(2);
      // Technischer Name
      technicalName = row.getString(4) + row.getString(5) + row.getString(6);
      // Objekt instanziieren, das die Daten kapselt
      FormattedAttributes fcd = new FormattedAttributes(mId, attr);
      // fcd.formatInputs(attr);
      formattedAttributes.add(fcd);
      // /////////////////////////////////////////////////////////
      spec = row.getString(1);
      TechnicalDataIDs tdId = new TechnicalDataIDs(technicalName);
      techNamesList.add(tdId);
      // //////////////////////////////////////////////////////////
      FormattedSpecifications fcdSpec = new FormattedSpecifications(spec);
      formattedSpecs.add(fcdSpec);
    }

    FormattedSpecifications actObj = formattedSpecs.get(2);
    actObj.setLines();
    System.out.println("j" + actObj.getLines(1));
    formattedSpecs.add(actObj);

    System.out.println("Spezifikationen");
    for (FormattedSpecifications at : formattedSpecs)
    {
      System.out.println(at.getLines(1));
    }

Und das kommt raus:
j[5.4 cm]


Da müsste aber
j[5.4 cm , testblabla stehen]

*kopfQualm*
 
S

SlaterB

Gast
geht es um das actObj-Objekt?
ist denn dieser Aufruf von getLines(1) nötig?

ruf doch mal eine Ausgabe der lines aus ohne
calculatePartLength(rows);
formatInputs(specifications, Math.max(rows, minRows));
zwischendurch (was getLines(1)) macht,

und zwar vor und nach dem Einfügen, sonst kann man ja eh nix genaues sagen
 

MASTERmind

Bekanntes Mitglied
hab ich gemacht, wenn ich dich richtig verstanden habe!

Ergebnis:
j[testBlablabla]
Spezifikationen
[]
[]
[testBlablabla]
[]
[]
[testBlablabla]


Code FormattedSpecifications:

Code:
  public List<String> getLines(int rows)
  {
    //calculatePartLength(rows);

    //formatInputs(specifications, Math.max(rows, minRows));

    return lines;
  }

Edit:
Ohne getLines() bekomme ich nur Referenzen zurück
function.article.FormattedSpecifications@11b9fb1
 
S

SlaterB

Gast
hat das jetzt was mit mir zu tun?
also ich kann aus deinen 8 Ausgaben ohne Informationen, was sie bedeuten (oder gar Code) nichts herauslesen

ich will eine Ausgabe
vor: []
nach: [testBlablabla]

und wär dann zufrieden, falls dich meine momentane Wunschliste interessiert ;)
 

MASTERmind

Bekanntes Mitglied
Jetzt kapier ich net was Du willst!????? :(

Den Quellcode hab ich ja vorher gepostet.
Mein letzter Post war das Ergebnis der Auskommentierung von:
Code:
  public List<String> getLines(int rows)
  {
    //calculatePartLength(rows);

    //formatInputs(specifications, Math.max(rows, minRows));

    return lines;
  }
Erkennbar ist, dass die Liste jedes einzelnen Objektes leer sein muss, weil der zu splittende String nicht per auskommentierter Methode übergeben wird!
Daher das Ergebnis.


Ich möchte doch nur die vom instanziierten Objekt der Klasse FormattedSpecifications gehaltene ArrayList per Aufruf aus einer anderen Klasse verändern. Mehr net.



:(
 
S

SlaterB

Gast
> Den Quellcode hab ich ja vorher gepostet.
> Mein letzter Post war das Ergebnis der Auskommentierung

also gut, dann hast du zwar kein vorher + nachher
(sondern immer noch die Schleife mit so vielen Ausgaben, keine Ahnung wozu),
aber immerhin: nun steht in der einzig interessanten j-Zeile
j[testBlablabla]

statt vorher
j[5.4 cm]


also ist das testBlablabla offensichtlich nun drin,
so wolltest du es doch?

-------

anscheinend entfernt der auskommierte Code testBlablabla wieder,
wie ich es vermutet habe

warum kann ich spontan nicht sagen,
obwohl, sogar ein einfacher Blick brachte sofort

public void formatInputs(String specifications, int lineCount)
{
lines.clear();
...
}

an so einem lines.clear(); kann es ja durchaus liegen oder? ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
D Browser-Objekt erzeugen Allgemeine Java-Themen 8
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
A Iterationen einer XML-Datei in einem Objekt sichern Allgemeine Java-Themen 5
R Objekt zur Laufzeit zerstören? Allgemeine Java-Themen 12
hdi Frage zur Objekt Initialisierung Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
T Serialisiertes Objekt über Socket nachladen Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben