Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-09-2004, 14:33   #1 (permalink)
RS4
Neuer User
 
Benutzerbild von RS4
 
Registriert seit: Sep 2004
Ort: Zürich
Beiträge: 62
Array Problemchen...??

Hallo zusammen!

Ich habe da ein Problem mit dem auslesen von Daten aus einem simplen Array.

Es sollte folgendes tun: Das Array besteht aus 6 Zahlen, ich versuche nun die zu eruieren welche 1. Positiv ist, und 2. möglichst nahe bei 0 liegt.

Bsp: -1, -66, 900, 4, 187, 5.77 --> muss 4 ausgeben.

Es läuft jedoch nicht. Ich habe die Abfrage in 2 Teile gegliedert. Zuerst suche ich eine positive Zahl, und danach diejenige, welche am nächsten bei 0 liegt.

Läuft aber nicht, und ich verzweifle!!!!

Code:
lb_array = new Array(-1, -2, -3, 4, -5, -6);

xz = 0;

for(zaehler = 0; zaehler < 5 || xz > 0; zaehler++)
{
	if(lb_array[zaehler] > 0)
	{
		xz = zaehler;
	}
}
if(xz > 0 && xz != 5)
{
	temp = lb_array[xz];
	xz++;
	for(zaehler = xz; zaehler < 5; zaehler++)
	{
		if(temp > lb_array[zaehler] && lb_array[zaehler] > 0)
		{
			temp = lb_array[zaehler];
		}
	}
}
	trace(temp);
}
Wenn ich nur negative Zahlen ins Array fülle, dann gehts, dass lässt mich zum Schluss kommen, dass in der zweiten Hälfte des Codes nicht ganz klappen will, denn beim ausführen stürzt Macromedia immmmer ab...

Kann mir jemand helfen oder einen Tipp geben, ich wäre sehr dankbar!!

Gruss Patrick
__________________
I'm trying hard and not to give up!
RS4 ist offline   Mit Zitat antworten
Alt 22-09-2004, 14:47   #2 (permalink)
freundlich ...
 
Benutzerbild von LoRMiddleCLass
 
Registriert seit: Aug 2002
Ort: Berlin
Beiträge: 588
hi,

hier ne kleine unsaubere funktion:
PHP-Code:
= [ -1, -6690041875.77 ];

function 
nextUeberNull ar ) {
    var 
t1 = [];
    for( var 
i in ar ) if( ar[i] >= t1.pushar[i] );
    var 
t2 t1[0];
    for( 
i in t1 ) if( t1[i] < t2 t2 t1[i]; 
    return 
t2;
}

trace(nextUeberNull(a)); 
grüße *m
__________________
the universe wants you to win...
LoRMiddleCLass ist offline   Mit Zitat antworten
Alt 22-09-2004, 14:58   #3 (permalink)
RS4
Neuer User
 
Benutzerbild von RS4
 
Registriert seit: Sep 2004
Ort: Zürich
Beiträge: 62
Ne unsaubere Funktion????

Das funktioniert ja super... Ich versuche schon den ganzen Nachmittag das zu lösen, und dann kommt so was...

Ich muss jetzt nur noch alles verstehen, und dann ist alles i.o, aber funktionieren tuts wie geschmiert...

Danke vielmals für deine Hilfe!!!!

Gruss Patrick
__________________
I'm trying hard and not to give up!
RS4 ist offline   Mit Zitat antworten
Alt 22-09-2004, 15:03   #4 (permalink)
freundlich ...
 
Benutzerbild von LoRMiddleCLass
 
Registriert seit: Aug 2002
Ort: Berlin
Beiträge: 588
naja, das geht bestimmt noch schöner...

aber ich seh grad: wenn in dem array ne 0 enthalten ist, würde die funktion die 0 auch zurückgeben als kleiinste zahl.
wenn du eine zahl über 0 willst musst du folgenden teil:
if( ar[i] >= 0 )
so ändern:
if( ar[i] > 0 )

*m
__________________
the universe wants you to win...
LoRMiddleCLass ist offline   Mit Zitat antworten
Alt 22-09-2004, 15:23   #5 (permalink)
RS4
Neuer User
 
Benutzerbild von RS4
 
Registriert seit: Sep 2004
Ort: Zürich
Beiträge: 62
Ja, das hab ich gesehen und schon geändert.

Danke aber nochmals für den Tipp und für die Hilfe!!

Gruss Patrick
__________________
I'm trying hard and not to give up!
RS4 ist offline   Mit Zitat antworten
Alt 22-09-2004, 15:46   #6 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
Deine Funktion ist doch super!

Schade, dass man das Array nicht per sort(),
sortieren kann.
Es müsste doch möglich sein Zahlen zu sortiern oder?
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 22-09-2004, 16:11   #7 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
schau doch einfach mal in die flashhilfe unter Array.sort
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 22-09-2004, 16:15   #8 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ maddin79


Sicherlich habe ich schon Bücher, die FlashHilfe
und auch das Internet durchsucht.
Array.sort() wandelt aber die Array Elemente
vor dem Sortieren, in Strings um.
Irgendwie habe ich es noch nicht hinbekommen,
auf einfache Art und Weise ein Array mit Zahlen zu sortieren.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 22-09-2004, 16:25   #9 (permalink)
freundlich ...
 
Benutzerbild von LoRMiddleCLass
 
Registriert seit: Aug 2002
Ort: Berlin
Beiträge: 588
wie wär's hiermit:

PHP-Code:
 a = [ -1, -66900,41875.77 ];

function 
nextUeberNull a,) {
     return 
<= && <= ? -<= ? -? -0;
}

