学习java 第六天 数组创建复制排序

一.数组

可以理解为容器,存放多个同类型的元素

开辟的空间连续+数据类型一致

数组是什么数据类型?

数据类型就基本数据类型和引用数据类型

所以 数组属于引用数据类型

1.根据数组维数创建

	int[] data=new int[4];//开辟空间的大小
	//[I@1f32e575
	System.out.println(data);
//缺少数组维数  int[] data=new int[];

2.根据数组内容创建

//错误: 同时使用维表达式和初始化创建数组是非法的 
//int[] data01=new int[4]{45,23,66,78};
int[] data01=new int[]{1,2,3,4};

//用的最多的是
int[] data01={1,2,3,4};

3.数组的下标/索引是从0开始的 

//获取第一个空间的内容//数组的下标 0 1 2 3  索引
System.out.println(data[0]);//0
对数组某个位置进行赋值
data[1]=666;

4.获取数组的长度

 System.out.println(data.length);

//数组长度 最后一个空间下标

//4 3

//5 4

//data.length    data.length-1

int index=data.length;

5. 数组的遍历 普通for

遍历 数组  for+下标

//5.遍历 数组  for+下标
for(int index=0;index<data02.length;index++){
	System.out.println(data02[index]);
}

6.foreach/forin遍历数组

//for(数据类型 名字:data){} for+下标实用性更强 foreach只能从前往后
		/*for(从数组取出的每一个空间的内容:数组对象){

		}*/

		for(int x:data02){
			System.out.println(x);
		}

Exce1

public class Exec1{
	public static void main(String[] args){

		// 存放名字数组  Jack Andy Lee
		String[] name={"Jack","Andy","Lee"};

		//数组大小
		int index=name.length;

		//第二个空间存放的名字
		System.out.println("第二个空间存放的名字 "+name[1]);

		//第一个空间改为Tom
		name[0]="Tom";

		//遍历当前数组所有内容
		for(int i=0;i<index;i++){
			System.out.println("第"+i+"个空间存放的名字"+name[i]);
		}

		for(String str:name){
			System.out.println(str);
		}


	}
}

Exce2

public class Exec2{
	public static void main(String[] args){

		int[] data={10,60,23,100,78};
		int index=data.length;

		//全班总分
		int sum=0;
		for(int i=0;i<index;i++){
			sum+=data[i];
		}
		System.out.println("总分"+sum);

		sum=0;
		for(int i:data){
			sum+=i;
		}
		System.out.println("foreach总分"+sum);

		//打印不及格的分数
		for(int i=0;i<index;i++){
			if(data[i]<60){
				System.out.println("不及格的分数"+data[i]);
			}
		}

		//打印>=平均分的分数
		int average=sum/data.length;
		System.out.println("平均分"+average);
		for(int i=0;i<index;i++){
			if(data[i]>=average){
				System.out.println(">=平均分"+data[i]);
			}
		}


		//统计几个人低于平均分
		int count=0;
		for(int i=0;i<index;i++){
			if(data[i]<average){
				count++;
			}
		}
		System.out.println(count+"个人低于平均分");

	}
}

Exce3

import java.util.*;
public class Exec3{
	public static void main(String[] args){
		char[] data={99,'a','A','z',70};
		int index=data.length;
		System.out.println(Arrays.toString(data));

		//获取空间的内容
		for(char message:data){
			System.out.print(message+" " );
		}
		System.out.println();

		//统计大写字母
		int count=0;
		for(char message:data){
			if(message>='A'&&message<='Z'){
				count++;
			}
		}
		System.out.println("大写字母有:"+count+"个");

		//打印所有的小写字母
		for(char message:data){
			if(message>='a'&&message<='z'){
				System.out.println("小写字母有:"+message);
			}
		}
		//打印所有大写字母的下标
		for(int i=0;i<index;i++){
			if(data[i]>='A'&&data[i]<='Z'){
				System.out.print("大写字母"+data[i]+"下标"+i+"   ");
			}
		}
		System.out.println();


	}
}

总结:

数组的创建:给出维数||给定初始化内容

for+下标时 使用 for循环

普通遍历就使用foreach

只要...就 一般使用 while

二.数组复制

数组复制

System.arraycopy(1,2,3,4,5);

1:要复制的老数组对象

2:要复制的老数组的起始位置

3:要到的新数组对象

4:要复制到新数组的起始位置

5:复制的个数

import java.util.*;
public class TestArrayCopy1{
	public static void main(String[] args){
		int[] data={45,66,23,78};

		//新开辟空间大小 data.length+1
		int[] temp=new int[data.length+1];
		temp[data.length]=787;

		System.arraycopy(data,0,temp,0,data.length);

		System.out.println(Arrays.toString(data));
		System.out.println(Arrays.toString(temp));
	}
}

 

实例:

import java.util.*;
//import java.util.*;
public class Exec6{
	public static void main(String[] args){
		int[] data={45,66,23,78};
		//45 66  插入90
		//45 90 66 23 78
		//1.开辟空间
		int[] temp=new int[data.length+1];
		//2.复制data中的第一个元素-->temp
		//[45][0][0][0][0]
		System.arraycopy(data,0,temp,0,1);

		//3.将data中剩余元素移动到temp中
		System.arraycopy(data,1,temp,2,3);
		//4.给第二个空间赋值90
		temp[1]=90;
		System.out.println(Arrays.toString(temp));
	}
}

 数组可以通过 System.arraycopy(1,2,3,4,5); 和Arrays.copyOf(1,2) 进行数组移动删除

import java.util.*;
public class TestArrayCopy2{
	public static void main(String[] args){
		int[] data={45,66,23,78};
		//			 0  1  2  3
		//删除66
		//45 23 78
		//45,23,78,78
		System.arraycopy(data,2,data,1,2);
		//做到了删除元素66下面
		data=Arrays.copyOf(data,data.length-1);
		System.out.println(Arrays.toString(data));
		//45 23 78
		System.out.println(data.length);
		//3
	}
}

三.数组排序 

冒泡排序 无需多言

根据个位数的大小进行排序哦 

import java.util.*;
public class Exec07{
	public static void main(String[] args){
		int[] data={45,28,90,89,10};
		for(int i=0;i<data.length-1;i++){
			for(int j=0;j<data.length-1-i;j++){
				if((data[j]%10)>(data[j+1]%10)){
					int temp=data[j];
					data[j]=data[j+1];
					data[j+1]=temp;
				}
			}
		}
		System.out.println(Arrays.toString(data));
	}
}

import java.util.*;
public class TestArraySort1{
	public static void main(String[] args){
		//45 28 90 89  10
		int[] data={45,28,90,89,10};
		for(int i=0;i<data.length-1;i++){// -1是为了解决越界问题
			for(int j=0;j<data.length-1-i;j++){// -i是为了提高效率
				if(data[j]>data[j+1]){
					int temp=data[j];
					data[j]=data[j+1];
					data[j+1]=temp;
				}
			}
		}
		System.out.println(Arrays.toString(data));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值