/*
* 数组的概述
*1.数组的理解:数组(Array),是多个相同数组数据按一定顺序排列的集合,并使用一个名字命名。
* 通过编号的方式对这些数据进行统一管理
*2.数组相关概念
* >数组名
* >元素
* >角标,下表,索引
* >数组的长度:元素的个数
*3.数组的特点:
* 1)数组是有序排列的
* 2)数组属于引用类型的变量。数组元素,既可以是基本数据,也可以是应用数据类型
* 3)创建数组对象会在内存中间开辟一整块连续的空间
* 4)数组的长度一旦确定,就不能修改。
*4.数组的分类
* 1)按照维数:一维数组、二维数组、
* 2)按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组
*5.一维数组的使用
* 1)一维数组的声明和初始化
* 2)如何调用数组的指定位置的元素
* 3)如何获取数组的长度
* 4)如何遍历数组
* 5)数组元素的默认初始值
* 1)整型:0 浮点型:0.0 char型:0或'\u0000',而非'0'
* 2)boolean:false 数据引用类型:null
* 6)数组的内存解析
*/
public class ArrayText {
public static void main(String args[]) {
//一维数组
int ad;//声明
ad=10;//初始化
int er=1001;//声明+初始化
int[] ids;//声明
//静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids=new int[] {1001,1002,1003,1004};
//动态初始化:数组的初始化和数组元素的赋值分开操作
String[] names=new String[3];
//数组的角标(索引)从0开始到数组长度的-1结束
names[0]="小辉";
names[1]="小强";
names[2]="小明";
//获取数组的长度:属性:length
System.out.println(names.length);
//数组遍历
for(int i=0;i<names.length;i++) {
System.out.println(names[i]);
}
//数组元素的默认初始值
int[] ar=new int[4];
for(int i=0;i<ar.length;i++) {
System.out.println(ar[i]);
}
}
}
/*
* 二维数组
*1.数组的理解:二维数组看成一维数组array1又作为另一个数组一维数组array2的元素而存在。
* 底层运行机制上看,没有多维数组
*2.二维数组的使用
* 1)一维数组的声明和初始化
* 2)如何调用数组的指定位置的元素
* 3)如何获取数组的长度
* 4)如何遍历数组
* 5)数组元素的默认初始值
* 1)针对初始化方式1:int[][] arr=new int[4][3];
* 外层元素的初始化值:地址值
* 内层:与一维数组初始化相同
* 2)针对初始化方式二:int[][] arr=new int[4][];
* 外层:null
* 内层:不能调用,直接报错
* 6)数组的内存解析
*/
public class ArrayText2 {
public static void main(String[] args) {
// 二维数组的声明和初始化
//静态初始化
int[][] arr=new int[][] {{1,2,3},{2,3,4},{2,4}};
//动态初始化
String[][] arr1=new String[3][2];
//调用数组的指定位置元素
System.out.println(arr[0][1]);
System.out.println(arr1[0][1]);
String[][] arr2=new String[3][0];
//arr2[1]=new String[2];
System.out.println(arr2[1][0]);//空指针
//数组的长度
System.out.println(arr[2].length);
//遍历二维数组
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
//练习
import java.util.Arrays;
public class ArrayText3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arry[]= {2,8,9,6,2,7,5,4,1};
//查找数组的某个元素的下标,前提是顺序数组
int arry1[]= {2,3,4,5,6,7,8,9};
int idex=Arrays.binarySearch(arry1, 4);
System.out.println(idex);
//数组的复制常用于数组的扩容
int arry2[]=Arrays.copyOf(arry, 8);//如果数组比原有数组小取前8位,如果超过多余的取0
System.out.println(Arrays.toString(arry2));
//排序,改变数组原来结构
Arrays.sort(arry2,0,6);//从0下标到6下标进行排序
System.out.println(Arrays.toString(arry2));
//比较
System.out.println(Arrays.equals(arry1, arry2));
//赋值
int arry3[]=new int[4];
Arrays.fill(arry3,1);
System.out.println(Arrays.toString(arry3));
}
}
import java.util.Arrays;
public class AyTest1 {
public static void main(String[] args) {
// 获取arry数组中所有元素的和
int[] arry[]=new int[][] {{3,5,8},{12,9},{7,0,6,4}};
int sum=0;
for(int i=0;i<arry.length;i++) {
for(int j=0;j<arry[i].length;j++) {
System.out.print(arry[i][j]);
sum=sum+arry[i][j];
}
System.out.println();
}
System.out.println("总和为"+sum);
//下一题
int a[]= {9,9,8,6,5,4};
System.out.println(Arrays.toString(a));
int c[]=Arrays.copyOf(a,a.length*2);
System.out.println( Arrays.toString(c));
int d[ ]=new int[a.length*2];
System.arraycopy(a,0,d,2,6);
System.out.println( Arrays.toString(d)) ;
}
}
public class AyTest2 {
public static void main(String[] args) {
// 使用二维数组打印一个杨辉三角
//第一行有一个元素第N行有N个,每一行前后一个元素都是1
int[][] ary=new int[10][];
for(int i=0;i<ary.length;i++) {
ary[i]=new int[i+1];
//给首尾的元素赋值
ary[i][0]=ary[i][i]=1;
//给其他的元素赋值
if(i>1) {
for(int j=1;j<ary[i].length-1;j++) {
ary[i][j]=ary[i-1][j-1]+ary[i-1][j];
}
}
}
//遍历
for(int i=0;i<ary.length;i++) {
for(int j=0;j<ary[i].length;j++) {
System.out.print(ary[i][j]);
}
System.out.println();
}
}
}