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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

需求:1.返回一个存储10个4位数的随机整数 1000-9999的数组(注意思考怎么产生一个4位的随机整数)(不能重  复)
        2.在方法中遍历这个随机数数组       
老师源代码
(import java.util.Random;
public class Demo{
        public static void main(String[] args){
            int[] arr = method();
                for(int i = 0; i < arr.length; i++){
                        System.out.println(arr[i]);
                }
        }
        public static int[] method(){
                Random r = new Random();
                int[] arr = new int[10];
                int i = 0;
                while(i < 10){
                        int num = r.nextInt(9000)+1000;
                        for(int j = 0 ; j < arr.length; j++){
                                if(num == arr[i]){
                                        break;
                                }
                        }
                        arr[i]=num;
                        i++;
                }
                return arr;
        }
})
输出结果:3285 6013 7157 2983 5565 1587 3136 6060 3286 8456
我先不把随机数调这么大  只要限定0到9的随机数即可,原来基础上把数字调小
源码
(import java.util.Random;
public class Test_02 {

        public static void main(String[] args) {
               
                            int[] arr = method();
                                for(int i = 0; i < arr.length; i++){
                                        System.out.print(arr[i]+" ");
                                }
                        }
                        public static int[] method(){
                                Random r = new Random();
                                int[] arr = new int[10];
                                int i = 0;
                                while(i < 10){
                                        int num = r.nextInt(10);
                                        for(int j = 0 ; j < arr.length; j++){
                                                if(num == arr[i]){
                                                        break;
                                                }
                                        }
                                        arr[i]=num;
                                        i++;
                                }
                                return arr;
                        }

})
输出结果:(0     7    6     3    1    0    3    7    1    1 )

然后自己想了很久  只能用笨方法来做  还望大神有更好的方法
源码如下:
(public class Test_01 {
        public static void main(String[] args) {
                Random r = new Random();
                int[] arr = new int[10];
                int temp = 0 ;
                int a = 0;
                for (int i = 0; i < 50; i++) {
                         temp = r.nextInt(10) ;
                         if(arr[0] != temp&&arr[0+1]!=temp && arr[0+2]!=temp&&arr[0+3]!=temp&&arr[0+4]!=temp&&arr[0+5]!=temp&&arr[0+6]!=temp&&arr[0+7]!=temp&&arr[0+8]!=temp&&arr[0+9]!=temp){
                                 arr[a]= temp;
                                 a++;
                                 if(a==9){
                                         break;
                                 }
                         }
                }
                bianli(arr);
               
        }
        public static void bianli(int[] arr){
                System.out.print("数组是:");
                for (int i = 0; i < arr.length; i++) {
                        System.out.print(arr[i]+" ");
                }
                System.out.println();
        }

}

输出结果:2      6      3       8       9         1       7        5         4       0

31 个回复

倒序浏览
挺不错的!一道题可以有很多种做法!
回复 使用道具 举报
如果是错误的算法有成千上万种,但是输出正确的我所学的知识就只有这种了,想了老久了所以就想发帖问一下  有什么方法能不用这么笨的
回复 使用道具 举报
回复 使用道具 举报
你和你老师写的代码都错了吧,这个应该是if(num==arr[j])吧

来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
代码写对了么?num应该于arr【j】做判断吧,而且后面代码应该放到循环里面
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
D:\1.png
回复 使用道具 举报
javaeeheima 发表于 2017-3-26 23:10
你和你老师写的代码都错了吧,这个应该是if(num==arr[j])吧

不对 输出结果还是有重复的
回复 使用道具 举报
javaeeheima 发表于 2017-3-26 23:10
你和你老师写的代码都错了吧,这个应该是if(num==arr[j])吧

不对!输出结果还是有重复的
回复 使用道具 举报
yuanpeng 发表于 2017-3-26 23:15
代码写对了么?num应该于arr【j】做判断吧,而且后面代码应该放到循环里面
...

你说的是for循环吗?我放了  还是一样  输出的结果还是会有一样的  
回复 使用道具 举报
javaeeheima 发表于 2017-3-26 23:07
这个你想问什么??

想问  除了笨方法  还有什么其他的方法能做吗?  老师代码肯定是错了  输出结果肯定是会有一样的  
回复 使用道具 举报
leijia 发表于 2017-3-26 22:51
挺不错的!一道题可以有很多种做法!


如果是错误的算法有成千上万种,但是输出正确的我所学的知识就只有这种了,想了老久了所以就想发帖问一下  有什么方法能不用这么笨的
回复 使用道具 举报
有,就是在用循环的时候加上标号,执行break的时候加上标号,直接跳出外循环
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
想到了   是集合  
回复 使用道具 举报
(import java.util.Random;
public class Test_02 {

        public static void main(String[] args) {
               
                            int[] arr = method();
                                for(int i = 0; i < arr.length; i++){
                                        System.out.print(arr[i]+" ");
                                }
                        }
                        public static int[] method(){
                                Random r = new Random();
                                int[] arr = new int[10];
                                int i = 0;
                                while(i < 10){
                                        int num = r.nextInt(10);
boolean pd=true;
                                        for(int j = 0 ; j < arr.length; j++){
                                                if(num == arr[j]){
               pd=false;                                       
break;
                                                }
                                        }
if(pd=false){
break;}
else{
                                        arr[i]=num;
                                        i++;
}
                                }
                                return arr;
                        }

})

来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
(import java.util.Random;
public class Test_02 {

        public static void main(String[] args) {
               
                            int[] arr = method();
                                for(int i = 0; i < arr.length; i++){
                                        System.out.print(arr[i]+" ");
                                }
                        }
                        public static int[] method(){
                                Random r = new Random();
                                int[] arr = new int[10];
                                int i = 0;
                                while(i < 10){
                                        int num = r.nextInt(10);
boolean pd=true;
                                        for(int j = 0 ; j < arr.length; j++){
                                                if(num == arr[j]){
               pd=false;                                       
break;
                                                }
                                        }
if(pd=false){
continue;}
else{
                                        arr[i]=num;
                                        i++;
}
                                }
                                return arr;
                        }

})
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
赞一个!
回复 使用道具 举报
javaeeheima 发表于 2017-3-27 00:09
(import java.util.Random;
public class Test_02 {

我也刚想到了  还可以用集合  和双重for循环和  一个while循环和for循环
回复 使用道具 举报
回复 使用道具 举报
newu 黑马帝 2017-3-27 07:31:20
20#
好帖,赞一个,顶楼主
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马