Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 17-12-2007, 23:26   #1 (permalink)
th.
Neuer User
 
Benutzerbild von th.
 
Registriert seit: Oct 2001
Ort: Bielefeld
Beiträge: 1.279
5 x addieren in Flash

Hallo zusammen,
uns ist ein lustiger kleiner AS-Effekt untergekommen.
Das lässt mich gerade etwas an Flash zweifeln ...
PHP-Code:
testArray = [00];
for (var 
0s<5s++) {
    
rd random(2);
    
testArray[rd]++;
}
trace(testArray);
// Summe immer 5


testArray = [00];
for (var 
0s<5s++) {
    
testArray[random(2)]++;
}
trace(testArray);
// Summe nicht immer 5 
Als Summe müsste ja in beiden Varianten 5 rauskommen, ist aber nicht der Fall. Gibt es dafür eine vernünftige Erklärung?

Lieber Gruß,
Thorsten
__________________
polyaktiv.de
Flash 3D-Renderer
th. ist offline   Mit Zitat antworten
Alt 18-12-2007, 07:52   #2 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Ja wirklich lustig. Wird das vom Compiler vielleicht so verrechnet?
ActionScript:
  1. testArray[random(2)] = testArray[random(2)]+1;


Würde es zumindest erklären.

gruß
sebastian ist offline   Mit Zitat antworten
Alt 18-12-2007, 07:59   #3 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Machs doch lieber so, da scheint es dann zu klappen...
PHP-Code:
testArray = [00];
for (var 
0s<5s++) {
    var 
random(2);
    
testArray[r]++;

__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 18-12-2007, 08:08   #4 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Der ist ja auch nicht schlecht:
PHP-Code:
testArray = [00];
for (var 
0s<5s++) {
    ++
testArray[random(2)];

Sollte ja auch nicht mehr als 5 rauskommen, tuts aber.
Oder liege ich da falsch?
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 18-12-2007, 08:19   #5 (permalink)
th.
Neuer User
 
Benutzerbild von th.
 
Registriert seit: Oct 2001
Ort: Bielefeld
Beiträge: 1.279
Hallo
Zitat:
Zitat von rendner[i] Beitrag anzeigen
Machs doch lieber so, da scheint es dann zu klappen...
PHP-Code:
testArray = [00];
for (var 
0s<5s++) {
    var 
random(2);
    
testArray[r]++;

Die Variante ist ja die obere. Die Funktioniert genau so, wie ich erwarten würde. Die 2te Variante eben nicht.

@Sebastian:
Aber wenn das so interpretiert würde, dürften da nur Ergebnisse >= 5 rauskommen. Komischerweise sind aber auch Summen zw. 2 od. 3 keine Seltenheit.

Gruß,
Thorsten
__________________
polyaktiv.de
Flash 3D-Renderer

Geändert von th. (18-12-2007 um 08:21 Uhr)
th. ist offline   Mit Zitat antworten
Alt 18-12-2007, 08:53   #6 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Doch das geht ja auch
ActionScript:
  1. [0, 0]
  2.  
  3. testArray[1] = testArray[0]+1;
  4. testArray[1] = testArray[0]+1;
  5. testArray[1] = testArray[0]+1;
  6. testArray[1] = testArray[0]+1;
  7. testArray[1] = testArray[0]+1;
  8.  
  9. => [0, 1]

Ein Beispiel für den anderen Fall:
ActionScript:
  1. [0, 0]
  2.  
  3. testArray[1] = testArray[0]+1; // [0, 1]
  4. testArray[0] = testArray[1]+1; // [2, 1]
  5. testArray[1] = testArray[0]+1; // [2, 3]
  6. testArray[0] = testArray[1]+1; // [4, 3]
  7. testArray[1] = testArray[0]+1; // [4, 5]
  8.  
  9. => [4,5]

Geändert von sebastian (18-12-2007 um 08:55 Uhr)
sebastian ist offline   Mit Zitat antworten
Alt 18-12-2007, 08:59   #7 (permalink)
th.
Neuer User
 
Benutzerbild von th.
 
Registriert seit: Oct 2001
Ort: Bielefeld
Beiträge: 1.279
Stimmt,
das wäre tatsächlich ein Erklärung. Eine gute sogar. Aber mögen würde ich es nicht .

[Ach doch: Jetzt verstehe ich das erst. Das ++ wird intern einfach anders gehandhabt, als ich dachte. Danke Sebastian ]

Gruß,
Thorsten
__________________
polyaktiv.de
Flash 3D-Renderer

Geändert von th. (18-12-2007 um 09:02 Uhr)
th. ist offline   Mit Zitat antworten
Alt 18-12-2007, 09:03   #8 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
@th:
Ja ist das gleiche, hatte ich gar nicht gesehen .


Aber auf mich wirkt das ganze wie ein Bug, oder gibt es da einen Grund warum diese 2te Variante anders funktioniert?
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 18-12-2007, 09:10   #9 (permalink)
th.
Neuer User
 
Benutzerbild von th.
 
Registriert seit: Oct 2001
Ort: Bielefeld
Beiträge: 1.279
Ja,
Sebastian hatte es HIER auf den Punkt gebracht .

Thorsten
__________________
polyaktiv.de
Flash 3D-Renderer
th. ist offline   Mit Zitat antworten
Alt 18-12-2007, 09:21   #10 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Zitat:
Zitat von th. Beitrag anzeigen
Ja,
Sebastian hatte es HIER auf den Punkt gebracht .

Thorsten
Ich meinte warum dieses Verhalten so implementiert ist... und nicht wie erwartet.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 18-12-2007, 09:56   #11 (permalink)
Rock'n'Bass
 
Benutzerbild von <sVkVmVit>
 
Registriert seit: Feb 2006
Ort: Hamburg
Beiträge: 202
Nichtsss ist so wie es scheinnnt .....

aber mal dazu jetzt: Das sind nunmal so typische Tücken, die im Actionscript-Alltag auftauchen und die einem immer wieder stolperfallen stellen, wenn man es nicht erwartet hat.
Und jede Sprache hat eben ihre eigenen Regeln, nach der sie funktionert.
__________________
==>remix.nin.com<==
//
Life Is Too Short For Boring Music!
Fantasie ist die einzige Waffe gegen die Wirklichkeit.

Geändert von <sVkVmVit> (18-12-2007 um 10:00 Uhr)
<sVkVmVit> ist offline   Mit Zitat antworten
Alt 18-12-2007, 10:06   #12 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.649
Sehr gut zu wissen!
Falls mir das passiert hab ich den Thread aber wahrscheinlich schon lange wieder vergessen.
__________________
[ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ]

devboy.org
b.asile ist offline   Mit Zitat antworten
Alt 18-12-2007, 10:16   #13 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
In AS3 funktioniert es übrigens problemlos
sebastian ist offline   Mit Zitat antworten
Alt 18-12-2007, 10:25   #14 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Böse Sache, wenn man eine eigene Funktion verwendet, sieht man dass sie tatsächlich zweimal aufgerufen wird:
PHP-Code:
function test() {
    
trace("test");
    return 
1;
}

testArray = [00];
testArray[test()]++;

// test
// test 
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele