用 prompt 输入字符串,创建数组,找出数组中最大值,问题阐述与解决。

用 prompt 输入字符串创建数组。用三种方法找出数组中最大值。问题阐述与解决。

实现目标:输入一组数,并找出这组数中最大的值。

采用的方法:

  1. 双 for循环,列出从小到大(从大到小)顺序。
  2. 单 for 循环,一遍循环找出最大值。
  3. 使用 Math.max。

来看看代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>排序</title>
</head>
<body>
<script>
    var str=prompt("判断一组数据的大小。<br>请输入一组数,用‘-’分隔",);
    var arr=str.split("-");
    document.write("输入的一组数为:"+arr);

    //方法一
    for (var i=0;i<arr.length;i++) {
        for (var j=0;j<arr.length;j++){
            if (arr[j]>arr[i]){
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    document.write("<br>从小到大排序:"+arr,"<br>方法一最大值为:"+arr[arr.length-1]);

    //方法二
    var temp1=arr[0];
    for (var i=0;i<arr.length;i++) {
        if (temp1 < arr[i]) {
            temp1=arr[i];
        }
        else {
        }
    }
    document.write("<br>方法二最大值为:"+temp1);
    //方法三

    var max_arr=Math.max.apply(null,arr);
    //Math.max(param1,param2) 因为参数不支持数组。
    //所以可以根据apply的特点来解决,
    //在调用apply的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,
    // 我们只需要用这个方法帮我们运算,得到返回的结果就行,所以就直接传递了一个null过去。
    document.write("<br>方法三最大值为:"+max_arr);

</script>
</body>
</html>

结果如下:
用 prompt 输入字符串,创建数组,找出数组中最大值,问题阐述与解决。

方法一、二的结果明显不对A !!!

分析:应该是数组中元素的类型还是String 型,接下来类型转换!将数组中所有元素转换为 Int 型试试。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>排序</title>
</head>
<body>
<script>
    var str=prompt("判断一组数据的大小。<br>请输入一组数,用‘-’分隔",);//输入
    var arr=str.split("-");//将输入的字符串分隔成数组,实际上每个数组单元仍是字符串类型
    document.write("输入的一组数为:"+arr);

    //将数组中所有元素转换为 Int 型
    var arr_int=new Array();
    for (var i = 0; i < arr.length; i++) {
        arr_int[i] =parseInt(arr[i]);
    }
    document.write("<br>输入的一组数转换为 Int 型为:"+arr_int);

    //方法一
    for (var i=0;i<arr_int.length;i++) {
        for (var j=0;j<arr_int.length;j++){
            if (arr_int[j]>arr_int[i]){
                var temp=arr_int[i];
                arr_int[i]=arr_int[j];
                arr_int[j]=temp;
            }
        }
    }
    document.write("<br>从小到大排序:"+arr_int,"<br>方法一最大值为:"+arr_int[arr_int.length-1]);

    //方法二
    var temp1=arr_int[0];
    for (var i=0;i<arr_int.length;i++) {
        if (temp1 < arr_int[i]) {
            temp1=arr_int[i];
        }
        else {
        }
    }
    document.write("<br>方法二最大值为:"+temp1);
    //方法三

    var max_arr=Math.max.apply(null,arr);
    //Math.max(param1,param2) 因为参数不支持数组。
    //所以可以根据apply的特点来解决,
    //在调用apply的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,
    // 我们只需要用这个方法帮我们运算,得到返回的结果就行,所以就直接传递了一个null过去。
    document.write("<br>方法三最大值为:"+max_arr);

</script>
</body>
</html>

转换类型之后,结果如下:
用 prompt 输入字符串,创建数组,找出数组中最大值,问题阐述与解决。

转换完之后结果正确。
转换为浮点型也是一样的,转换为浮点型更符合题意。只需将parseInt改为 parseFloat就 ok 了~~