你的位置:首页 > Java教程

[Java教程]程序的优化问题


有这样一个问题,有a,b,c,d四个字母,每当刷新页面时会以随机的顺序出现,比如a,d,b,c和b,d,c,a。

我当时的解决方案为:

 1 <script type="text/javascript"> 2   var str1; 3   var str=[]; 4   var flag1=true; 5   var flag2=true; 6   var flag3=true; 7   var flag4=true; 8   do{ 9     var num=parseInt(Math.round(Math.random()*(4-1))+1);10     if(num==1&&flag1){11       str[str.length]="a";12       flag1=false;13     }else if(num==2&&flag2){14       str[str.length]="b";15       flag2=false;16     }else if(num==3&&flag3){17       str[str.length]="c";18       flag3=false;19     }else if(num==4&&flag4){20       str[str.length]="d";21       flag4=false;22     }23   }while(flag1||flag2||flag3||flag4)24   str1=str[0]+str[1]+str[2]+str[3];25   document.write(str1);26 </script>

不过这样写有着很明显的弊端,那就是下次如果想换一些字母进行输出时,必须将程序进行一次大的更改才能继续进行应用,这样做不利于重复使用

下面这种方法就很好的解决了这个问题,当想再次调用时,只需将数组arr中的值进行更改就可以了

 1 <script type="text/javascript"> 2   var arr=["a","b","c","d"]; 3   function changestr(){ 4     var newArry=[]; 5     var temp=[];//新创建的两个数组 6     for(var p in arr){ 7       temp[p]=arr[p];//将原本数组中的值复制给重新定义的数组 8     } 9     for(var i=0;i<arr.length;i++){10       var random=Math.round(Math.random()*(temp.length-1));//产生0~temp数组长度-1的值11       newArry[i]=temp[random];//将temp数组中随机出来的数组值赋给新数组12       temp.splice(random,1);//删除赋给新数组的值,temp数组的长度减一,直到temp中没有值为止13     }14     return newArry15   }16   document.write(Arry=changestr());17 </script>

在我看来,真正好的函数必须做到可重复使用,模块化,和具有良好的封装性。