黑马程序员技术交流社区

标题: 问问各位大神 这道题怎么做 [打印本页]

作者: baoxinyu    时间: 2016-10-31 10:54
标题: 问问各位大神 这道题怎么做
生成50个1到500之间的不同的随机数  从中统计出能被3整除但不能被8整除的数字存到数组中   将数组按照升序输出到控制台

作者: weiwenhuaming    时间: 2016-10-31 11:01
用集合 就直接treeset就可以了,然后转数组。
只用数组,要设置个字符串或者Stringbuffer存储随机数,然后indexOf判断-1,在if被各种整除的情况,就ok了 ,出来再排个序

作者: baoxinyu    时间: 2016-10-31 11:10
weiwenhuaming 发表于 2016-10-31 11:01
用集合 就直接treeset就可以了,然后转数组。
只用数组,要设置个字符串或者Stringbuffer存储随机数,然后i ...

哥  能给写一下代码莫

作者: GXM    时间: 2016-10-31 12:53
。。。。。。。

作者: yuzt    时间: 2016-10-31 13:28
首先new一个数组 然后用random生成随机数 之后用if判断存进数组里就行了
作者: 稻香灬    时间: 2016-10-31 16:03
你好兄弟,我试试做了下,有两种方式,你看看行不行,仅供参考!!

//(1)用TreeSet集合做
                TreeSet<Integer> ts = new TreeSet<>(new Comparator<Integer>() {
                        public int compare(Integer o1, Integer o2) {
                                int  num = o1 - o2;
                                return num == 0 ? 0 : num;
                        }
                });
               
                Random r = new Random();
                while(ts.size()<50) {
                        int a = r.nextInt(500)+1;
                        if(a % 3 == 0 && a % 8 !=0) {
                                ts.add(a);
                        }
                }
               
                Object[] arr = ts.toArray();
                for (int i = 0; i < arr.length; i++) {
                        System.out.print(arr[i] + " ");
                }


//(2)list集合和数组组合使用
                Random r = new Random();
                ArrayList<Integer> list = new ArrayList<>();
                while(list.size() < 50) {
                        int a = r.nextInt(500)+1;
                        if(a % 3 == 0 && a % 8 != 0) {
                                if(!list.contains(a)) {
                                        list.add(a);
                                }
                        }
                }
                System.out.println(list);
               
                //把每一个元素添加到数组中
                int[] arr = new int[list.size()];
                for (int i = 0; i < list.size(); i++) {
                        arr[i] = list.get(i);
                }
               
                //选择排序数组
                for (int i = 0; i < arr.length-1; i++) {
                        for (int j = i+1; j < arr.length; j++) {
                                if(arr[i] > arr[j]) {
                                        int temp = arr[i];
                                        arr[i] = arr[j];
                                        arr[j] = temp;
                                }
                        }
                }
                //打印数组
                for (int i : arr) {
                        System.out.print(i+" ");
                }
作者: baoxinyu    时间: 2016-10-31 22:57
可以的  太感谢哥啦  一万个赞

作者: shyboy716    时间: 2016-10-31 23:22
[Java] 纯文本查看 复制代码
package test01;

import java.util.Arrays;

public class Test {
        public static void main(String[] args) {
                int[] arr = new int[50];//存放已经生成过的并且是不重复的随机数
                int[] arrFinal = new int[50];//存放能被3整除但是不能被8整除的数
                int count = 0;//记录符合能被3整除但是不能被8整除的数的个数
                int index = 0;//用于记录已经成功赋值到arr数组中的随机数的个数
                int num;
                boolean flag;
                //生成随机数,并将随机数与arr数组中已经存在的元素比较是否相等 如果不相等则赋值给arr下一个元素
                for(;index<50;){
                        flag = false;
                        num = (int)(Math.random()*500);
                        for(int j=0;j<index;j++){
                                if(num == arr[j]){
                                        flag = true;
                                        break;
                                }
                        }
                        if(!flag){
                                arr[index] = num;
                                if(num%3==0&&num%8!=0){//判断是否符合能被3整除但是不能被8整除的数
                                        arrFinal[count] = num;
                                        count++;
                                }
                                index++;
                        }
                }
                arrFinal = Arrays.copyOf(arrFinal, count);
                int tem;
                //冒泡排序
                for(int i=0;i<arrFinal.length-1;i++){
                        for(int j=0;j<arrFinal.length-1-i;j++){
                                if(arrFinal[j]>arrFinal[j+1]){
                                        tem = arrFinal[j];
                                        arrFinal[j] = arrFinal[j+1];
                                        arrFinal[j+1] = tem;
                                }
                        }
                }
                //循环输出
                for(int i=0;i<arrFinal.length;i++){
                        System.out.print(arrFinal+" ");
                }
        }
}


作者: Tyoo    时间: 2016-10-31 23:59
本帖最后由 Tyoo 于 2016-11-1 00:06 编辑

[Java] 纯文本查看 复制代码
public static void main(String[] args) {

                Random r = new Random();
               
                List<Integer> list = new ArrayList<Integer>();        //        由于长度不确定,放随机数的容器选择集合,要排序所以选List
               
                //        生成50个随机数
                for (int i = 0; i < 50; i++) {
                        int num = r.nextInt(501);
                       
                        //        判断是否符合取数要求
                        if (num % 3 == 0 && num % 8 != 0) {
                                list.add(num);
                        }
                }
               
                Object[] arr = list.toArray();                                        //        集合转换为数组
                Arrays.sort(arr);                                                                //        进行排序
                System.out.println(Arrays.asList(arr));                        //        打印输出
        }

作者: bbbbittersweet    时间: 2016-11-1 00:02
来自宇宙超级黑马专属安卓客户端
作者: 稻香灬    时间: 2016-11-1 07:27
baoxinyu 发表于 2016-10-31 22:57
可以的  太感谢哥啦  一万个赞

客气啦,加油!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2