发表于: 2017-07-10 21:10:20
1 944
今天完成的事情:
1、学习了乱序的概念及如何乱序数组。
2、加深了对JS的理解。
明天计划的事情:
1、完成任务二杀手、平民页面的编写。
遇到的问题:
1、如何获得一个随机数组?准备分别获得杀手、平名的数组,然后将其随机乱序,从而获得。
2、对于下面乱序的前两种方法还不理解。
收获:
toLowerCase()将字符串所有大写字母编程小写。
toUpperCase()将所有字符串小写字母转换成大写的。
Var mystr=”hello, world”;
Var ab=mystr.toUpperCase();
parseInt() 函数可解析一个字符串,并返回一个整数。
为什么有的转10进制,有的转16进制?
在return '#'+Math.floor(Math.random()*256).toString(10);中,为什么只乘以一个256?
方法一
先随机出已知数组的下标值,然后取出这个数放到另一个数组中,再从已知数组中删除这个数。这种方法的运算次数是根据数组长度而定的,缺点是 大部分运算都耗在删除的判断上,主要是因为 数组不像list那样,能删除一个指定位置的值。
1. //-----------------------------------------------
2. public int [] m2(int [] arr){
3. Random ran = new Random();
4. int [] newArr = new int[arr.length];
5. int k = 0;
6. while (arr.length>0) {
7. runCount++;
8. int index = ran.nextInt(arr.length);//随即数组下标
9. newArr[k++] = arr[index];
10. arr = removeElement(arr[index], arr);
11. }
12. System.out.println("m2运算次数 = "+runCount);
13. return newArr;
14. }
15.
16. public int [] removeElement(int ele,int [] arr){
17. int [] arr2 =new int[arr.length-1];
18. int k = 0;
19. for (int i = 0; i < arr.length; i++) {
20. runCount++;
21. if(arr[i]!=ele){
22. arr2[k++] = arr[i];
23. }
24. }
25. return arr2;
26. }
方法二
每次从已知数组随机一个数,然后将数组的最后一个值 赋值给前面随机到的数的位置上,然后将长度-1,再从原数组下标-1的数组中随机。
1. public int [] m3(int [] arr) {
2. int [] arr2 =new int[arr.length];
3. int count = arr.length;
4. int cbRandCount = 0;// 索引
5. int cbPosition = 0;// 位置
6. int k =0;
7. do {
8. runCount++;
9. Random rand = new Random();
10. int r = count - cbRandCount;
11. cbPosition = rand.nextInt(r);
12. arr2[k++] = arr[cbPosition];
13. cbRandCount++;
14. arr[cbPosition] = arr[r - 1];// 将最后一位数值赋值给已经被使用的cbPosition
15. } while (cbRandCount < count);
16. System.out.println("m3运算次数 = "+runCount);
17. return arr2;
18. }
方法三
定义一个变量为随机变量,其范围最大值为数组的长度,然后将其取为all[i];然后分别分别依次取出元素。
var rand=parseInt(Math.random()*len);
var temp=all[rand];
all[rand]=all[i];
all[i]=temp;
评论