题目:编写程序,生成5不重复的随机数。重复的话重新生成。
最终生成的5个随机数放到数组中,要求数组中的这5个随机数不重复。
方法一:使用while循环
package com.bjPowerNode.javese;
import java.util.Arrays;
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
//定义数组(使用int类型) 并给数组赋值
int[] array = new int[5];
//一维数组的初始化(默认值为零,随机分配的数字也可能为零,故需要初始化)
for(int i = 0; i < array.length; i++){
array[i] = -1;
}
//方法一:使用while循环
Random number = new Random();
int index = 0 ;
while(index < array.length){
//循环里创建五个对象
int a = number.nextInt(101);
System.out.println("生成的随机数" + a);
//java.lang.String.contains方法 在此处并无法使用 需要自己定义方法
//调用contains方法进行判断
if(!contains(array,a)){
array[index++] = a;
}
}
//将数组中的元素排序
Arrays.sort(array);
//逐个输出数组中存储的元素
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
}
public static boolean contains(int[] array, int key) {
/*
此处注释部分出现问题:
即运行时,每当存储一个数组元素后会进行排序,导致原来的元素会被覆盖 而第一个元素会显示赋予的初始值 -1
//对数组进行排序
Arrays.sort(array);
//二分法查找 如果找到了,则返回大于O的数 true 表示存在
return Arrays.binarySearch(array,key) >= 0;
*/
//正确运行的代码 使用循环判断元素是否重复
for(int i = 0; i < array.length; i++){
if(array[i] == key){
return true;
}
//此处是自己的错误 不需要此处已注释的代码。
//错误:当生成一个与数组相同的元素时,未进行赋值,直接将数组下标加一,导致最后数组中存在初始值 -1
//else
// return false;
}
//如果跳出循环(超出数组的长度范围),会返回false
return false;
}
}
方法二:使用for循环
package com.bjPowerNode.javese;
import java.util.Arrays;
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
//定义数组(使用int类型) 并给数组赋值
int[] array = new int[5];
//一维数组的初始化(默认值为零,随机分配的数字也可能为零,故需要初始化)
for(int i = 0; i < array.length; i++){
array[i] = -1;
}
//方法二:使用for循环
//循环产生五个随机数并按顺序依次赋值给数组
for(int index = 0; index < array.length; index++){
Random number = new Random();
//随机生成 0-100 之间的随机数 类型为int
int a = number.nextInt(101);
//调用contains方法进行判断 如果随机生成的元素与数组中的元素不重复,添加到数组中
if(!contains(array,a)){
array[index] = a;
}
//由于for循环中会在此次循环结束index增一,故在循环体中设置如果随机生成元素与数组中元素重复 则减一
else{
index--;
}
}
//将数组中的元素排序
Arrays.sort(array);
//逐个输出数组中存储的元素
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
}
public static boolean contains(int[] array, int key) {
//正确运行的代码 使用循环判断元素是否重复
for(int i = 0; i < array.length; i++){
if(array[i] == key){
return true;
}
}
//如果跳出循环(超出数组的长度范围),会返回false
return false;
}
}
注:
java.lang.String.contains()
boolean contains(CharSequence s)
Returns true if and only if this string contains the specified sequence of char values.
当且仅当此字符串包含指定的字符值序列时,才返回true。
编写程序,生成5个不重复的随机数[0-100]。重复的话重新生成。
最终生成的5个随机数放到数组中,要求数组中的这5个随机数不重复。