【问题标题】:Can't figure out whats wrong with my program无法弄清楚我的程序有什么问题
【发布时间】:2015-02-22 04:49:41
【问题描述】:

嘿,伙计们,当我运行这个程序时,它不会添加我的数字,基本上我应该打印销量最高的推销员,以及最畅销的汽车。例如,当我在最后为每辆车输入 50 金额时,它会打印:050505050 而不是将其加起来为 200..

function salesPerson(name, id, amount) {
            this.name = name;
            this.id = id;
            this.amount = amount;
        };


    //Create car array for each brand
        var Car = new Array(4);

        //Create array of salePersons
        var Person = new Array(2);

        //Every element in the array is a object type salesPerson
        for (var i = 0; i < Person.length; i++) {
            Person[i] = new salesPerson("", 0, 0);
        }

        var temp = 0;

        var m = 0;
        var a = 0;
        var p = 0;
        var b = 0;



        for(var i = 0; i < Person.length; i++){
           Person[i].name = prompt("Enter salesman name: ");
           Person[i].id = prompt("Enter salesman id: ");

           temp = prompt("Enter Mercedes-Benz amount: ");
           Person[i].amount += temp;
           m += temp;

           temp = prompt("Enter Audi amount: ");
           Person[i].amount += temp;
           a += temp;

           temp = prompt("Enter Porsche amount: ");
           Person[i].amount += temp;
           p += temp;

           temp = prompt("Enter BMW amount: ");
           Person[i].amount += temp;
           b += temp;

        }

        var max = 0;
        var name = "";

        for (var i = 0; i < Person.length; i++) {
            if (Person[i].amount > max) {
                max = Person[i].amount;
                name = Person[i].name;
            }
        }

        alert("The best salesperson of the month is " + name + ", with the sales amount of $" + max);

【问题讨论】:

  • 在 javascript 中,0 + "50" = "050" 和 0 + parseInt("50") = 50
  • 我猜它是一个字符串。所以当你添加 '0' + '50' + '50' + '50' + '50' 你会得到 '050505050'

标签: javascript


【解决方案1】:

prompt 的结果是一个字符串,所以 + 是连接的。一个非常粗略的解决方法是执行以下操作:

temp = +prompt("Enter Mercedes-Benz amount: ");

+ 导致转换。请注意,这是非常粗略的 - 它不进行任何检查或错误处理。

【讨论】:

  • 为什么不在结果上parseInt?他将其存储为temp
  • parseInt 可以工作——只使用“+”是一个常见的快捷方式。 ParseInt 的优势在于检测无效字符
【解决方案2】:

您需要将temp 转换为number;为此,请使用一元运算符 +parseInt()

 for(var i = 0; i < Person.length; i++){
           Person[i].name = prompt("Enter salesman name: ");
           Person[i].id = prompt("Enter salesman id: ");

           temp = +prompt("Enter Mercedes-Benz amount: ");
           Person[i].amount += temp;
           m += temp;

           temp = +prompt("Enter Audi amount: ");
           Person[i].amount += temp;
           a += temp;

           temp = +prompt("Enter Porsche amount: ");
           Person[i].amount += temp;
           p += temp;

           temp = +prompt("Enter BMW amount: ");
           Person[i].amount += temp;
           b += temp;

        }

工作Fiddle

【讨论】:

    【解决方案3】:

    在将解析字符串添加为整数之前。

    function salesPerson(name, id, amount) {
                this.name = name;
                this.id = id;
                this.amount = amount;
            };
    
    
        //Create car array for each brand
            var Car = new Array(4);
    
            //Create array of salePersons
            var Person = new Array(2);
    
            //Every element in the array is a object type salesPerson
            for (var i = 0; i < Person.length; i++) {
                Person[i] = new salesPerson("", 0, 0);
            }
    
            var temp = 0;
    
            var m = 0;
            var a = 0;
            var p = 0;
            var b = 0;
    
    
    
            for(var i = 0; i < Person.length; i++){
               Person[i].name = prompt("Enter salesman name: ");
               Person[i].id = prompt("Enter salesman id: ");
    
               temp = parseInt(prompt("Enter Mercedes-Benz amount: "));
               Person[i].amount += temp;
               m += temp;
    
               temp = parseInt(prompt("Enter Audi amount: "));
               Person[i].amount += temp;
               a += temp;
    
               temp = parseInt(prompt("Enter Porsche amount: "));
               Person[i].amount += temp;
               p += temp;
    
               temp = parseInt(prompt("Enter BMW amount: "));
               Person[i].amount += temp;
               b += temp;
    
            }
    
            var max = 0;
            var name = "";
    
            for (var i = 0; i < Person.length; i++) {
                if (Person[i].amount > max) {
                    max = Person[i].amount;
                    name = Person[i].name;
                }
            }
    
            alert("The best salesperson of the month is " + name + ", with the sales amount of $" + max);

    【讨论】:

    • 我有一个函数叫做function -> isNegative(num) { if (num
    【解决方案4】:

    当您从用户那里获取输入时,它会作为字符串接收。您需要将此输入转换为 int。这可以通过使用parseInt(value, radix) 来完成。要了解有关parseInt 功能的更多信息,请参阅http://www.w3schools.com/jsref/jsref_parseInt.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 2012-03-15
      相关资源
      最近更新 更多