java学习之数组1

2022/1/13 12:33:37

本文主要是介绍java学习之数组1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、数组★

概念:[一组] [类型相同的] [连续的] 存储空间的表示

优点:                                                                 缺点:       

一个存储单位存多个值                                        长度固定

空间连续(遍历)                                               类型固定

下标(索引 )定位                                              插入和删除

语法:

四步骤:

1、声明:数据类型[] 数组名称; String[] names; String[] nameArray;

2、初始化:数组名称 = new 数据类型[长度];

names = new String[30];

下标取值范围:0~names.length-1

如果下标越界会爆异常:ArrayIndexOutOfBoundsException

3、赋值:数组名称[下标] = 值;

names[0] = "zs";

names[1] = "ls";

....

names[29] ="wz";

4、使用

System.out.println(names[0],names[1]);

其他方式:

1、数据类型[] 数组名称 = {值1,...,值n};

2、数据类型[] 数组名称;

数组名称 = new 数据类型[]{值1,...,值n};

注意:数组初始化后所有的元素都有默认的(无效)初值

String :null

char:(char)0

增强型for

for(数据类型 变量:数组名称){

依次从下标0开始,默认提取所有元素,支持continue和break;

System.out.println(数量);

}

练习


生成20个不重复的1~1000之间的随机数

public static void main(String[] args) {
    int[] arr = new int[20];
    Random random = new Random();
    arr[0] = 1+random.nextInt(1000);

    //下标
    for (int i = 1; i <arr.length ;) {
        arr[i] = 1 + random.nextInt(1000);       // 1
        //证明是否会唯一
        boolean unique = true;
        for (int j = 0; j <i ; j++) {   //i之前的元素
            if (arr[i]==arr[j]){
                unique = false;
                break;                   //break重复之后回到1处重新生成新随机数,再进来比较
            }
        }
        if (unique){   //重复不进来,i不变继续赋值
            i++;
        }
    }

    for (int i:arr) {
        System.out.println(i);
    }
}

数组的删除

输入一个值,如果在数组中存在,则删除,否则给出不存在提示
public static void main(String[] args) {
    int[] arr = {25,13,11,5,9,3,29,33,8};
    System.out.println("删除前");
    for (int i:arr) {
        System.out.print(i+"\t");
    }

    Scanner input = new Scanner(System.in);
    System.out.print("请输入一个数值");
    int num = input.nextInt();

    //找到num在arr的下标

    int i = 0;
    while (i<arr.length){
        if (arr[i]==num){
            break;
        }
        i++;
    }
    if (i==arr.length){
        System.out.println(num+"不存在");
    }else {
        //从找到的i开始 因为最后一个下标为arr.length-1,后面没了再无法覆盖了,for条件不能到此
        for (int j = i; j < arr.length-1 ; j++) { //倒数第二个数字用倒数第一个去覆盖
            arr[j] = arr[j+1];        //右覆盖左
        }
        arr[arr.length-1] = 0;    //最后一个覆盖掉了前面的,它原本位置还存在,所以要置为0


        for (int t:arr) {
            System.out.print(t+"\t");
        }
    }
}

数组的插入

public static void main(String[] args) {
    int[] arr = {25,13,11,5,9,3,29,33,8,0};
    for (int t:arr) {
        System.out.print(t+"\t");
    }
    Scanner input = new Scanner(System.in);
    System.out.print("请输入下标");
    int index = input.nextInt();
    System.out.println("请输入数值:");
    int num = input.nextInt();

    if(index<0 || index>=arr.length){
        System.err.println("下标越界"+index);
    }else if (num<=0){
        System.err.println("输入无效数值"+num);
    }else{//用左边的去覆盖右边的   -1相当于左
        for (int i = arr.length-1; i >index ; i--) {
            arr[i] = arr[i-1];   //i = 0 i-1 = -1数组下标越界 所以i不能>=0
        }
        arr[index] = num;

        for (int t:arr) {
            System.out.print(t+"\t");
        }
    }
}

求1万以内的质数

public static void main(String[] args) {
//用小于等于其平方根的质数验证即可
    int[] primeNums = new int[10000];
    int size = 0,count = 0;
    primeNums[size++] = 2;
    for (int i = 3; i <=10000 ; i++,count++) { //i+=2性能更高,因为偶数一定不是质数,只有奇数才有可能
        boolean is = true ;
        for (int j = 0;primeNums[j] <= Math.sqrt(i); j++,count++) {
            if (i % primeNums[j] ==0 ){
                is = false;
                break;
            }
        }
        if (is){
            primeNums[size++] = i;
        }
    }

    System.out.println("there are "+size+" prime numbers from 1 to 10000 within "+count+" times circulation");
    for (int i = 0; i < size; i++) {
        System.out.println(primeNums[i]);
    }
}

求第n个不存在的数

public static void main(String[] args) {
    int[] arr = {1,4,7};
    int nth = 3;

    int i = 1,count = 0;
    for (; i < Integer.MAX_VALUE;i++) {
        boolean no = true;
        for (int j : arr) {
            if(i==j){
                no = false;
                break;
            }
        }
        if(no && ++count>=nth){  //no等于true表示不存在,此时才去验证
            break;              //i=1,存在不执行if i=2,不存在的数,执行++count值为1并不大于等于3
            //不break,继续循环i=3,不存在的数,执行++count值为2并不>=3,继续i=4,存在不行继续i=5,不存在的数,执行++count值为2满足
            //>=3,break出来,输出i为5,急第三个不存在的数为5
        }
    }
    System.out.println("第"+nth+"个不存在的数值为"+i);
}



这篇关于java学习之数组1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程