java 随机正整数 排序 Java产生随机数并排序

2023-06-14

第1部分:随机数


1.1Math.random()函数

Math.random随机生成0~1个房间的随机点数,前面包含(0.00)后不包含(1)


通常没有什么实际意义,需要转换成整数。


例程:生成30-50的随机数量


int t = Math.random*20 30;


1.2 Random类:

语法:Random r = new Random();


常用的方法:


nextInt();//在int类型取值范围内随机生成整数,对我们来说意义不大。


nextInt(参数);在指定范围内随机生成整数(常见)


例: nextInt(100);在0~100之间随机生成整数。


训练:


双色球生成结合数组和随机数量完成。


需求: 红球 1~33(包含) 在号码中随机生成6个不重复的号码添加到球的数组中去蓝球。 在1~16(包括)号码中随机生成一个号码,扩展到红球数组。


分析: 球的数组 int[] bool=new int[6]


第一个球: 随机生成一个数字,添加到数组中,后面生成的每个球都需要与前面的每个球进行比较。只有在不重复的情况下才能添加到数组中。如果重复,放弃,重新生成比较,红球功能会在6个球全部添加到数组中时完成。蓝球可以通过扩展添加到bool数组中;


例程:DoubleColerBall.java


1 package random;
 2 
 3 import java.util.Arrays;
 4 import java.util.Random;
 5 
 6 public class DoubleColerball {
 7     
 8     public static void main(String[] args) {
 9         
10         Random r = new Random();
11         
12         int[] redBall =new int[6];
13         int index = 0;
14         
15         redBall[index  ] = r.nextInt(33) 1;            //生成第一个数字
16 
17         loop:        while(true) {
18             
19             int x = r.nextInt(33) 1;
20             
21             //判断x的生成,是否在数组中
22             for (int j=0;  j

View Code


第2节有几种排序算法


冒泡排序算法2.1


2.1.1原理实现

将数列从小到大排序(或从大到小),将每个位置数与下一个位置数进行比较。如果比后面的数字大,可以交换位置,一轮可以得到最大数字,第二轮可以得到第二大数字。...


2.1.2实例分析

例: [6,8,5,7,4]想要的最终结果是[4,5,6,7,8]


6 8 5 7 4


第一轮第一轮: 6 8 5 7 4


第一轮第二轮: 6 5 8 7 4


第三轮第一轮: 6 5 7 8 4


第四轮第一轮: 6 5 7 4 8


第二轮第一次: 5 6 7 4 8


第二轮第二轮: 5 6 7 4 8


第三轮第二轮: 5 6 4 7 8


第三轮第一轮: 5 6 4 7 8


第三轮第二轮: 5 4 6 7 8


第四轮第一次: 4 5 6 7 8


规则:轮数每增加一次,比较次数就会减少一次。


Demo2.java



View Code


2.2 选择排序方法:


2.2.1原理实现

选择排序方法:


第一趟,等待排序记录r[1]~r[n]选择最小的记录,与r[1]交换;


第二趟,等待排序记录r[2]~r[n]选择最小的记录,与r[2]交换;以此类推,第一趟在等待排序记录r[i]~r[n]选择最小的记录,把它和r[i]交换,使有序序列持续增长,直至所有排序完成。


例:


最初的序列:{49 27 65 97 76 12 38}


第1趟:12和49交换:12{27 65 97 76 49 38}


第2趟:27不动 :12 27{65 97 76 49 38}


第3趟:65和38交换:12 27 38{97 76 49 65}


第4趟:97和49交换:12 27 38 49{76 97 65}


第5趟:76和65交换:12 27 38 49 65{97 76}


第6趟:97和76交换:12 27 38 49 65 76 97 完成


分析:


在设定数组中,第一个数字是最小数字。


将其与数组后面的每个数字进行比较,如果有较小的交换两个位置,


Demo2.java


1 package random;
 2 
 3 import java.util.Arrays;
 4 /**
 5  * 
 6  * @项目名称:JavaSEDay07m
 7  * @模块化功能:实现排序选择
 8  * @模块版本:
 9  * @JDKVersions:JDK 8.0
10  * @author:  Kanekiyi
11  */
12 public class Demo3 {
13     
14     public static void main(String [] args) {
15         int[] arr={5,9,2,807,89,88};
16         int temp=0;
17         
18         //表面循环依次假设数组中的每个数是最小值。
19         for(int i=0; iarr[j]) {
25                      min = arr[j];
26                      minIndex = j;
27                 }
28                 
29             }
30             //交换最小值
31             temp = arr[i];
32             arr[i]  = arr[minIndex];
33             arr[minIndex] = temp;
34             
35         }
36         System.out.println(Arrays.toString(arr));
37 
38     }
39 }

View Code


2.3 插入排序法:


2.3.1原理实现

插入排序类似于整理扑克牌,将每张牌插入其它有序的牌中。


插入式排序由N-1趟排序组成,对于P=1至N-1趟,插入式排序确保从位置0到位置P上的元素已经排序。


简单来说,插入排序总共需要排序N-1次。从index为1开始,我们将该位置的元素与之前的元素进行比较,并将其放置在合适的位置。这样循环下来之后,就是有序数组了。


2.3.2实例分析

Demo2.java


1     //插入排序算法
 2     public static void insertSort() {
 3         int[] arr = {3,6,8,4,2,2,9};
 4         int[] arr2 = new int[arr.length];
 5         arr2[0] = arr[0];
 6         int temp=0;
 7 
 8         for(int i=1; iarr2[k]) {            //比较插入数和原数组中的数并交换位置。
14                         temp = arr2[k];
15                         arr2[k] = arr[i];
16                         arr[i] = temp;
17                     }        
18                 }        
19             }        
20             //arr2[i] = temp;
21         }
22         System.out.println(Arrays.toString(arr2));
23     }

