Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-03-2006, 08:04   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Ort: Karlsruhe
Beiträge: 89
Array als Rückgabewert

Hallo,

ich habe ein kleines Problem. Es wird in dem langen Kommentar im Code beschrieben, an dessen Stelle es auch entsteht.

Wäre schön wenn mir jemand helfen kann.

Code:
// function getWinner() ermittelt den Gewinner:
	function getWinner(numPlayers,maxTracks){
		// Punkte-Array initialisieren
		var ergArray:Array = new Array(numPlayers);
		// Aktueller Player(i)
		for(var i=0;i<numPlayers;i++){
			var pkt:Number=0;
			// Aktuelles Level(j)
			for(var j=0;j<maxTracks;j++){
				pkt += round[j][i];
				// trace("Player:"+i+" Level:"+j+" Punkt:"+round[j][i]+"\n");
			}
			ergArray[i] = pkt;
		}
		// ermitteln des größten im Array ergArray
		MaxiWert = ergArray[0];  
		for(i=ergArray.length-1; i > 0; i--){  
        	MaxiWert=Math.max(MaxiWert,ergArray[i]);
		}  
		// Prüfen ob Maximalwert mehrmals vorhanden ist
		var keyword:Number = MaxiWert;
		var countWinners:Number=0;
		
		// Anzahl der Gewinner ermitteln
		for(var i=0;i<ergArray.length;i++){
			if(ergArray[i]==keyword){
				countWinners++;
			}
		}
		trace("countWinners: "+countWinners);
		
		// initialisierung Array winnerIDs
		var winnerIDs:Array = new Array(countWinners);

// Nachfolgend sollen nur die Player eingetragen werden,
// dessen Wert dem keyword entspricht. Problem ist, dass ich
// folgende Ausgabe bekomme.
/*
countWinners: 2
ID: 0Punkte: 5
ID: 1Punkte: undefined
ID: 2Punkte: 5
*/
// das ID: 1Punkte: undefined soll hier aber nicht drinn stehen!



		// Array winnerIDs mit winnerIDs füllen und  
		
		for(var i=0;i<ergArray.length;i++){
			if(ergArray[i]==keyword){
				winnerIDs[i] = keyword;
			}
		}
		return winnerIDs;
	}

ID: 0 Punkte: 5
ID: 1 Punkte: undefined
ID: 2 Punkte: 5

Wie kann ich es schaffen, dass der zweite Eintrag im ErgebnisArray nicht enthalten ist, sondern nur die Gewinner?

Geändert von Jo3000 (01-03-2006 um 08:08 Uhr)
Jo3000 ist offline   Mit Zitat antworten
Alt 01-03-2006, 08:12   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Da gibts mehrere Möglichkeiten, probier mal das an der Stelle wo du die Punkte speicherst.
PHP-Code:
ergArray[i] = isNaNpkt ) ? pkt
Und sortieren geht auch um einiges einfacher:
PHP-Code:
var = [ 1215,6];

tracea.sort( Array.NUMERIC ).reverse() ); 
__________________
ERROR: Signature is too large

