数组的创建与使用
数组就是一种数据结构,它是一块连续的内存,存储的是一种相同类型的数据的集合,这种数据结构就等于数据加结构,就是组织和描述数据的方式
public static void main(String[] args){
int[] array1 ={1,2,3,4,5};//定义且初始化了一个整型数组
double[] array2 = {1.1,2.3,3.4,5.6,7.8};//定义且初始化了一个浮点类型的数组
string[] array3 = {"asd","asdasd","zxczxc","qwerttt"};//定义且初始化了一个字符串类型的数组
int[] array4 = new int[5];//定义一个整型数组,5为它有多少元素。
int[] array5 = new int[]{1,2,3,4,5,6,8,9};//定义且初始化了一个整型数组
System.out.println(array1);//此处输出array1数组的地址
System.out.println(array1[1]);//此时输出array1数组的第二个元素,[]里的范围为[0,array.length)
System.out.println(array1.length);//此时输出数组array1的长度。
array2 = null;//null -> 啥也没有
System.out.println(array2);//此时输出null
System.out.println(array2.length);//此时输出错误,空指针异常
}
数组的输出:
int[] array1 = {1,2,3,4,5};
for(int i=1;i<array1.length;i++){
System.out.print(array1[i]+ " ");
}
String ret =Arrays.toString(array1);//接收数组的每一项赋值给string类型的ret
// Arrays. 这个叫做操作数组的工具类
System.out.print(ret);
System.out.print(Arrays.toString(array1));//直接打印
int[] array2 = new int[5];
System.out.print(Arrays.toString(array2));//此时输出0 0 0 0 0 表示数组的默认值为0
数组的赋值:
int[] array = new int[5];
for(int i=1;i<array.length;i++){
array[i] = i*2;
System.out.print(array[i]+ " ");
}
因为数组中存储的是数组在堆中内存的地址,所以不论方法中有无返回值,方法中修改数组的元素后,主函数中数组的元素也会被修改。
public static void main(String[] args){
int[] array={1,2,3,4,5};
func(array);
for(i=0;i<array.length;i++){
System.out.print(array[i]);
}
}
public static void func(int[] array){
for(int i=0;i<array.length;i++){
array[i] = i*2;
}
}
foreach语句
for( 数组中每个元素的数据类型:数组名){
}
for(int x:array){
System.out.print(x+ " ");//此处表示数组中每个元素的输出
}
可变参数编程
可接收多个参数的参数类型的编程。
public static void main(String[] args){
int ret1 = sum(1,2,3,4,5,6,7);//调用sum方法并传参1 2 3 4 5 6 7,并用ret来进行接收
System.out.println("第一组数的和为: "+ret1);
int[] array = {1,2,3,4,5,6,7};
int ret2 = sum(array);
System.out.println("第二组数的和为: "+ret2);
int ret3 = sum(new int[]{1,2,3,4,5,6,7});
System.out.println("第三组数的和为: "+ret3);
}
public static int sum(int... tmp){
//这里 int...tmp表示tmp可以接收多个变量,调用方法时可传多个参数
int sum = 0 ;
for(int a:tmp){
sum = sum+a;
}
return sum;
}
数组中元素的交换
如,把一个数组中的奇数放在偶数前:
public static void main(String[] args) {
int[] array= new int[]{1,2,3,4,5,6};
System.out.println(Arrays.toString(changeOrder(array)));
}
public static int[] changeOrder(int[] array){
int i=0;
for (;i<array.length;i++)
if (array[i]%2 == 0){
int j = changeOrder2(array,i);
if (j <= i){
//若返回的 j值等于或小于i,则 结束
return array;
}else {
//若返回的 j值大于i ,则调换 array数组中第i 第j 继续循环
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
return array;
}
public static int changeOrder2(int[] array,int i){
int j= array.length-1;
for (;j>=i;j--) {
if (array[j]%2 == 1){
return j;
}
}
return j;
}