View Code


方法更加简单。


参照:


综合实践:利用数组和数据结构完成学生管理系统(SMS1).0)的研发:


要求:1、为了保存数据,建立学生数组


2、数字选择功能通过键盘输入,不同的数字完成不同的功能,需要对学生数字完成增删功能;


代码:SMS.java


1 package random;
  2 
  3 import java.util.Arrays;
  4 import java.util.Scanner;
  5 
  6 /**
  7  * 学生管理系统1.0版本
  8  * @author  Kanekiyi
  9  * 分析:1、while 循环
 10  *            2、Scannre
 11  *               3、if 支系
 12  *               4、数组 扩容 缩容 遍历
 13  *      String
 14  * */
 15 
 16 public class SMS {
 17     
 18     public static void main(String[] args) {
 19         System.out.println(“欢迎使用学生管理系统1.0版本”);
 20         
 21         String[] students = {“刘一”,"孙二","张三","李四"};
 22         
 23         Scanner sc = new Scanner(System.in);
 24         
 25         while(true) {
 26             System.out.println("1.加入学生 2.删掉学生 3.修改学生 4.学生目录 5.查询学生 6.撤出");
 27             System.out.println(“请输入数字选择功能”);
 28 
 29             int type = sc.nextInt();
 30             
 31             增加学生//1
 32             if (type ==1) {
 33                 System.out.println(“请输入添加学生姓名”);
 34                 String name = sc.next();
 35                 students = Arrays.copyOf(students,students.length 1);
 36                 students[students.length-1] = name;
 37                 System.out.println(“添加成功”);
 38             }
 39         
 40             //2、删掉学生
 41             if (type ==2) {
 42                 boolean flag = false;
 43                 System.out.println(“请输入需要删除的学生名称”);
 44                 String name = sc.next();
 45 
 46                 for(int i=0; i






本文为转载内容,我们尊重原作者对本文的作权。如有内容错误或侵权问题,欢迎原作者联系我们更正或删除内容。

本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。

免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com