使用Java中的数组

本文主要是记录学习《Java 核心技术》一书中数组的一些知识点和实践过程。有数组的定义方式、初始化方式、命令行参数、常用的API等内容,以代码片段展示为主。

一、代码实践

public class ArrayTest {

    public static void main(String[] args) {
        // 定义数组
        int[] i = new int[6];
        boolean d[] = new boolean[10];
        char c[] = {'a','b','c','d'};

        // 打印
        String r1 = "数组i:[";
        for (int j = 0; j < Array.getLength(i); j++) {
            if (j > 0) {
                r1 += ", ";
            }
            r1 += j;
        }
        r1 += "]";
        System.out.println(r1);

        // Arrays.toString()方法打印
        String r2 = "数组d:" + Arrays.toString(d);
        System.out.println(r2);

        // toString()方法打印
        String r3 = "数组c:" + c.toString();
        System.out.println(r3);

        // 匿名数组(无法正常定义)
        // new int[] {1,2,3,4,5,6,7};

        // 重新初始化数组i
        i = new int[] {8,9,4,6,5,1,7,10};
        Arrays.sort(i);
        String r4 = "重新初始化数据i:" + Arrays.toString(i);
        System.out.println(r4);

        // 数组copy
        int[] k = i;
        String r5 = "copy1-k:" + Arrays.toString(k);
        System.out.println(r5);
        System.out.println("i引用:" + i.toString());
        System.out.println("k引用:" + k.toString());

        int[] m = Arrays.copyOf(i, 10);
        String r6 = "copy2-m:" + Arrays.toString(m);
        System.out.println(r6);
        System.out.println("m引用:" + m.toString());

        int[] n = Arrays.copyOfRange(m, 3, 7);
        String r7 = "copy3-n:" + Arrays.toString(n);
        System.out.println(r7);
        System.out.println("n引用:" + n.toString());

        // 命令行参数(使用时需要注意包名问题)
        if (args.length == 0 || args[0].equals("-h")) {
            System.out.print("Oh no");
        } else if (args[0].equals("-f")) {
            System.out.println("feiyst, ");
        }
        for (int j = 1; j < Array.getLength(args); j++) {
            System.out.print(args[j]);
        }

        // 其它API(binarySearch、fill)
        int[] array = new int[10];
        for (int j = 0; j < Array.getLength(array); j++) {
            array[j] = (int) (Math.random() * 20);
        }
        Arrays.sort(array);
        System.out.println("原始值:" + Arrays.toString(array));
        // 必须先进行排序
        int index = Arrays.binarySearch(array, 8);
        System.out.println("二分查找:" +  index);
        Arrays.fill(array,6);
        System.out.println("固定值覆盖:" + Arrays.toString(array));
    }
}

 

二、抽奖程序

public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        System.out.println("输入数组长度:n = ");
        int n = Integer.parseInt(in.next());
        System.out.println("输入获奖数量:k = ");
        int k = Integer.parseInt(in.next());

        // 初始化基数组
        int[] array = new int[n];
        for (int i = 0; i < array.length; i++) {
            array[i] = i;
        }
        System.out.println("array: " + Arrays.toString(array));

        // 抽取结果
        int[] result = new int[k];
        int index;
        for (int i = 0; i < result.length; i++) {
            index = (int) (Math.random() * n);
            result[i] = array[index];
            array[index] = array[n-1];
            n--;
        }

        // 输出结果
        Arrays.sort(result);
        System.out.println("result: " + Arrays.toString(result));
    }

 

三、常用API及说明(代码末尾数字表示JDK版本号,type表示基本数据类型)

1.static String toString(type[] a)  5.0

说明:返回包含a中数据元素的字符串,这些元素被放在括号内,并用逗号分隔。

2.static type copyOf(type[] a, int length)  6

static type copyOfRange(type[] a, int start, int end)  6

说明:返回与a类型相同的一个数组,其长度为length或者end-start,数组元素为a的值(start-end取值为半开半闭区间)。

3.static void sort(type[] a) 

说明:采用优化的快速排序算法对数组进行排序。

4.static int binarySearch(type[] a, type v)

static int binarySearch(type[] a, int start, int end, type v) 6

 说明:采用二分法搜索算法查找v。如果查找成功,则返回相应的下标值;否则,返回一个负数值r。-r-1是为保存a有序v应插入的位置。

5.static void fill(type[] a, type v)

说明:将数组的所有数据元素值设置为v。

6.static boolean equals(type[] a, type[] b)

说明:如果两个数组大小相同,并且下标相同的元素都对应相等,返回true。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值