文章目录
- 1. 数组定义
- 2 .数组(一维)
- 静态数组
- 动态数组
- 数组存储原理
- 数组应用
- 3. 数组(二维)
- 静态数组
- 动态数组
- 4.熟练运用
- 数组习题1
- 数组习题2
1. 数组定义
数组是存储同一种数据类型多个元素的集合。也可以看成一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型,数组本身就是一个引用数据类型。
2 .数组(一维)
静态数组
数组静态声明
数据类型[] 数组名称 = {元素,元素,元素......};
案例
public class 数组循环 {
public static void main(String[] args) {
/*
* 需求:
* 循环数组列表
* */
//定义数组
int[] arr ={1,2,3,4,5};
/* for (int i =0;i<5;i++){
System.out.println("int[]arr:"+arr[i]);
}*/
// 遍历数组
for (int i =0;i<arr.length;i++){
System.out.println(+arr[i]);
}
}
}
动态数组
数组动态声明
数据类型[] 数组名称 = new 数据类型 [长度] ;
动态声明去声明数组如果没有进行单独赋值操作,那么也会有值,值就是
int 类型是 0
例子:
public class Test1 {
public static void main(String[] args) {
/*
* 定义一个5个元素组成的一维数组,对其赋值,再把该数组反向输出
* */
int [] arr =new int[5];
Scanner s =new Scanner(System.in);
System.out.println("请输入五个数:");
for (int i=0;i<arr.length;i++){
arr[i]= s.nextInt();
}
System.out.println("反向输出");
for(int i=0;i<arr.length;i++){
System.out.println(arr[4-i]);
}
}
}
数组存储原理
public class 数组存储原理 {
public static void main(String[] args) {
/*
* 需求
* 内存分析
* java程序在运行时,JVM把内存分为5块,栈,堆,方法区,本地方法区,寄存器
栈:存储的是局部变量,在函数和语句中定义的变量,先进后出的 ,局部变量的作用域结束了就立刻释放内存
堆:存储的是实体(对象,数组),实体都是可以存储多个数据
堆的特点:堆中开辟的内存有默认值。没有引用指向的就成为垃圾了。
会等待垃圾回收线程来回收。
int [] num =new int[2];
System.out.println(num);//输出[I@1b6d3586 堆地址
}
}
数组应用
冒泡排序
public class 冒泡 {
public static void main(String[] args) {
/*
* 需求:
* 判断一个数组排序(分析过程)
* 1 4(5-1)
* 2 3(5-2)
* 3 2(5-3)
* 4 1 (5-4)
* */
//定义一个静态数组
int [] arr={1,4,7,28,5};
//比较 for 双层循环控制轮数
for (int i =1 ;i<arr.length;i++){
for (int j=0 ;j<arr.length-i;j++){
/*
* 判断从小到大排序
* 大的往后移,小的往前移
* */
if(arr[j]>arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
//输出每一轮比较的结果
System.out.println("输出比较"+i+"次所得结果");
//for循环遍历输出
for (int k =0;k<arr.length;k++){
System.out.print(arr[k]+" ");
}
System.out.println();
}
//遍历循环数组输出结果
for (int i =0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
//输出最小值
System.out.println(arr[0]);
//输出最大值
System.out.println(arr[arr.length-1]);
}
}
3. 数组(二维)
二维数组其实是一位数组的嵌套(每一行看做一个内层的一维数组)
静态数组
数组静态声明
数据类型[][]数组名称 = {{元素,元素,元素......},{元素,元素,元素......}};
例子:
public class 二维数组 {
public static void main(String[] args) {
/*
* 需求
* 遍历输出二维数组中的元素
* 二维数组静态
* */
int[][]arr={{1,2},{3,4}};
//输出二维数组中的元素
/*
* arr[行][列]
* */
//赋值
int num =arr[0][0];
int num1=arr[0][1];
System.out.println(num);
System.out.println(num1);
/*
* 当二维数组中元素较多时上面的方式显然不实用
* 就需要运用for循环遍历
* */
for(int i =0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
//输出数组中的元素
System.out.println(arr[i][j]);
}
}
}
}
动态数组
数组动态声明
数据类型[][] 数组名称 = new 数据类型 [行] [列];
例子:
public class 动态二维数组 {
public static void main(String[] args) {
//声明
int[][]arr=new int [2][2];
//赋值
arr[0][0]=1;
arr[0][1]=2;
arr[1][0]=3;
arr[1][1]=4;
//遍历输出
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
}
}
4.熟练运用
数组习题1
public class 数组习题1 {
public static void main(String[] args) {
/*
* 需求:
* 将
* oldarr={1,3,45,5,67,7,0,00,0,0}
* 变成
* newarr={1,3,45,5,67,7,00}
* 然后将newarr数组中元素从小到大排序
* 利用冒泡排序
* */
int index = 0;
int count = 0;//计时器
//定义数组
int[] oldarr = {1, 3, 45, 5, 67, 7, 0, 00, 0, 0};
for (int i = 0; i < oldarr.length; i++) {
if (oldarr[i] != 0) {
count++;
}
}
System.out.println(count);
//定义新数组
int[] newarr = new int[count];
//循环旧数组
for (int i = 0; i < oldarr.length; i++) {
//newarr[i]=oldarr[i];//这样写会造成数组下标越界,所以需要重新定义一个
if (oldarr[i] != 0) {
newarr[index++] = oldarr[i];
}
}
for (int i = 1; i < newarr.length; i++) {
for (int j = 0; j < newarr.length - i; j++) {
/*
* 判断从小到大排序
*
* 大的往后移,小的往前移
* */
if (newarr[j] > newarr[j + 1]) {
int temp = newarr[j + 1];
newarr[j + 1] = newarr[j];
newarr[j] = temp;
}
}
}
for (int k = 0; k < newarr.length; k++) {
System.out.print(newarr[k] + " ");
}
}
}
数组习题2
public class 数组习题 {
public static void main(String[] args) {
/*
* 需求
解决: 该3数字不在数组中
该3数字不在数组中
该3数字在数组中
该3数字不在数组中
该3数字不在数组中
显然该程序输出结果不对
* 解决方案:
* 做标记
* */
* 做标记
boolean nums=false;
int num=3;
int[] arr ={1,2,3,4,5};
for(int i=0 ;i<arr.length;i++){
如果是此种方式的话,输出结果如上
// if(arr[i]==num){
// System.out.println("该"+num+"数字在数组中");
// }else{
// System.out.println("该"+num+"数字不在数组中");
// }
if(arr[i]==num){
nums=true;
}else{
}
}
if(nums){
System.out.println("该"+num+"数字在数组中");
}else{
System.out.println("该"+num+"数字不在数组中");
}
}
}