Flash 动作脚本3条件

Flash 动作脚本3条件,flash,actionscript-3,conditional,Flash,Actionscript 3,Conditional,我有一个我认为应该很容易解决的问题。我通读一个数组并计算其中出现的值,然后将这些值写入一些变量,我想在一个条件数组中进行比较。我的条件应该跟踪哪个数字出现得更多 数组代码: ActionScript代码: private function runCount(scoreArray:Array, count1:Number, count2:Number, count3:Number):void { for (var i:int=0; i < scoreArray.length; i++

我有一个我认为应该很容易解决的问题。我通读一个数组并计算其中出现的值,然后将这些值写入一些变量,我想在一个条件数组中进行比较。我的条件应该跟踪哪个数字出现得更多

数组代码:

ActionScript代码:

private function runCount(scoreArray:Array, count1:Number, count2:Number, count3:Number):void {
    for (var i:int=0; i < scoreArray.length; i++) {
        if (scoreArray[i] == count1) {
        _1count++;// = _1count + 1;
        trace("1Count is:",_1count);
        }
    }

    for (var o:int=0; o < scoreArray.length; o++) {
        if (scoreArray[o] == count2) {
        _2count++;// = _2count + 1;
        trace("2Count is:",_2count);
        }
    }

    for (var p:int=0; p < scoreArray.length; p++) {
        if (scoreArray[p] == count3) {
        _3count++;// = _3count + 1;
        trace("3Count is:",_3count);
        }
    }
    runFinal();
}
public function runFinal():void {
    if (_1count > _2count || _3count) {
        trace("more one than anything else");
    } else if (_2count > _1count || _3count) {
        trace("more two than anything else");
    } else if (_3count > _1count || _2count) {
        trace("more three than anything else");
    }
}
现在,我没有得到任何错误,但我的条件变得非常混乱,并吐出随机结果。有什么想法吗

多谢各位

更新:举个例子,这就是它给我的

1Count is: 1
1Count is: 2
2Count is: 1
2Count is: 2
3Count is: 1
3Count is: 2
3Count is: 3
当你写下以下内容时,比任何其他内容都重要

public function runFinal():void {
    if (_1count > _2count || _3count) {
        trace("more one than anything else");
    } else if (_2count > _1count || _3count) {
        trace("more two than anything else");
    } else if (_3count > _1count || _2count) {
        trace("more three than anything else");
    }
}
你的条件句似乎被误导了。如前所述,如果条件语句的最后一项计算为true(非零等),那么条件语句将计算为true,我认为这不是您想要的

你是想说“如果计数大于计数或计数”?如果是这样的话,你可以这样写

if ( (_1count > _2count) || (_1count > _3count) ) 
在任何情况下,你都不清楚你想做什么。

当你写:

public function runFinal():void {
    if (_1count > _2count || _3count) {
        trace("more one than anything else");
    } else if (_2count > _1count || _3count) {
        trace("more two than anything else");
    } else if (_3count > _1count || _2count) {
        trace("more three than anything else");
    }
}
你的条件句似乎被误导了。如前所述,如果条件语句的最后一项计算为true(非零等),那么条件语句将计算为true,我认为这不是您想要的

你是想说“如果计数大于计数或计数”?如果是这样的话,你可以这样写

if ( (_1count > _2count) || (_1count > _3count) ) 

在任何情况下,都不清楚您要做什么。

Robusto是正确的,您的if语句中有一个错误。第一个if实际检查的是_1计数是否大于_2计数或_3计数是否大于0。所以,计数可以是10,计数可以是15,计数可以是5,这将评估为真

您可以使用对象数组并对它们进行排序以获得正确答案,如果您增加要计数的项目数,这将节省编写越来越多的条件。事情会是这样的:

var count0:Counter = new Counter('count0');
var count1:Counter = new Counter('count1');
var count2:Counter = new Counter('count2');
var counters:Vector.<Counter> = Vector.<Counter>([count0, count1, count2]);

counters[0].value = 101;
counters[1].value = 67;
counters[2].value = 172;

counters.sort(sortOnValue, Array.DESCENDING);

trace('The highest value was: ' + counters[0].name);  // The highest value was: count2

function sortOnValue(a:Object, b:Object):Number{
    if(a.value > b.value) {
        return 1;
    }else if(a.value < b.value) {
        return -1;
    }else{
        //a.value == b.value
        return 0;
    }
}

class Counter {
  public var name:String;
  public var value:int;

  public function Counter(name:String){
    this.name = name;
  }
}
有关执行相同操作的更多方法,请参阅阵列文档:

或者,两者的混合物:

var count0:Counter = new Counter('count0');
var count1:Counter = new Counter('count1');
var count2:Counter = new Counter('count2');
var counters:Array = [count0, count1, count2];

counters[0].value = 101;
counters[1].value = 670;
counters[2].value = 1720;

counters.sortOn('value', Array.DESCENDING | Array.NUMERIC);

trace('The highest value was: ' + counters[0].name);

class Counter {
  public var name:String;
  public var value:int;

  public function Counter(name:String){
    this.name = name;
  }
}

Robusto是正确的,您的if语句中有一个错误。第一个if实际检查的是_1计数是否大于_2计数或_3计数是否大于0。所以,计数可以是10,计数可以是15,计数可以是5,这将评估为真

您可以使用对象数组并对它们进行排序以获得正确答案,如果您增加要计数的项目数,这将节省编写越来越多的条件。事情会是这样的:

var count0:Counter = new Counter('count0');
var count1:Counter = new Counter('count1');
var count2:Counter = new Counter('count2');
var counters:Vector.<Counter> = Vector.<Counter>([count0, count1, count2]);

counters[0].value = 101;
counters[1].value = 67;
counters[2].value = 172;

counters.sort(sortOnValue, Array.DESCENDING);

trace('The highest value was: ' + counters[0].name);  // The highest value was: count2

function sortOnValue(a:Object, b:Object):Number{
    if(a.value > b.value) {
        return 1;
    }else if(a.value < b.value) {
        return -1;
    }else{
        //a.value == b.value
        return 0;
    }
}

class Counter {
  public var name:String;
  public var value:int;

  public function Counter(name:String){
    this.name = name;
  }
}
有关执行相同操作的更多方法,请参阅阵列文档:

或者,两者的混合物:

var count0:Counter = new Counter('count0');
var count1:Counter = new Counter('count1');
var count2:Counter = new Counter('count2');
var counters:Array = [count0, count1, count2];

counters[0].value = 101;
counters[1].value = 670;
counters[2].value = 1720;

counters.sortOn('value', Array.DESCENDING | Array.NUMERIC);

trace('The highest value was: ' + counters[0].name);

class Counter {
  public var name:String;
  public var value:int;

  public function Counter(name:String){
    this.name = name;
  }
}

您遗漏了数组代码。我们看不出这里的意图。通过对同一数组进行三次迭代,您到底想做什么?您遗漏了数组代码。我们看不出这里的意图。通过对同一数组进行三次迭代,您到底想做什么?您好。谢谢你。我所做的是点击一个按钮,我把一个数字放入一个数组中,(1,2,或3)。当您单击第四个按钮时,我遍历数组并检查这些数字的出现情况,将它们相加,然后将它们写入一组变量。然后我检查哪个数字最大,这样我就知道哪个按钮被按下的次数最多。现在我想我可以在每次点击按钮时让变量增加+1,但我正在学习不同的做事方法。:)如果有帮助,我可以发布整个代码?如果你想要有用的答案,发布所有相关代码总是有帮助的。你好。谢谢你。我所做的是点击一个按钮,我把一个数字放入一个数组中,(1,2,或3)。当您单击第四个按钮时,我遍历数组并检查这些数字的出现情况,将它们相加,然后将它们写入一组变量。然后我检查哪个数字最大,这样我就知道哪个按钮被按下的次数最多。现在我想我可以在每次点击按钮时让变量增加+1,但我正在学习不同的做事方法。:)如果有帮助,我可以发布整个代码?如果你想要有用的答案,发布所有相关代码总是有帮助的。+1。。。更好的方法是使用Vector而不是Array,因为它的内容都具有相同的对象数据类型。更好的方法是创建一个特定的对象(DTO),并将名称和值作为属性。这样一来,玩家就不必费心使用哈希表来跟踪动态对象的属性(=在更少的内存中更快)。+1。尽管如果只使用
sortOn
方法,您可以去掉compare函数。如下所示:
counters.sortOn(“value”,Array.DESCENDING | Array.NUMERIC)
True,但应该注意的是,你不能用向量代替数组,因为Vector没有sortOn方法。我真的不明白为什么AsSorton更适合Vector。+1。。。更好的方法是使用Vector而不是Array,因为它的内容都具有相同的对象数据类型。更好的方法是创建一个特定的对象(DTO),并将名称和值作为属性。这样一来,玩家就不必费心使用哈希表来跟踪动态对象的属性(=在更少的内存中更快)。+1。尽管如果只使用
sortOn
方法,您可以去掉compare函数。如下所示:
counters.sortOn(“value”,Array.DESCENDING | Array.NUMERIC)
True,但应该注意的是,不能用向量代替数组,因为Vector没有sortOn方法。我真的不明白为什么AsSorton更适合Vector。