4.Java中的数组

Java数组

数组概述:
	数组是存储多个变量(元素)的容器;
	这多个变量的数据类型要一致;
定义格式:
	数据类型 [] 数组名;(推荐使用)
	int[] arr; 定义了一个int类型的数组,数组名是arr。
	数据类型 数组名 [];
	int arr[]; 定义了一个int类型的变量,变量名是arr数组。
数组初始化:
	数组初始化,其实就是为数组开辟内存空间,并为数组中的每个元素赋予初始值。
	a:动态初始化;	只给出长度,由系统给出初始化值。
	b:静态初始化;	给出初始化值,有系统决定长度。
		动态初始化:		
	 		int[] arr = new int[5]; //new为数组开辟内存空间,int[3]表示数组长度
	 		打印:arr --> [I@1b6d3586 -->表示在内存中地址(用于寻址)
	 		通过 arr[i]进行数组元素的取值。
	 		赋值方式: arr[0] = x;
	 	静态初始化:
	 		int[] arr = {1,2,3};
	 		int[] arr = new int[]{1,2,3};

Java中的内存分配方式

Java中内存分配:
	1.栈:(存储的是局部变量)
	2.堆:(存储的是new出来的东西)
	3.方法区:(面向对象部分讲解)
	4.本地方法区:(和系统相关)
	5.寄存器:(给CPU使用)
	
栈:
	a:存储的是局部变量。
	b:局部变量就是定义在方法中的变量。
	c:使用完毕立即回收。
堆:
	a:存储的是new出来的,实体,对象。
	b:每个对象都有首地址值。
	c:每个对象的数据都有默认值。
	d:数据使用完毕后,会在垃圾回收器空闲的时候被回收

在这里插入图片描述

两个数组指向同一个堆内存
int[] arr1 = new int[3];		//指向同一内存,所以只要改变就都改变
       arr1[0] = 100;
       arr1[1] =200;
       arr1[2] =300;
       int[] arr2 = arr1;
       arr2[0] = 111;
       arr2[1] = 222;
       arr2[2] = 333;
       System.out.println("arr1:"+arr1);
       System.out.println("arr1[0]:"+arr1[0]);
       System.out.println("arr1[1]:"+arr1[1]);
       System.out.println("arr1[2]:"+arr1[2]);
       System.out.println("===============");
       System.out.println("arr2:"+arr2);
       System.out.println("arr2[0]:"+arr2[0]);
       System.out.println("arr2[1]:"+arr2[1]);
       System.out.println("arr2[2]:"+arr2[2]);
       System.out.println("===============");

数组两个常见小问题:

1.数组索引越界:java.lang.ArrayIndexOutOfBoundsException
(数组索引大于实际所以值)
2.空指针异常:java.lang.NullPointerException 
(数组指向null,不再是指向堆数据,并按堆数据访问)

数组常见操作

	1.数组遍历:
		int[] arr = {11,22,33,44,55};
		//	for(int x=0,arr.x<arr.leng;x++)
			for(int x=0,arr.x<=arr.leng-1;x++){
			
				system.out.println(arr[x])
			}
			
	2.数组获取最值:
		思路:找一个该数组的值作为参照物。
在这里插入代码片
public static void main(String[] args) {
        int[] arr = {12,45,78,50,30};
        int max = arr[0];
        int min = arr[0];
        for (int i=1; i<arr.length;i++){
            if (arr[i]>max){
                max = arr[i];
            }
            if (arr[i]<min){
                min = arr[i];
            }
        }
        System.out.println(max);
        System.out.println(min);
数组练习:
	需求:在编程竞赛中,有6个评委为选手打分,分数为0-100整数分。
	选手的最后得分为:去掉一个最高分和最低分后4个评委的平均值。
public class Test09 {
    public static void main(String[] args) {
        int[] arr = new int[6];
        int sum = 0;
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i <= arr.length - 1; i++) {
            System.out.println("请6个评委打分打分");
            arr[i] = sc.nextInt();
            sum += arr[i];
        }
        System.out.println("sum" + sum);
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        System.out.println("max" + max);
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
        }
        System.out.println("min" + min);
        System.out.println((sum-min-max)/(arr.length-2));
    }
}
练习2:有一对兔子,从出生第3个月每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子不死,
问第二十个月的兔子对数为多少?

规律:
	第一个月: 1
	第二个月: 1
	第三个月: 2
	第四个月: 3
	第五个月: 5
public class Test09 {
    public static void main(String[] args) {
        int[] arr = new int[20];
        arr[0] = 1;
        arr[1] = 1;
        // arr[2] = arr[0] + arr[1]
        // arr[3] = arr[1] + arr[2]
        for (int i=2;i<arr.length;i++){
            arr[i] = arr[i-1] + arr[i-2];
            System.out.println(arr[i]);
        }
    }
}

数组排序

冒泡排序

举例:    int[] arr = {24,69,80,57,13};
排序后:	 arr = {13,24,57,69,80};

在这里插入图片描述

package com.scy10;

public class BubbleSort {

    public static void main(String[] args) {
        int[] arr = {24,69,80,57,13};
        sort(arr);
        printArray(arr);
        }

    public static void sort(int[] arr) {
        for (int j = 0; j < arr.length - 1; j++) {
            for (int i = 0; i < arr.length - j - 1; i++) {
//                arr.length-1为了防止越界
                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
        }
    }
    
    public static void printArray(int[] arr){
        System.out.print("[");
        for (int i =0;i<arr.length;i++){
            if (i==arr.length-1){
                System.out.print(arr[i]);
            }
            else {
                System.out.print(arr[i]);
                System.out.print(", ");
            }
        }
        System.out.print("]");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值