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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Java语言中随机生成元素互不相同的数组并排序的方法
当我们做一道题目的时候,首先要分析题干,理解题意。只有把题目读懂才能做出准确的答案。显而易见,随机生成元素互不相同的数组并排序是两个问题。第一个问题,随机生成元素互不相同的数组。第二个问题,数组排序。在本篇文章中,我会介绍一个随机生成不同元素数组的方法。数组排序问题我会介绍两种常见的方法,分别是选择排序和冒泡排序。

一.随机生成不同元素的数组。
首先,分析题目,提取关键词。关键词:随机,不同元素,数组。然后,寻找方法来解决问题。
第一步,定义数组。
第二步,用Random产生随机数。
第三步,判断新生成的元素与数组中已有元素是否相同。
这里是这个问题的难点。因为元素是随机生成的,我们无法知道是否重复,所以我们不能直接将生成的随机数存入数组,需要先判断新生成的随机数在数组中是否存在,不存在才能存入数组。我们将生成的随机数做一个标记flag=true,如果生成的随机数在数组中标记改为false,重新生成。生成随机数是循环操作,判断是否相同又是循环操作,这里就需要用到循环嵌套。
大体思路清楚之后我们在代码中具体分析。
//Random导包
import java.util.Random;

public class Exc {
    public static void main(String[] args) {
//使用动态初始化定义数组
        int[] arr = new int[10];
//Random创建对象
Random r = new Random();
//用for循环来生成随机数并存入数组
        for (int i = 0; i < arr.length; i++) {
//产生随机数
            int a = r.nextInt(10);//因为数组长度为10,给定生成随机数范围0-9来验证。
            //给生成的随机数做标记
boolean flag = true;
//循环嵌套,用for循环来判断元素是否相同并存入数组
            for (int j = 0; j < i; j++) {
//if判断,如果随机数与数组中元素相同
                if (a == arr[j]) {
//更改标记true为false
                    flag = false;
                }
            }
//判断表示是否为true
            if(flag == true){
//标记为true存入数组
                arr[i] = a;
            }else{
//标记为false本次循环失效
                i--;
            }
        }
//遍历数组并打印
        for (int i = 0; i <arr.length ; i++) {
            System.out.print(arr[i]+"  ");
        }
    }
}
//输出结果
8  2  3  7  0  9  6  1  5  4

二、数组排序
1.选择排序
选择排序,顾名思义,选择一个数字去和其他数字比较大小,然后排序。这里我们以从小到大排序为例子。我们拿数组中索引为0的数去和后面的数一一比较,如果索引为0的数大于后面的某个数,它们两个之间调换位置。再拿第二个数去和他比较后面的数字一一比较,重复以操作,直到倒数第二个数和最后一个数比完,这样数组排序就完成了。我们在代码中看。
public class Exc {
    public static void main(String[] args) {
//上一步生成的数组
        int[] arr = {8, 2, 3, 7, 0, 9, 6, 1, 5, 4};
//for循环,数组中当前元素的索引,让每个元素都有比较
        for (int i = 0; i < arr.length - 1; i++) {
//循环嵌套,和索引为i后面所有的元素比较大小。
            for (int j = i + 1; j < arr.length; j++) {
//if判断,如果当前元素大
                if (arr[i] > arr[j]) {
//定义中间值来把当前元素和比较元素调换位置
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
        }
        //遍历数组并打印
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "  ");
        }
    }
}
//输出结果
0  1  2  3  4  5  6  7  8  9
2.冒泡排序
冒泡排序是当前元素只与他后面相邻的元素作比较。我们在代码中分析
public static void main(String[] args) {
//定义数组
    int[] arr = {8, 2, 3, 7, 0, 9, 6, 1, 5, 4};
//for循环,控制冒泡的次数
    for (int i = 0; i < arr.length - 1; i++) {
//循环嵌套,控制索引为i的元素需要比较的次数。
        for (int j = 0; j < arr.length - 1 - i; j++) {
//if判断,当前元素是否比他后面相邻的元素大
            if (arr[j] > arr[j + 1]) {
//定义中间值,调换两个元素之间的位置
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
   //遍历数组并打印
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }
}
//输出结果
0  1  2  3  4  5  6  7  8  9

以上就是本人对这个问题的理解以及解题方法,欢迎大神指教。


---来自一位刚学Java一周的小白

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马