java 数组练习
一、题目:
将9份水果随机分配给9位同学
{“苹果”,“香蕉”,“木瓜”,“南瓜”,“凤梨”,“菠萝”,“橘子”,“草莓”,“哈密瓜”}
二、思路:
- 首先,把数组分为两个半区,每次分别从两个半区里面随机抽取一个。
- 然后利用随机数来判断是否交换两个半区的数值,保证两个半区的数值有足够的随机数。
- 接下来将前半区的第一个值赋给之前抽取的值的位置
- 将后半区的最后一个值赋给之前抽取的值的位置
- 以此类推,最终只剩下最后的中间数,将其赋值给新数组最后一个位置
三、代码:
String[] names ={"苹果","香蕉","木瓜","南瓜","凤梨","菠萝","橘子","草莓","哈密瓜"};
Random random = new Random();
String nameNew[]= new String[9];
int i =5,k=0,j=0,numberFinal ,numberFirst;
System.out.println("随机前数组:"+Arrays.toString(names));
while(i>1) {
//定义前半区下标
numberFinal = random.nextInt(i)+4;
//定义后半区下标
numberFirst = random.nextInt(--i)+j;
//保证足够的随机性,如果为真交换前后两个半区的数值
if(random.nextBoolean()) {
//将随机数值赋给新数组
nameNew[k++]= names[numberFinal];
nameNew[k++]= names[numberFirst];
}else {
nameNew[k++]= names[numberFirst];
nameNew[k++]= names[numberFinal];
}
//将后半区的最后面一位替换掉随机数的位置
names[numberFinal]=names[i+4];
//将前半区的最前面一位替换掉随机数的位置
names[numberFirst]=names[j++];
}
nameNew[8]=names[4];//最中间数值->新的数组最后一位
System.out.println("随机后数组:"+Arrays.toString(nameNew));