简陋自写intList--双色球实例

来源:互联网 发布:广西驰程网络办公系统 编辑:程序博客网 时间:2024/06/07 15:27

数组在存储数据时,不得不说是很舒服的,无论是查找,还是排序,因为下标 的问题,可以迅速的定位到相关的数据。
但是,非常不满意的是,数组的长度在我们开辟之后,就不能更改,也就是说,我们如果往一个数组中扔数据,会发生覆盖现象。同理,如果删去数组中的元素,数组中会出现0,而不是我们认为的会消失,然而,我们还没有学习集合,所以,在老师的带领下,我们就完成了一个简陋的集合。并且实现了双色球的选择。
第一,往数组中添加数据。因为知识实在受限,没办法的,所以,初始数组是有我们给限定的大小,然后写一个扩容,当我们添加的数据的位置等于数组大小时,就会运行扩容方法,然后接着进行数据的填写。
在扩容类中,主要是使用了API,arrays.copyOf();复制原数组到现有数组,只是在大小上进行增加。
当输入一个数时,因为我们的初始数组中的数据为空,我们实现的就是在数组的最后直接追加的数据;在这基础之上实现的是无论是什么位置,我们都能插入数据;
插入数据的时候,是从后往前添加,因为有一个新的数据添加进来,所以我们添加的数据就传到了相应的位置,而原来的数据都需要向后推一位,所以,原来下标为2的成了3,3成了4,当添加的位置等于数组的长度,就又该调用扩容方法:
代码如下:

    public int add(int value) {        return add(value, size);    }    // 向数组中指定位置添加元素    public int add(int value, int position) {        if (position > size)//size为我们初始化的数据长度            return -1;        if (size == arr.length) {//长度等于数组长度时,调用扩容函数            dilatation();        }        for (int i = size; i > position; i--) {//从后往前进行数据的后退            arr[i] = arr[i - 1];        }        arr[position] = value;        size++;        return value;    }

第二,我们要说的是,移除数组元素的方法,其实和增加差不多,但是,我们不会涉及到去减小数组的长度,只是移除了那个位置的元素,然后将后面的数据往前推,然后将size减小:

public int remove(int position) {        if (position > size)//返回-1;就是直接退出程序,因为位置大于size代表输入无效            return -1;        int removeValue = arr[position];//方便返回移除的值        size--;//每次移走一个数,都要将size减一,从而实现数组的长度的变化        for (int i = position; i < size; i++) {            arr[i] = arr[i + 1];        }        arr[size] = 0;//将最后一位置零        return removeValue;    }

然后就来说说双色球实例,蓝球不必多说,六选一,一个随机算法即可,主要说红球
1.运用我们自己动手封装的API,里面的add方法,通过for循环,为每一个数组元素赋值;
2.实现数组的动态变化:首先在1-33之间求出随机数,。然后运用remove方法, 移除该随机数位置上的数,利用remove动态更新数组的特性,保证不会出现相同的数据
然后在主函数中,利用for循环,循环6次,调用封装有remove的方法,输出每次移除的数,从而实现数据的随机

public class CoreJava03 {    public static void main(String[] args) {        IntList redintList=new IntList();        int []arr=new int[6];        while(true){            initRedBall(redintList);            for(int i=0;i<6;i++){                arr[i]=choiceRandomBall(redintList);            }            System.out.println(Arrays.toString(arr));            try{                Thread.sleep(2000);            }catch(InterruptedException ex){                ex.printStackTrace();            }        }    }    public static void initRedBall(IntList redintList){        for(int i=1;i<=33;i++){            redintList.add(i);        }    }    public static  int choiceRandomBall(IntList redintList ){        int temp=(int) (Math.random()*redintList.size());        return redintList.remove(temp);    }}

不得不说,没有集合写数组的动态变化在,真特么的累,为了理解这,也是够费心。
但是吧,有了这个自己动手封装的api之后再做这个随机,真的是轻松了不少。
这里写图片描述

0 0
原创粉丝点击