编写程序,获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行
题目:编写程序,获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行
1.打印已经生成了多少个随机数
2.这其中有多少个不重复的
package text1;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/*
* 2021.7.23
*/
/*编写程序,获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行
1.打印已经生成了多少个随机数
2.这其中有多少个不重复的*/
public class homework1 {
//主函数
public static void main(String[] args) {
MyLoop();
}
//定义函数实现
public static void MyLoop() {
//pre和cur表示前一个数和后一个数
int pre=-1;
int cur=0;
//用列表存贮arr
List<Integer> arr = new ArrayList<>();
//随机数生成
Random ra = new Random();
//使用循环,每次循环生成一个随机数,直到pre和cur相等
while(pre!=cur){
pre = cur;
//随机数范围100-200
cur = ra.nextInt(100)+100;
System.out.print(cur+" ");
//将cur存入arr中
arr.add(cur);
}
List<Integer> arr1 = new ArrayList<>();
//使用循环找出不重复的数
for (int item:arr){
int result = arr1.indexOf(item);
if(result<0){
arr1.add(item);
}
}
System.out.println("\n打印已经生成了"+arr.size()+"个随机数");
System.out.println("这其中有"+arr1.size()+"不重复的");
}
}
不同版本代码
package com.xja.homework;
import java.util.Arrays;
import java.util.Random;
/**
* 编写程序,获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行
1.打印已经生成了多少个随机数
2.这其中有多少个不重复的
*/
public class DemoTest {
/**
* 思路:存数据+取数据
* 1.Random(100) 代表的是[0,100)的随机数 100-200 Random ra = new Random(101)+100 [0,100]
* 2.存储当前的随机数和前一个数,为了比较
* 3.有多少个不重复的
* 把所有的数据存储起来,数组
* 不知道数组的长度有多长,可能会涉及到扩容
*
* 1 3 6 8 1 6 8 9 3 7 6 (11)
*
* 根据思路写代码
* 先对数组进行排序,重复的数字都在一起 1133。。。
* if(一个数==后面的数) 说明重复1次
* ok
*
* -->去重
* -->1 1 3 3 6 6 6 7 8 8 9 (11个)
* count--
*
* 1 3 6 8 9 7 (6个)
*/
public static void main(String[] args) {
//创建一个随机数对象 // 随机数 Math.randow PI
Random r = new Random();
//定义一个变量,用来存储前一个数
//先声明,再赋值
//a=0;//异常==》编译期异常,
//运行时异常
//int num = 1/0; //throw Exception
int a = 0; //4类8种数组类型 byte short int long float double char boolean
//String s = null;
//定义一个数组,用来存储所有的数字 ,如果装不下,扩容
int[] sa = new int[10];//数组
//int[] sa1 = {1,2,3};
//定义一个变量,用来计数,生成的随机数的个数
int i = 0;
//for
//while
//dowhile 至少执行一次循环体
while(true) {
//生成[100,200]随机数
int s = r.nextInt(101)+100;
//可能会扩容,如果数组满了(),扩容
//Arrays.sort(sa,new Comparator(){})//匿名内部类
//选择结构
//if() {}else(){}
//switch case break; case 穿透 default
//三元运算符 int a = 表达式?15:52 // 语句1和语句2类型1样
if(i==sa.length) {
//扩容 ,参数1(原始数组) 参数2(新数组的长度)
sa = Arrays.copyOf(sa, i*2);
}
//把随机数放到数组中
sa[i] = s;
//递增随机数
i++;
//出口
if(s==a) {
break;
}else {
a = s; //将当前随机数赋值给a,变为前一个数
}
}
//截取数组中i个数据
sa = Arrays.copyOf(sa, i);//截取前i个数据生成一个新的数组
//处理数据
//生成的随机数的数量
int count = i; //11
System.out.println("生成的随机数的总数量:"+count);
//对数组进行排序
Arrays.sort(sa);
//如果一个数与后面的数相等====》说明重复一次 count--
//遍历:
//普通for 循环
//增加for 循环
//迭代器
for(int j = 0; j<sa.length-1;j++) {
if(sa[j]==sa[j+1]) {
count--;//重复了一次,count-1
}
}
System.out.println("去重之后的个数:"+count);
}
}