用 prompt 输入字符串创建数组。用三种方法找出数组中最大值。问题阐述与解决。
实现目标:输入一组数,并找出这组数中最大的值。
采用的方法:
- 双 for循环,列出从小到大(从大到小)顺序。
- 单 for 循环,一遍循环找出最大值。
- 使用 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 了~~