【达内课程】JAVA中数组的使用

创建数组

第一种创建方式

int[] a = new int[5];

几点说明:
1、新建长度是5的数组
2、每个地址都存放默认值0
3、把一个数组赋值给变量 a,是把这个数组的内存地址赋值给了变量 a,将来就可以通过数组的存储空间来访问数组了

第二种创建方式

int[] a = {1,2,3,4,5};

第三种创建方式

给数组变量a重新赋一个新的数组

a = new int[]{6,7,8};

访问数组

获取下标为0的值

a[0]

数组长度

a.length

几点说明:
1、数组一旦创建,长度不可变
2、最大下标值是a.length-1
3、数组长度可以是0

数组遍历

for (int i = 0; i < a.length; i++) {
	a[i];
}

练习:随机产生双色球

双色球游戏规则
红球一共6组,每组从1-33中抽取一个,六个互相不重复。然后蓝球是从1-16中抽取一个数字,这整个组成双色球

xml

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="随机产生双色球" />

    <TextView
        android:id="@+id/red"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#FF0000"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/blue"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#0000FF"
        android:textSize="18sp" />
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button button;
    TextView redText;
    TextView blueText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int[] r = new int[33];
        int[] b = new int[16];
        for (int i = 0; i < 33; i++) {
            r[i] = i + 1;
        }
        for (int i = 0; i < 16; i++) {
            b[i] = i + 1;
        }
        //将数组转换成String类型输出的
        Log.d("双色球", "红色:" + Arrays.toString(r));
        Log.d("双色球", "蓝色" + Arrays.toString(b));

        //红球结果数组和标记数组
        int[] red = new int[6];
        boolean[] flag = new boolean[33];

        for (int i = 0; i < 6; i++) {
            int j;
            do {
                //r数组中随机挑选下标赋值给
                j = new Random().nextInt(33);
            } while (flag[j]);//如果选过重新选择
            red[i] = r[j];
            flag[j] = true;
        }

        //蓝球结果数组
        int blue = b[new Random().nextInt(16)];
        //用两个textview显示结果
        redText = findViewById(R.id.red);
        blueText = findViewById(R.id.blue);

        redText.setText("红球:" + Arrays.toString(red));
        blueText.setText("蓝球:" + blue);
    }
}

运行程序,结果如下;
在这里插入图片描述

练习:猜字母

public class Main {
    public static void main(String[] args) {
        //随机产生5个不重复的大写字母
        char[] s = random();

        System.out.println("已产生5个不重复大写字母");

        while (true) {
            System.out.println("猜");
            //获得用户输入的字符串
            String input = new Scanner(System.in).nextLine();
            //为和上面数组比较,将字符串转换为字符数组
            char[] inputResult = input.toCharArray();

            String result = compare(inputResult, s);
            System.out.println(result);
            //如果结果是“5A0B”表示猜对,结束
            if (result.equals("5A0B")) {
                break;
            }
        }
    }

    static char[] random() {
        //创建长度26的char数组
        char[] c = new char[26];
        //顺序放入A-Z
        for (int i = 0; i < c.length; i++) {
            c[i] = (char) ('A' + i);
        }
        //访问前5个位置。这一步的目的是把前5个字母和后边调换,来产生不重复的字母
        for (int i = 0; i < 5; i++) {
            int j = i + new Random().nextInt(26 - i);
            char temp = c[i];
            c[i] = c[j];
            c[j] = temp;
        }
        System.out.println(Arrays.toString(c));
        //截取前5个字母,组成新的数组
        char[] result = Arrays.copyOf(c, 5);
        System.out.println("截取后的前五个字母:" + Arrays.toString(result));
        return result;
    }


    static String compare(char[] input, char[] result) {
        int a = 0;
        int b = 0;
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (input[i] == result[j]) {
                    if (i == j) {
                        //字母相等,位置相等
                        a++;
                    } else {
                        //字母相等,位置不等
                        b++;
                    }
                    //因为是5个不同字母,所以找到相同的就break
                    break;
                }
            }
        }
        return a + "A" + b + "B";
    }
}

运行结果:
在这里插入图片描述

数组工具类java.util.Arrays

Arrays.toString(数组)
数组中的值连接成字符串[值1,值2]

Arrays.copyOf(数组, 长度)
将数组复制成指定长度的新数组,会创建一个新数组

System.arraycopy(原数组, 原数组起始位置, 目标数组, 目标数组起始位置, 复制数据数量);
复制数组

Arrays.sort(数组);
数组排序
优化的快速排序算法

Arrays.binarySearch(Object[], Object key);
二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的
作用是通过二分法在已经排好序的数组中查找指定的元素,并返回该元素的下标

1、如果数组中存在该元素,则会返回该元素在数组中的下标
2、如果数组中不存在该元素,则会返回 -(插入点 + 1) 。这里的插入点具体指的是:如果该数组中存在该元素,那个元素在该数组中的下标

Arrays.fill(数组, 1);
在数组中填满指定值

这些方法都很实用,大家可以自己测试下

二维数组介绍

二维数组就是存储一维数组(内存地址/引用)的数组

创建数组

int[][] a = new int[3][2];

几点说明:
1、 共创建了4个数组,一个外围数组和3个内部数组
2.、外围数组长度是3,内部每个数组长度是2
3、 外围数组中保存的是一个数组的内存地址

int[][] a = new int[3][];

1、只创建一个外围数组
2、3个位置都是null
3、可以之后再创建数组放入
a[0] = new int[5];
a[1] = new int[]{7,4}
a[2] = new int[]{5,3,7,4}

当然也可以直接赋值

int[][] a = {
	{2,1,5,6},
	{4,5},
	{2,4}
};

访问

a[0][1]
a[2][0]

遍历

for (int i = 0; i < a.length; i++) {
	for (int j = 0; j < a[i].length; j++) {
		System.out.println(a[i][j]);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值