Geändert von rendner[i] (01-03-2006 um 08:16 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 01-03-2006, 08:33   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Ort: Karlsruhe
Beiträge: 89
Code:
if(ergArray[i]==keyword){
    ergArray[i] = isNaN( keyword ) ? 0 : keyword; 
    // winnerIDs[i] = i;
}
ergibt:
ID: 0Punkte: undefined
ID: 1Punkte: undefined

Wenigstens nur noch 2 Einträge...
Jo3000 ist offline   Mit Zitat antworten
Alt 01-03-2006, 08:45   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Ort: Karlsruhe
Beiträge: 89
Question Vereinfachte Fragestellung:

Code:
for(var i=0;i<ergArray.length;i++){ 
   if(ergArray[i]==keyword){
      winnerIDs[i] = keyword; 
   }
}
liefert:

ID: 0Punkte: 5
ID: 1Punkte: undefined
ID: 2Punkte: 5

Wie bekomme ich undefined weg bzw. den kompletten 2 Eintrag?
Jo3000 ist offline   Mit Zitat antworten
Alt 01-03-2006, 08:47   #5 (permalink)
°.oO°O.o°.oO.o°O
 
Benutzerbild von bamboocha
 
Registriert seit: Jun 2005
Ort: CH
Beiträge: 1.490
PHP-Code:
if(ergArray[i]!=undefined){ 
__________________
There is no way to happiness, happiness is the way! - Buddha
bamboocha ist offline   Mit Zitat antworten
Alt 01-03-2006, 08:50   #6 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
@ Jo3000:
Du hast aber an der falschen stelle mein Script eingebaut, du musst das schon da machen wo du auch die punkte speicherst...

PHP-Code:
for(var i=0;i<numPlayers;i++){
            var 
pkt:Number=0;
            
// Aktuelles Level(j)
            
for(var j=0;j<maxTracks;j++){
                
pkt += round[j][i];
                
// trace("Player:"+i+" Level:"+j+" Punkt:"+round[j][i]+"\n");
            
}
            
ergArray[i] = pkt;  // <-- hier muss jetzt meine Zeile rein....
        

__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 01-03-2006, 08:57   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Ort: Karlsruhe
Beiträge: 89
Zitat:
Zitat von bamboocha
PHP-Code:
if(ergArray[i]!=undefined){ 
ID: 0Punkte: 5
ID: 1Punkte: 5
ID: 2Punkte: 5
Jo3000 ist offline   Mit Zitat antworten
Alt 01-03-2006, 08:58   #8 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Ort: Karlsruhe
Beiträge: 89
Danke wenn ich deine Zeile einfüge ändert sich leider nichts am Erg.

Zitat:
Zitat von rendner[i]
@ Jo3000:
Du hast aber an der falschen stelle mein Script eingebaut, du musst das schon da machen wo du auch die punkte speicherst...

PHP-Code:
for(var i=0;i<numPlayers;i++){
            var 
pkt:Number=0;
            
// Aktuelles Level(j)
            
for(var j=0;j<maxTracks;j++){
                
pkt += round[j][i];
                
// trace("Player:"+i+" Level:"+j+" Punkt:"+round[j][i]+"\n");
            
}
            
ergArray[i] = pkt;  // <-- hier muss jetzt meine Zeile rein....
        

Jo3000 ist offline   Mit Zitat antworten
Alt 01-03-2006, 08:59   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Ort: Karlsruhe
Beiträge: 89
Kompletter Code für die bessere Übersicht:

Code:
//	Variablen
	var maxTracks:Number = 7;	// Anzahl Fragen / Spiel
	var numPlayers:Number = 3;	// Anzahl Spieler
//	Initialisierung Arrays
	var players:Array;
	var round:Array;
	round = new Array(maxTracks);			// round
	for(var i=0;i<maxTracks;i++){
		round[i] = new Array(numPlayers);	// unterarray anlegen
	}
//	Zuweisung der Belegung(0)
	for(var level=1;level<=round.length;level++){
		for(var punkt=1;punkt<=round[level-1].length;punkt++){
				round[level-1][punkt-1] = 0;
		}
	}
//	Werte für Spieler deklarieren:
	// Player 0	
	round[0][0] = 1;	// round[0] => level 0 | round[0][0] => level 0 Player 0 
	round[1][0] = 1;	
	round[2][0] = 1;
	round[3][0] = 1;
	round[4][0] = 1;
	// Player 1
	round[1][1] = 1;
	round[2][1] = 1;
	round[3][1] = 1;
	round[5][1] = 1;
	// Player 2
	round[0][2] = 1;
	round[1][2] = 1;
	round[2][2] = 1;
	round[3][2] = 1;
	round[6][2] = 1;
//	Ausgabe
	for(var level=1; level <= round.length; level++){
		trace(round[level-1]+"\n");
	}
// function getWinner() ermittelt den Gewinner:
	function getWinner(numPlayers,maxTracks){
		// Punkte-Array initialisieren
		var ergArray:Array = new Array(numPlayers);
		// Aktueller Player(i)
		for(var i=0;i<numPlayers;i++){
			var pkt:Number=0;
			// Aktuelles Level(j)
			for(var j=0;j<maxTracks;j++){
				pkt += round[j][i];
				// trace("Player:"+i+" Level:"+j+" Punkt:"+round[j][i]+"\n");
			}
			ergArray[i] = pkt;
		}
		// ermitteln des größten im Array ergArray
		MaxiWert = ergArray[0];  
		for(i=ergArray.length-1; i > 0; i--){  
        	MaxiWert=Math.max(MaxiWert,ergArray[i]);
		}  
		// Prüfen ob Maximalwert mehrmals vorhanden ist
		var keyword:Number = MaxiWert;
		var countWinners:Number=0;
		
		// Anzahl der Gewinner ermitteln
		for(var i=0;i<ergArray.length;i++){
			if(ergArray[i]==keyword){ 
				countWinners++;
			}
		}
		trace("countWinners: "+countWinners);
		
		// initialisierung Array winnerIDs
		var winnerIDs:Array = new Array(countWinners);
		
		// Array winnerIDs mit winnerIDs füllen und  
		
		for(var i=0;i<ergArray.length;i++){ // Auch countWinners könnte hier als Bedingung gestellt werden => 2 Durchläufe
			if(ergArray[i]==keyword){
				winnerIDs[i] = keyword; 
			}
		}
		return winnerIDs;
	}
	button.onRelease=function(){
		// Ausgabefeld initialisieren;
		winner = "";
		ergArray = getWinner(numPlayers, maxTracks);
		// Ausgabe Ergebnissummen

		for(var i=0; i < ergArray.length; i++){
				trace("ID: "+i+"Punkte: "+ergArray[i]);
		}

}
Jo3000 ist offline   Mit Zitat antworten
Alt 01-03-2006, 09:32   #10 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Wenn ich es teste bekomme ich kein undefined...habe die Funktion getWinner direkt mit den Parametern aufgerufen.

EDIT:
Sehe gerade wenn man es so macht wie du im Button dann kommt der Fehler...
Das liegt daran das du die Gewinner falsch in dein Array winnerIDs überträgst.

Solltest du lieber so machen:
PHP-Code:
var winnerIDs:Array = new Array();
        
        for(var 
i=0;i<ergArray.length;i++)
        {
            if(
ergArray[i]==keyword)
            {
                
winnerIDs.pushkeyword ); 
            }
        } 
__________________
ERROR: Signature is too large

Geändert von rendner[i] (01-03-2006 um 09:43 Uhr)
rendner[i] ist offline   Mit Zitat antworten
Alt 01-03-2006, 09:36   #11 (permalink)
Neuer User
 
Registriert seit: Jun 2003
Ort: Karlsruhe
Beiträge: 89
Danke, jetzt geht's!
Jo3000 ist offline   Mit Zitat antworten
Alt 01-03-2006, 10:12   #12 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Habe deine Funktion mal kurz etwas überarbeitet.
PHP-Code:
// function getWinner() ermittelt den Gewinner:
function getWinnernumPlayersNumbermaxTracksNumber ): Array
{
    var 
ergArray: Array = new Array( numPlayers );
    var 
pktNumber;

    for( var 
iNumber 0numPlayersi++ )
    {
        
pkt 0;
        
        for( var 
jNumber 0maxTracksj++ )
        {
            
pkt += round[j][i];
            
trace("Player:"+i+" Level:"+j+" Punkt:"+round[j][i]+"\n");
        }
        
        
ergArray[i] = pkt;
    }
    
    var 
maxWertNumber ergArray.sort( Array.NUMERIC ).reverse()[0];
    
    var 
cntWinnersNumber 0;
    
    for( var 
iNumber 0ergArray.lengthi++ )
    {
        if( 
ergArray[i] == maxWert cntWinners++;
        else break;
    }
    
    return 
ergArray.splice0cntWinners );

Auch solltest du den Namen "winnerIDs" überdenken weil der ja aussagt das das Array die ID's der Gewinner enthält was aber gar nicht der Fall ist.
__________________
ERROR: Signature is too large

Geändert von rendner[i] (01-03-2006 um 10:18 Uhr)
rendner[i] 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 10:14 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele