黑马程序员技术交流社区

标题: 大家互相看看这个题,我有答案了 [打印本页]

作者: 精诚所至    时间: 2017-3-15 21:01
标题: 大家互相看看这个题,我有答案了
本帖最后由 精诚所至 于 2017-3-16 19:06 编辑

1.创建两个长度为10的数组,数组内的元素为随机生成的、不重复的1-100之间的整数
2.定义一个方法,传入两个数组,函数中将两个数组中不同的元素拼接成一个字符串,并且将该字符串以及字符串的长度输出到控制台上,如果没有则输出“对不起,两个数组的所有元素均相同”

附上这个题的答案,一个是老师给的,一个是我自己想的.
老师的
package cn.itcast.homework6;

import java.util.Random;

/*
        思路
                1.定义一个方法,用来为数组生成不重复的随机数赋值,方法参数是数组类型
                        循环生成随机数,每生成一个,就判断一下这个数组中是否包含这个数,如果不包含,就赋值,如果包含,就重新生成。
                        
        第二小问思路:
                        先遍历其中一个数组,拿其中的每一个元素去判断在另一个数组中是否存在,如果存在不拼接,如果不存在就拼接
                        再遍历另外一个数组,拿其中的每一个元素去判断在另一个数组中是否存在,如果存在不拼接,如果不存在就拼接
                        
*/
public class Test {
        public static void main(String[] args) {
                int[] arr1 = new int[10];
                int[] arr2 = new int[10];
                createRandomElment(arr1);
                createRandomElment(arr2);
                printArr(arr1);
                printArr(arr2);
                pinJie(arr1, arr2);
        }
        /*
         * 遍历数组
         */
        public static void printArr(int[] arr) {
                System.out.print("[");
                for(int i = 0; i < arr.length; i++) {
                        if(i == arr.length - 1) {
                                System.out.println(arr + "]");
                        } else {
                                System.out.print(arr+", ");
                        }
                }
        }
        /*
         * 为数组生成不重复的随机数
         */
        public static void createRandomElment(int[] arr) {
                Random r = new Random();
                //定义一个变量,用来当做已经赋值的索引
                int index = 0;
                //判断如果这个索引是 arr.length - 1。代表已经赋值满了,就结束循环
                while(index < arr.length) {//如果index < 数组的长度,代表赋值没有满
                        //生成随机数
                        int num = r.nextInt(100) + 1;
                        //判断一下这个数组中是否包含刚刚生成的随机数
                        boolean flag = exist(arr, num);
                        if(!flag) {//如果不存在
                                arr[index] = num;
                                index++;
                        }
                }
        }
        /*
         * 判断一下这个数组中是否包含这个数
         * 参数:数组,要判断的数
         * 遍历这个数组
         *         判断当前遍历到的数是否== 我们要判断的数,如果相等,直接返回 true
         *                            如果不等于,就一直继续遍历判断
         * 如果遍历完了都没有找到,返回false
         */
        public static boolean exist(int[] arr, int num) {
                for(int i = 0; i < arr.length; i++) {
                        if(arr == num) {
                                return true;
                        }
                }
                return false;
        }
        /*
         *
         * 定义一个方法,传入两个数组,方法中将两个数组不同的元素拼接成一个字符串,并且将该字符串以及字符串的长度输出到控制台上;
                如果没有则输出"对不起两个数组的所有元素均相同"
         * 第二小问思路:
                        先遍历其中一个数组,拿其中的每一个元素去判断在另一个数组中是否存在,如果存在不拼接,如果不存在就拼接
                        再遍历另外一个数组,拿其中的每一个元素去判断在另一个数组中是否存在,如果存在不拼接,如果不存在就拼接
         */
        /*
         * 方法两个参数 int[]  int[]
         */
        
        public static void pinJie(int[] arr1, int[] arr2) {
                //定义字符串类型变量,用来拼接
                String str = "";
//                先遍历其中一个数组,拿其中的每一个元素去判断在另一个数组中是否存在,如果存在不拼接,如果不存在就拼接
                for(int i = 0; i < arr1.length; i++) {
                        //判断当前遍历到的元素是否在另一数组中存在
                        boolean flag = exist(arr2,arr1);
                        if(!flag) {//如果不存在,就拼接
                                str = str + arr1 + " ";
                        }
                }
                //再遍历另外一个数组,拿其中的每一个元素去判断在另一个数组中是否存在,如果存在不拼接,如果不存在就拼接
                for(int i = 0; i < arr2.length; i++) {
                        //判断当前遍历到的元素是否在另一数组中存在
                        boolean flag = exist(arr1,arr2);
                        if(!flag) {//如果不存在,就拼接
                                str = str + arr2 + " ";
                        }
                }
                System.out.println(str);
                if(str.length() == 0) {
                        System.out.println("不存在");
                } else {
                        System.out.println("长度是" + str.length());
                }
        }
}        
        
我的
package homework;


import java.util.Random;

public class Test06 {
        public static void main(String[] args) {
                int[] arr1 = new int[10];
                int[] arr2 = new int[10];
                array(arr1);
                array(arr2);
                printArr(arr1);
                printArr(arr2);
               
                String str = "";
               
                str = pinJie(arr1, arr2, str);
               
                str = pinJie(arr2, arr1, str);
                print(str);
               
               
               
        }
        
        /*
         * 数组内元素为随机生成的、不重复的 1-100之间的整数
         * 返回值类型:void
         * 参数列表:int[] arr
         */
        public static void array(int[] arr) {
                Random r = new Random();
                for (int i = 0; i < arr.length; i++) {
                        //用while循环对arr赋值,如果出现重复的就重新赋值
                        while (true) {
                                int x = r.nextInt(100) + 1;
                                boolean equal = false;
                                for (int j = 0; j< i; j++) {
                                        if (x == arr[j]) {
                                                equal = true;
                                                break;
                                        }
                                }
                                if (!equal) {
                                        arr = x;
                                        break;
                                }                                       
                        }                        
                }
        }
        