a.sortnextUeberNull);

tracea[0] ); 
(ich wusste doch, dass es noch schöner geht...)

du kannst für sort deine eigene funktion schreiben. dann wird auch nix unnötig in strings umgewandelt...

*m
__________________
the universe wants you to win...
LoRMiddleCLass ist offline   Mit Zitat antworten
Alt 22-09-2004, 17:48   #10 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ LoRMiddleCLass

Ich kann es einfach nicht 100%ig nachvollziehen.

Kannst Du das bitte mal mit if formulieren.
Das wäre echt super.
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 22-09-2004, 21:42   #11 (permalink)
Neuer User
 
Registriert seit: Sep 2004
Beiträge: 36
Na so ein Zufall, das mit dem Sortieren musste ich auch heute machen...

Also, wenn du ein Array mit Zahlen Sortieren willst, sieht das so aus:

Code:
a = [-7, 5,3, -90, 90];
a.sort(Array.NUMERIC);
(Hoffe, das war jetzt richtig..., habs gerade nicht mehr zur Hand...) Alternativ kannst du auch a.sort(16); schreiben.

Gruß
Sebezahn
sebezahn ist offline   Mit Zitat antworten
Alt 22-09-2004, 21:45   #12 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ sebezahn

Super! Das habe ich gesucht.
Wieso habe ich das nicht selbst gefunden?
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------
thebiz ist offline   Mit Zitat antworten
Alt 22-09-2004, 22:30   #13 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ LoRMiddleCLass

Ok, ich habe es schon selbst dechiffriert.

ActionScript:
  1. a = [-1, -66, 900, 0, 4, 187, 1.4, 5.77, 3.5];
  2. //---------------------------------------------
  3. function n(a, b) {
  4.  if (a <= 0 && b <= 0) {
  5.   if (a < b) {
  6.    return 1;
  7.   }
  8.   if (b < a) {
  9.    return -1;
  10.   }
  11.   return 0;
  12.  } else {
  13.   if (a <= 0) {
  14.    return 1;
  15.   }
  16.   if (b < 0) {
  17.    return -1;
  18.   }
  19.   if (a < b) {
  20.    return -1;
  21.   }
  22.   if (a > b) {
  23.    return 1;
  24.   } else {
  25.    return 0;
  26.   }
  27.  }
  28. }
  29. //---------------------------------------------
  30. a.sort(n);
  31. trace(a[0]);
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------

Geändert von thebiz (23-09-2004 um 01:15 Uhr)
thebiz ist offline   Mit Zitat antworten
Alt 23-09-2004, 01:22   #14 (permalink)
All-rounder
 
Benutzerbild von thebiz
 
Registriert seit: Mar 2004
Ort: Bayerische Rhön
Beiträge: 2.507
@ LoRMiddleCLass

Das Teil funktioniert nicht richtig.
Gebe mal noch eine 4 ins Array.
Dann kommt eine 0 als Ergebnis.

Verstehen kann ich die komplexe Sortierfunktion
nicht.

Danke sebezahn würd ich es so lösen:

ActionScript:
  1. a = [-1, -66, 900, 0, 4, 4, 187, 2, 1.5];
  2. //---------------------------------------
  3. b = [];
  4. for (i in a) {
  5.  if (a[i] > 0) {
  6.   b.push(a[i]);
  7.  }
  8. }
  9. //---------------------------------------
  10. b.sort(16);
  11. trace(b[0]);
  12. //---------------------------------------
  13.  
__________________

--------------------------------
Ich klicke, ergo bin ich. (me)
--------------------------------

Geändert von thebiz (23-09-2004 um 02:01 Uhr)
thebiz ist offline   Mit Zitat antworten
Alt 23-09-2004, 10:00   #15 (permalink)
freundlich ...
 
Benutzerbild von LoRMiddleCLass
 
Registriert seit: Aug 2002
Ort: Berlin
Beiträge: 588
hi biz,

in der funktion hat ein '=' gefehlt:
PHP-Code:
s
function nextUeberNull a,) {
    return 
<= && <= ? -<= <= ? -? -0;

kannst du's entdecken?
hier in der ausgeschriebenen form:
PHP-Code:
function n(ab) {
    if (
<= && <= 0) {
      if (
b) {
       return 
1;
      }
      if (
a) {
       return -
1;
      }
      return 
0;
    } else {
      if (
<= 0) {
       return 
1;
      }
      if (
<= 0) { // <- hier!
       
return -1;
      }
      if (
b) {
       return -
1;
      }
      if (
b) {
       return 
1;
      } else {
       return 
0;
      }
    }

jetzt klappt's besser.

allerdings muss ich ja sagen, dass diese funktion mit ternären operatoren ja nah an selbstbefriedigung grenzt. im echten leben ziehe ich allemal meine erste oder deine letzte version vor.
aber tapfer, dass du das ding entzippt hast...

zum verständniss: du hast ja schon alles ausführlich hingeschrieben. die funktion bekommt nach und nach immer zwei zahlen aus dem array und vergleicht sie. wie in der flashhilfe unter array.sort steht:
a < b return -1
a == b return 0
a > b return 1

mehr macht die funtktion auch nicht, außer, dass, wenn eine zahl negativ ist, sie automatisch als größer als jede positive zahl angesehen wird.
das ist eigentlich alles.

grüße *m
__________________
the universe wants you to win...
LoRMiddleCLass 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 11:33 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele