Java学习day04:数组

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点+题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!)


Java学习day04:数组

一、开发中为什么要有数组

声明一个变量,存储多个数据

二、在java中如何定义数组

1.第一种声明方式

数据类型[] 数组变量名字={值1,值2,值3......}

数据类型      数组变量名字[] ={值1,值2,值3......}

int   arr[]={1,2,3,4}

2.第二种声明方式 

数据类型[] 数组变量名字=new 数据类型[数组容量]

int[] arr=new int[3]

这种方式仅仅是声明了一个容器,里面还没有放值 ,此时部分类型具有默认值

int型的默认值是0
Boolean型的默认值是false
string型的默认值是null
char型的默认值是空格

3.第三种声明方式

数据类型[] 数组变量名字=new 数据类型 []{值1,值2,值3......}

int [] arr=new int[]{1,2,3,4}

三、如何给数组赋值 

这里针对第二种声明方式,已经声明大小的数组

直接赋值,数组下标改动,注意点:1.数组下标从0开始、2.不能超出数组容量

int [] arr=new int[3]

注:一般开发中是不会用数组的,用集合,毕竟数组大小需要事先确定,这是个不可避免的缺点。但是集合的底层是数组

数组的输出

如果直接打印,实际打印的是数组内存地址  :System.out.print(arr);

利用一个方法arrays.tostring(数组名)转换一下就ok :System.out.print(Arrays.toString(arr));

注:特殊的,char型不需要转换,底层已经做了,本来就是单个字符串

四、数组的取值

1.用循环遍历

数组大小用数组名.length,这样即使数组大小改变也不影响

