1. 程式人生 > >用 prompt 輸入字串,建立陣列,找出陣列中最大值,問題闡述與解決。

用 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>

結果如下:
在這裡插入圖片描述

方法一、二的結果明顯不對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>

轉換型別之後,結果如下:
轉換完之後結果正確

轉換完之後結果正確。
轉換為浮點型也是一樣的,轉換為浮點型更符合題意。只需將parseInt改為 parseFloat就 ok 了~~