获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行

编写程序,获取连续生成的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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值