Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Eigenschaften zweier Objekte einer Klasse beeinflussen sich ungewollt


  • Please log in to reply
No replies to this topic
Binary
  • Validating
  • 39 posts
  • Last active: Apr 29 2016 09:12 AM
  • Joined: 29 Sep 2013

Hallo,

 

ich versuche gerade, zwei Objekte von derselben Klasse zu erstellen und muss feststellen, dass sich deren Eigenschaften gegenseitig manipulieren:

class my_string
{
  static letters := Array()

  content := ""
  length := "0"
  width := "0"
  letter_width := Array()

  __New(string, size, form)
  {
    if(size == "8")
    {
      if(form == "norm")
      {
        this.letters.Insert(Array("A", "1", "8"))
        this.letters.Insert(Array("B", "2", "7"))
        this.letters.Insert(Array("C", "3", "7"))
        this.letters.Insert(Array("D", "4", "8"))
        this.letters.Insert(Array("E", "5", "7"))
        this.letters.Insert(Array("F", "6", "6"))
        this.letters.Insert(Array("G", "7", "8"))
        this.letters.Insert(Array("H", "8", "8"))
        this.letters.Insert(Array("I", "9", "3"))
        this.letters.Insert(Array("J", "10", "5"))
        this.letters.Insert(Array("K", "11", "8"))
        this.letters.Insert(Array("L", "12", "6"))
        this.letters.Insert(Array("M", "13", "9"))
        this.letters.Insert(Array("N", "14", "8"))
        this.letters.Insert(Array("O", "15", "8"))
        this.letters.Insert(Array("P", "16", "7"))
        this.letters.Insert(Array("Q", "17", "8"))
        this.letters.Insert(Array("R", "18", "8"))
        this.letters.Insert(Array("S", "19", "7"))
        this.letters.Insert(Array("T", "20", "7"))
        this.letters.Insert(Array("U", "21", "8"))
        this.letters.Insert(Array("V", "22", "8"))
        this.letters.Insert(Array("W", "23", "11"))
        this.letters.Insert(Array("X", "24", "8"))
        this.letters.Insert(Array("Y", "25", "8"))
        this.letters.Insert(Array("Z", "26", "7"))
      }
    }
    else if(size == "16")
    {
      if(form == "bold")
      {
        this.letters.Insert(Array("A", "1", "16"))
        this.letters.Insert(Array("B", "2", "15"))
        this.letters.Insert(Array("C", "3", "16"))
        this.letters.Insert(Array("D", "4", "16"))
        this.letters.Insert(Array("E", "5", "15"))
        this.letters.Insert(Array("F", "6", "14"))
        this.letters.Insert(Array("G", "7", "17"))
        this.letters.Insert(Array("H", "8", "16"))
        this.letters.Insert(Array("I", "9", "6"))
        this.letters.Insert(Array("J", "10", "11"))
        this.letters.Insert(Array("K", "11", "16"))
        this.letters.Insert(Array("L", "12", "14"))
        this.letters.Insert(Array("M", "13", "18"))
        this.letters.Insert(Array("N", "14", "16"))
        this.letters.Insert(Array("O", "15", "17"))
        this.letters.Insert(Array("P", "16", "15"))
        this.letters.Insert(Array("Q", "17", "18"))
        this.letters.Insert(Array("R", "18", "16"))
        this.letters.Insert(Array("S", "19", "15"))
        this.letters.Insert(Array("T", "20", "14"))
        this.letters.Insert(Array("U", "21", "16"))
        this.letters.Insert(Array("V", "22", "16"))
        this.letters.Insert(Array("W", "23", "21"))
        this.letters.Insert(Array("X", "24", "16"))
        this.letters.Insert(Array("Y", "25", "17"))
        this.letters.Insert(Array("Z", "26", "15"))
      }
    }

    this.content := string
    this.length := StrLen(string)

    Loop % this.length
    {
        letter := SubStr(string, A_Index, 1)
        if(letter == " ")
         letter := "' '"
        Loop % this.letters.MaxIndex()
        {
          array_element_name := this.letters[A_Index][1]
          array_element_width := this.letters[A_Index][3]
          if(array_element_name == letter)
	  {
            this.width += array_element_width
	    this.letter_width.Insert(array_element_width)
	   continue
	  }
	}
    }
  }
}
obj_1 := new my_string("Objekt 1", "8", "norm")
msgbox % obj_1.letters.MaxIndex()
obj_2 := new my_string("Objekt 2", "16", "bold")
msgbox % obj_2.letters.MaxIndex()

Eigentlich sollten diese beiden Objekte doch jeweils ein Array mit allen Großbuchstaben und somit MaxIndex() von 26 haben! Leider muss ich feststellen, dass beim Erstellen des zweiten Objekts einfach ein neuer Datensatz à 26 Großbuchstaben an den des ersten Objekts angehängt werden, folglich ergibt sich diese Ausgabe:

 --> 26

 --> 52

 

Wie kann ich das ändern?? So sollte sich doch eine Klasse nicht verhalten...

 

Kann mir da jmd. weiterhelfen?

lg

 

 

EDIT:

Oh verdammt, es lag am "static" :O

Mein Fehler...