A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

需求:
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;
        }
}

1 个回复

倒序浏览
技术是要敲出来的,多敲多思考,加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马