【问题标题】:Error in ActionScript动作脚本中的错误
【发布时间】:2026-01-27 01:00:02
【问题描述】:

我正在使用 ActionScript 3 编写分数简化器,以下代码正在为我找到 gcd。但是,我收到一个错误,指出参数计数不匹配。 ArgumentError:错误 #1063:参数计数不匹配。预期 2,得到 1。请指教。谢谢!

 btnDetermine.addEventListener(MouseEvent.CLICK, gcd);

        var no1:Number;
        var no2:Number;

        no1 = Number(txtinno1.text);
        no2 = Number(txtinno2.text);

        function gcd(no1, no2){
            if (no1 == 0 || no2 == 0){
                return 0; 
            }

            if (no1 == no2){
                return no1;
            }



            if (no1 > no2){
                return gcd(no1 - no2, no2);
            }

            else {
                return gcd(no1, no2-no1);
        }
    }

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    您正在使用两个必需参数(no1no2)定义 gcd 方法:

    function gcd(no1, no2)
    

    但是,您也在这一行中将该方法用作鼠标单击处理程序:

     btnDetermine.addEventListener(MouseEvent.CLICK, gcd);
    

    因此,当单击事件触发时,它会调用 gcd 方法并将 MouseEvent 作为第一个参数传递(仅此而已)。由于函数/方法需要两个参数,因此您会收到错误消息。

    我猜你真正想做的是:

    //add the click listener to a new function
    btnDetermine.addEventListener(MouseEvent.CLICK, clickHandler);
    
    //have the click handler take a single MouseEvent as the only argument
    function clickHandler(e:MouseEvent):void {
        //inside this click method, get your numbers.
        var no1:Number = Number(txtinno1.text);
        var no2:Number = Number(txtinno2.text);
    
        //call the gcd function
        gcd(no1, no2);
    }
    
    function gcd(no1:Number, no2:Number):Number {
        if (no1 == 0 || no2 == 0){
            return 0; 
        }
    
        if (no1 == no2){
            return no1;
        }
    
        if (no1 > no2){
            return gcd(no1 - no2, no2);
        }
        else {
            return gcd(no1, no2-no1);
        }
    }
    

    【讨论】: