需求:
1.定义main方法,方法内完成:
(1)定义长度为26,元素值为26个大写英文字母的数组chs
(2)创建方法getStr(),并传递数组(getStr(char[] chs)),获取返回值并打印。
返回值内容:在方法getStr(char[] chs)中,随机从chs中获取4个大写字母,然后和一个0到9之间的整数组成一个长度为5的字符串。类似于:QWRE9 EXDL8等数字----字母和数字都是随机的。
正常来说只需要在循环中获取随机数就行了,但是强迫症表示从数组中随机获取4个大写字母不应该出现重复的结果,问题在于随机数是可能出现重复的,于是需要多写一个方法来判断是否有重复的随机数。
public static boolean panDuan(int[] arr,int a){//判断是否重复
for(int i=0;i<arr.length;i++){
if(arr[i]==a){
return false;
}
}
return true;
}
完成这个方法后又出现新的问题,那就是这个方法是用在循环中,当真的出现重复的随机数时,虽然避免了获取重复的大写字母,但循环次数却减少了一次导致循环次数不够,这时候需要在循环嵌套的判断语句中加入--来回复循环次数。最终结果为:
public class myTest {
public static void main(String[] args) {
char[] chs = new char[26];
int count = 65;
for(int x=0;x<chs.length;x++){
chs[x] = (char)count;
count++;
}
print(chs);
String str = getStr(chs);
System.out.println(str);
}
public static void print(char[] arr){
System.out.print("[");
for(int x=0;x<arr.length;x++){
if(x==arr.length-1){
System.out.println(arr[x]+"]");
}else{
System.out.print(arr[x]+",");
}
}
}
public static String getStr(char[] arr){
Random r = new Random();
char[] chs = new char[4];
int[] chong ={26,26,26,26};
for(int x=0;x<chs.length;x++){
int a = r.nextInt(26);
if(panDuan(chong, a)){
chong[x] = a;
chs[x] = arr[a];
}else {
x--;
}
}
StringBuilder sb = new StringBuilder();
int b = r.nextInt(10);
sb.append(chs).append(b);
String str = sb.toString();
return str;
}
public static boolean panDuan(int[] arr,int a){//判断是否重复
for(int i=0;i<arr.length;i++){
if(arr[i]==a){
return false;
}
}
return true;
}
} |
|