一维数组格式及使用,堆,栈--学习笔记--11

一. 数组

存储同一种数据类型多个变量元素
数组的定义格式:

  1. 数据类型[] 数组名;
  2. 数组类型 数组名[]
  3. 这两种定义做完了,数组中没有元素值
    Int[ ] a;定义一个int类型的数组a变量;
    Int a [ ];定义一个int类型的a数组变量;

数组必须先初始化,为其分配内存空间并为其分配内存空间
(1)动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
格式
数组类型[] 数组名=new 数据类型 [数组长度]
数组长度其实就是数组元素的个数
(2)静态初始化:
格式:

数组类型[ ] 数组名=new 数据类型[] (元素1,元素2……)
举例1.:int [ ]arr=new int[1,2,3]
定义了一个int类型数组,,这个数组可存放3个int 类型值,值分别为1,2,3;
初始化时指定每个数组元素的初始值,由系统决定数组长度;
用数组名和编号的配合就可以获取数组中的指定编号的元素,这个编号的专业名称为索引;
通过数组名访问数据的格式是数组名[索引]索引就是每个元素编号,从0开始,最大是数组长度-1;

import java.util.Scanner;
public class One {
public static void main(String[] args) {
		int [] arr=new int[3];
		//int 数组中元素类型为int
		//arr数组名称
		//new为数组分配内存空间
		///3:数组长度
		System.out.println(arr);//[I@15db9742地址值
	}
  }

二.堆,栈

1.栈:存放局部变量
数据用完就释放
:存放所有new出来的东西
堆内存特点:
1.每一个new 出来的东西都有地址值;
2.每个变量都有默认值,byte,short,int,long 0
Float,double —0.0
Char —‘ \u0000’
Boolean— false
引用类型 —null
3.使用完就变成垃圾,但没有立刻回收,会在垃圾回收器空闲时回收
局部变量:在方法定义中或者方法声明上的变量都称为局部变量

int [] arr=new int[2];
		int [] arr2=new int[3];
		arr[1]=20;
		arr2[1]=30;
		arr2[0]=40;
		System.out.println(arr);//[I@15db9742地址值
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println("--------------------");
		System.out.println(arr);//[I@15db9742地址值
		System.out.println(arr2[0]);
		System.out.println(arr2[1]);
		System.out.println(arr2[2]);		
	}

没有数字的即为它在堆内存的地址值
在这里插入图片描述

2.数组的定义

定义第一个数组,定义完毕后,给数组元素赋值,赋值完毕后,再输出数组名称和元素;
定义第二个数组,定义完毕后,给数组元素赋值,赋值完毕后,再输出数组名称和元素;
定义第三个数组,把第一个数组的地址值赋值给他,通过第三个数组的名称取把元素重复赋值,最后,再次输出第一个数组数组名和元素。
(1)静态初始化:

import java.util.Scanner;
public class One {
public static void main(String[] args) {
		int [] arr= {1,2,3};
		
		arr[1]=20;
		arr[2]=30;
		arr[0]=50;
		System.out.println(arr);//[I@15db9742地址值
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println("--------------------");
	}
  }

注意:
(1)ArrayIndexOutOfBoundsException:数组索引越界异常,访问了不存在的索引;
(2)NullPointerException:空指针异常,数组已经不再指向堆内存了,而你还用数组名去访问元素。
(3) 数组提供了一个属性,用于获取数组长度
格式:数组名.length

举例1.数组遍历

import java.util.Scanner;
public class One {
public static void main(String[] args) {
	//定义数据
		int [ ] arr= {1,2,3,4,5};
		//获取每一个元素
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);
		System.out.println(arr[4]);
		System.out.println("-----------------------");
		for (int x=0;x<arr.lengt;x++) {
			System.out.println(arr[x]);
		}
	}
  }

举例2.数组获取最大值
(1)定义数组,进行静态初始化;
(2)找参照物,数组中任意元素作为参照物,默认最大值
遍历其他元素
方法一:

import java.util.Scanner;
public class One {
public static void main(String[] args) {
	//定义数据
		int [] arr= {1,2,3,4,5};
		int max=arr[0];
		for (int x=1;x<arr.length;x++) {
			if (arr[x]>max) {
				max=arr[x];
			}
		}
			System.out.println(max);
	}
  }

在这里插入图片描述
方法二:

import java.util.Scanner;
public class One {
public static void main(String[] args) {
	int [] arr= {1,2,3,4,5};
	
	int max=getMax(arr);
	System.out.println(max);
}
	public static int getMax(int[] arr){
		int max=arr[0]	;
		for (int x=1;x<arr.length;x++) {
			if (arr[x]>max) {
				max=arr[x];
			}
		}
		return max;
		}
	}

举例3.数组元素逆序

import java.util.Scanner;
public class One {
public static void main(String[] args) {
	int [] arr= {12,23,32,48,56};
	System.out.println("逆序前");
	printArray(arr);
	reverse(arr);
	System.out.println("逆序后");
	printArray(arr);
	
}
		public static void reverse(int [] arr) {
			for(int x=0;x<arr.length/2;x++) {
				int temp=arr[x];
				arr[x]=arr[arr.length-1-x];
				arr[arr.length-1-x]=temp;
				}
		}
		//遍历数组
		public static void printArray(int [] arr) {
			System.out.println("[");
			for(int x=0;x<arr.length;x++) {
				if(x==arr.length-1) {
					System.out.println(arr[x]+"]");
				}else {
					System.out.print(arr[x]+",");
			}
		}
		}
	}

在这里插入图片描述

举例4.数组查表法,根据键盘录入索引,查找对应星期

import java.util.Scanner;
public class One {
public static void main(String[] args) {
	String[] strArray= {"1","2","3","4","5","6","7"};
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入一个数0-6");
	int index=sc.nextInt();
	System.out.println("你要查找的日期是"+strArray[index]);
}

在这里插入图片描述

举例5.数组元素查找
需求:查找指定数据再数组中第一次出现的索引
定义一个数组,并静态初始化
参数列表:两个
写一个功能实现。

import java.util.Scanner;
public class One {
public static void main(String[] args) {
	int [] arr= {12,23,34,45,67};
	int index=getIndex(arr,23);
	System.out.println("出现第一次索引为"+index);
	}
		public static int getIndex(int [] arr,int value) {
			for(int x=0;x<arr.length;x++) {
				if (arr[x]==value) {
					return x;	
				}		
			}
			//假如我要查的数据数组中不存在,那就找不到,
			//找不到有对应的返回吗
			//只要是判断,就有可能是false
			//如果找不到数据,我们一般返回一个负数即可,而且返回是1
			return -1;	
		}
}

在这里插入图片描述
方法2.

public static void main(String[] args) {
	int [] arr= {12,23,34,45,67};
	int index=getIndex(arr,23);
	System.out.println("出现第一次索引为"+index);
	}
		public static int getIndex(int [] arr,int value) {
			int index=-1;
			for(int x=0;x<arr.length;x++) {
				if (arr[x]==value) {
					index=x;
					break;
				}		
			}
			return index;
		}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值