for(int i=0; i

char型和string型数组赋值练习 

char[] arr1=new char[]{'a',98,'c'};

String[] arr2=new String[]{"asd","dasd","qrwe"};

for (int j = 0; j < arr1.length; j++) {
    System.out.println(arr1[j]);
}

for (int j = 0; j < arr2.length; j++) {
    System.out.println(arr2[j]);
}

五、二维数组(了解)

格式:int [][] arr=new int[2][3]

先行后列,这里就是一个两行三列的数组,此时赋值就是arr[0][0]=1;

二维数组只能用两个嵌套for循环进行遍历,不能再用tostring的方法了,tostring打印出来的还是内存地址

六、数组作为方法的参数

跟基本的方法定义是一样的,只是说,方法的形参变成了一个数组

public class Main {
    public static void main(String[] args) {
    int [] arr=new int[5];//1.声明一个空数组
    Arr(arr);//2.调用Arr方法对数组赋值
    System.out.println(Arrays.toString(arr));//3.输出数组
}

public  static  void  Arr(int[] arr){
    Scanner sc=new Scanner(System.in);
    for (int i = 0; i < arr.length; i++) {
        int j=sc.nextInt();
        arr[i]=j;
    

对一个空数组进行赋值,可以用for循环持续输入

七、数组作为方法的返回值 

用一个例题来体现:反转数组的值,比如本来是{1,2,3}就变成{3,2,1}

public class Main {
    public static void main(String[] args) {
        int [] arr={1,2,3,4};
        int[] reversearr=  reverse(arr);
        System.out.println(Arrays.toString(reversearr));
    }

public  static int[] reverse(int[] arr){
        //声明一个空数组来接收转换后的数据
        int [] arr1=new int[arr.length];
        //这里可以看到for循环的使用是可以有多个参数的
        for (int i = 0, j=arr.length-1 ; i 

这里用了一个for,把一个数组的值进行反转,而在后面是可以用stringbuffer封装的reverse方法直接调用的 

八、数组咋内存中是如何分配的(了解) 

目前主要关注堆内存和栈内存

1.栈内存:

存储的是八大基本数据类型的数据
int a = 20; 这个存在了栈区
存储的是对象的引用  scanner   就是一个对象的等号的左边的
Scanner scanner = new Scanner(System.in);

2.堆区:

凡是new的 都存在堆区
int[] arr = new int[5];
arr存在了栈区  而   new int[5];存在了堆区
Scanner scanner = new Scanner(System.in);
scanner  存在了栈区, new Scanner(System.in);  在堆区

大家好好理解下面这幅图片:1、2、3步骤

Java学习day04:数组_第1张图片

 3.各大内存区域及其作用

Java学习day04:数组_第2张图片


以上就是今天的知识点,下面做题:

九、习题

先说一个例题:大家自己先做

找出数组中最大值的索引下标,这里提供两种解法,可以对比一下做法,差距出在哪里,是哪里没有想到,

第一种差的:

public static  int  maxindex(int [] arr){
      int num=0;
    for (int i = 0; i < arr.length; i++) {
          num=0;
        for (int j = 0; j < arr.length; j++) {
            if(arr[i]>=arr[j]){
                num++;
            }
        }
        if(num==arr.length){
            num=i;
            break;
        }
    }
    return num;
}

第二种好的:

 //求一个数组中的最大值的索引下标
 public static int maxIndexOfArray (int[] arr) {
  int maxIndex = 0;
  /**
   * i=0 0<4 true arr[0] 

1.题目 

1.需求:定义一个方法,找出int数组中,最大值的索引下标 [1,2,23,5,6,7,8]  打印出来2
2.需求:定义一个方法,找出int数组中,最小值的索引下标
3.需求:定义一个方法,在指定的int数组中找出指定的数据第一个的下标,8这个数的下标
[1,2,8,4,5,78,7,8,9]

4. 在一个数组中,找出所有的 指定数据的下标位置  找出数组中所有的8这个数的下标
[1,2,8,4,5,7,8,7,8,9]
5. 完成一个方法,替换掉数组中所有元素为0的元素,替换为指定元素  [1,2,3,0,0,0]
6. 完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。
    [1,2,3,4,5,6,7]=>[1,2,4,5,6,7,0]
7. 完成一个方法,添加指定元素到指定下标位置,要求从指定下标位置之后的元素,整体向后移动。 [1,2,3,4,5,0]=>[1,2,250,3,4,5]

8. 找出数组中最大的元素,放到下标为0的位置

9. 在上一道题的基础上,不考虑下标为0的元素。 找出数组中最大的元素,放到下标为1的位置

建议初学者都敲一敲,而且是不看我的答案,先自己敲,很多东西看着会,实际自己上手敲的时候往往会出错。另外题解肯定不止一个,我也只是记录其中一种,大家大可寻找更优解,同时我基本没写注释,希望大家还是多自己思考原因。

2.部分习题答案

//3.需求:定义一个方法,在指定的int数组中找出指定的数据第一个的下标 8这个数的下标
//[1,2,8,4,5,78,7,8,9]

public  static int first8index(int[] arr){
    int first8index=0;
    for (int i = 0; i < arr.length; i++) {
        if(arr[i]==8){
            first8index=i;
            break;
        }
    }
    return first8index;
}


//    4. 在一个数组中,找出所有的 指定数据的下标位置 【难】
//    找出所有的下标存倒数组中
//  8这个数的下标
//[1,2,8,4,5,7,8,7,8,9]

public  static int[] index(int[] arr){
        int number=0;
    for (int i = 0; i < arr.length; i++) {
        if(arr[i]==8){
            number++;
        }
    }
    int[] index=new int[number];
    int num=0;
    for (int i = 0; i < arr.length; i++) {
        if(arr[i]==8){
            index[num]=i;
            num++;
        }
    }
    return index;
}



//    6. 完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。【难】
//            [1,2,3,4,5,6,7]=>[1,2,4,5,6,7,0]

    public static void deletearr(int[] arr){
        int num=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==3){
                num=i;
            }
        }
        for (int j = num; j 

 

你可能感兴趣的:(java从0到1知识点+题解,学习,java,java-ee,intellij-idea)