        /*
         * 函数中将两个数组不同的元素拼接成一个字符串,并且将该字符串以及字符串的长度输出到控制台上;
         *     如果没有则输出"对不起两个数组的所有元素均相同"
         *返回值类型:void
         *参数列表:int[] arr1,int[] arr2
         *      
         */
        /*
         * 字符串拼接
         */
        public static String pinJie(int[] arr1, int[] arr2, String str) {
                for (int i = 0; i < arr1.length; i++) {
                        //arr1和arr2中的每个元素进行比较如果不同就赋值给字符串
                        boolean equal = false;
                        for (int j = 0; j < arr2.length; j++) {
                                if (arr1 == arr2[j]) {
                                        equal = true;
                                        break;
                                }                                
                        }
                        if (!equal) {
                                str = str + arr1 + " ";
                        }
                }
               
                return str;
        }
        
        /*
         * 将该字符串以及字符串的长度输出到控制台上;
        如果没有则输出"对不起两个数组的所有元素均相同"
         */
        public static void print(String str) {
                System.out.println(str);
                if(str.length() == 0) {
                        System.out.println("对不起两个数组的所有元素均相同");
                }else {
                        System.out.println("字符串的长度是" + str.length());
                }
        }
        /*
         * 遍历数组
         */
        public static void printArr(int[] arr) {
                System.out.print("[");
                for(int i = 0; i < arr.length; i++) {
                        if(i == arr.length - 1) {
                                System.out.println(arr + "]");
                        } else {
                                System.out.print(arr+", ");
                        }
                }
        }
        
}




        
        
        
        
        
        
        




作者: 天弈九幽    时间: 2017-3-15 23:11
排序后比较

作者: 亮仔开发    时间: 2017-3-16 00:31
不想说话,看代码吧
[Java] 纯文本查看 复制代码
import java.util.Random;
class Demo02{
        public static void main(String[] args){
                int[] arr1 = new int[10];
                int[] arr2 = new int[10];
                //创建Random对象
                Random r = new Random();
                for(int f = 0 ; f < arr1.length ; f ++){
                        arr1[f] = r.nextInt(100)+1 ;
                        if(f>1){
                                for( int i = 0 ; i< arr1.length-1 ; i++){
                                    for(int j = i+1 ; j < arr1.length ; j++){
                                      if(arr1 == arr1[j]){
                                          arr1 = r.nextInt(100)+1 ;
                                          break ;
                                       }                                   
                                   }
                       
                       }
                        }
                }
               
                       
                for( int i = 0 ; i< arr1.length ; i++){
                        System.out.print(arr1+",");
                }
            for(int f = 0 ; f < arr2.length ; f ++){
                        arr2[f] = r.nextInt(100)+1 ;
                        if(f>1){
                                for(int k = 0 ; k< arr2.length ; k++){
                                        for(int j = k+1 ; j < arr2.length ; j++){
                                          if(arr2[k] == arr2[j]){
                                        arr2[k] = r.nextInt(100)+1 ;
                                        break ;
                                       }
                                   }
                                }
                               
                          
                    }
                }
                System.out.println("换行");
                        for(int i = 0 ; i< arr2.length ; i++){
                        System.out.print(arr2+",");
                }
                method(arr1,arr2);
               
        }
public static void method(int[] arr1 , int[] arr2){
                        StringBuilder b = new StringBuilder();
                        for(int j = 0 ; j< arr2.length ; j ++){                                       
                        b.append(arr2[j]);
                        }
                        String str = b.toString();
                        for(int i = 0; i < arr1.length ; i ++){
                                String s = String.valueOf(arr1);
                                if(!(str.contains(s))){
                                        b.append(arr1);
                                }

                        }
                        String str2 = b.toString();
                        System.out.println("字符串长度为:"+str2.length());
                for(int i = 0 ; i<str2.length() ;i++){
                        System.out.print(str2.charAt(i));
                }
                }
        }

作者: 精诚所至    时间: 2017-3-16 07:01
亮仔开发 发表于 2017-3-16 00:31
不想说话,看代码吧
[mw_shl_code=java,true]import java.util.Random;
class Demo02{

写的很好,就是注释 太少看的相当懵

作者: 精诚所至    时间: 2017-3-16 08:15
亮仔开发 发表于 2017-3-16 00:31
不想说话,看代码吧
[mw_shl_code=java,true]import java.util.Random;
class Demo02{

那个为什么是f>1,f<=1是也能出现重复的元素

作者: 精诚所至    时间: 2017-3-16 08:20
亮仔开发 发表于 2017-3-16 00:31
不想说话,看代码吧
[mw_shl_code=java,true]import java.util.Random;
class Demo02{

不知道你有没有调试,感觉里面有好多错误

作者: 陈大仙…    时间: 2017-3-16 08:21
这题用集合做最简单,用数组的话就遍历吧
作者: 精诚所至    时间: 2017-3-16 08:22
陈大仙… 发表于 2017-3-16 08:21
这题用集合做最简单,用数组的话就遍历吧

集合还没有学呢

作者: mrwalker    时间: 2017-3-16 09:13
看没注释的代码真麻烦
作者: 精诚所至    时间: 2017-3-16 10:58
所以以后写程序的时候要规范写,要加上注释,方便以后调试查看

作者: zhao543    时间: 2017-3-16 18:02
我也想知道1111111111111111111111
作者: 精诚所至    时间: 2017-3-16 19:54
我把答案附上了,好的话记得赏些黑马币





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