JAVA 数组

1.1数组概述
数组的概念:用来保存一组具有相同数据类型的数据的一种存储结构。
注意:数组也是一种数据类型,数组类型,属于引用数据类型
数组的定义语法:
1、数据类型[] 数组名=new 数据类型[数组中存储数据个数];-----推荐使用该语法
2、数据类型 数组名[]=new 数据类型[数组中存储数据个数];
获取数组的长度:数组名.length
获取数组元素:

3、数据类型[] 数组名={值1,值2,…值n};
4、数据类型[] 数组名=new 数据类型[]{值1,值2,…值n};
原因:举例:需要大家帮我保存30个学生的成绩,打印一张成绩单,并计算班级平均分
1.2数组定义方式
案例一:
public class Demo1{
Public static void main(String[] args){
/int score1=78;
int score2=89;
int score3=90;

int score30=90;
/
//定义保存30个学生成绩的数组
int[] scores=new int[10];//数值类型的数组默认值每个位置填充0
// String[] names=new String[30];//默认填充值null
//任何变量遵循先声明再赋值再使用
//赋值(通过键盘动态赋值)
Scanner input = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.println(“请输入第”+(i+1)+“个成绩:”);
scores[i]=input.nextInt();
}
//常量赋值 适用测试功能用
// int[] score=new int[]{23,45,67};
//输出第四个同学的成绩
for (int i = 0; i <scores.length ; i++) {
System.out.println(scores[i]);
}
}
}
1.3数组元素的打印

1、求数组最大值
需求说明:使用数组和循环获取5位学员的成绩,使用int max;变量存储最大值。以课上讲解的“打擂台”的思路使用循环求出数组的最大值,并如图所示输出。

Public class Demo1{
Public static void main(String[] args){

int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println(“请输入五个学员的成绩:”);
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}
//在数组找出最大的成绩,第几个学生成绩最高
int max=scores[0];//默认第一个学生成绩最高
int idx=0;//保存最高分同学所在的位置
for (int i = 1; i < scores.length; i++) {
if(max<scores[i]){
max=scores[i];
idx=i;
}
}
System.out.println(“第”+(idx+1)+“位同学成绩最高,分数是:”+max);
}}
2、向数组中插入一个元素
需求说明:按照如下操作向数组中插入元素,实现效果如图所示:
(1)将成绩保存在数组中;
(2)通过比较找到插入位置;
(3)该位置元素往后移一位;
(4)插入新成绩;

思路:1、要添加新成绩的数组必须是有序
2、查找新添加元素的插入位置
3、将位置腾出来
4、腾出来的位置放入新元素
Public class Demo1{
Public static void main(String[] args){
//直接存入有序的数据 长度4,最大的下标3
int[] scores_old={34,67,98,100};
//向scores数组中添加一个新成绩
int newScore=88;
//数组特征:长度固定,不能超过数组声明长度
//复制数组
int[] scores_new = Arrays.copyOf(scores_old, scores_old.length+1);
/*int[] scores_new=new int[scores_old.length+1];

	for (int i = 0; i < scores_old.length; i++) {
		scores_new[i]=scores_old[i];
	}*/
	
	//1.查找插入的合适的位置,比如保证原数组升序不变
	int idx=scores_new.length-1;//保存要添加元素的下标
	for (int i = 0; i < scores_new.length; i++) {
		if(newScore <scores_new[i]){
			idx=i;
			break;
		}
	}
	//挪动后面的元素
	for (int i = scores_new.length-1-1; i >=idx ; i--) {
		scores_new[i+1]=scores_new[i];
	}
	//在指定位置放入新成绩
	scores_new[idx]=newScore;
	
	System.out.println("插入新元素后的数据结果");
	for (int i = 0; i < scores_new.length; i++) {
		System.out.print(scores_new[i]+"\t");
	}

}
}

3、获取最低价手机价格
需求说明:按照如下步骤:
(1)定义数组存储价格,并利用循环输入;
(2)定义变量min保存当前的最低价;
(3)将min和数组中的其余元素依次比较;
求出4家店的最低手机价格,显示效果如下图所示。

Public class Demo1{
Public static void main(String[] args){

int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println(“请输入4家店的价格:”);
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}
//在数组找出最低价格
int min=scores[0];//默认第一个价格最低
int idx=0;//保存最低价格所在的位置
for (int i = 1; i < scores.length; i++) {
if(max<scores[i]){
max=scores[i];
idx=i;
}
}
System.out.println(“第”+(idx+1)+“家店的最低,价格是:”+max);
}
}
4、冒泡排序
需求说明:冒泡排序时注意以下关键点:
(1)5个数字如何存放:(数组,数组.length = 5)
(2)控制比较多少轮:(外层循环,循环变量 i)
(3)控制每轮比较多少次:(内层循环,循环变量 j)
(4)交换数据;
使用二重循环实现如图所示的冒泡排序。

Public class Demo1{
Public static void main(String[] args){

int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println(“请输入五个学员的成绩:”);
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}

	System.out.println("排序前的成绩:");
	for (int i = 0; i < scores.length; i++) {
		System.out.print(scores[i]+"\t");
	}
	//排序(冒泡排序)
	//原理:
	for (int i = 0; i < scores.length-1; i++) {
		for (int j = 0; j < scores.length-1-i; j++) {
			if(scores[j] > scores[j+1]){
				int temp =scores[j];
				scores[j]=scores[j+1];
				scores[j+1]=temp;
			}
		}
	}
	System.out.println();
	System.out.println("排序后");
	for (int i = 0; i < scores.length; i++) {
		System.out.print(scores[i]+"\t");
	}

}
}
5、冒泡排列学员成绩
需求说明:在作业4的基础上,使用冒泡排序对键盘输入的5名学员成绩进行降序排列,排列效果如图所示。

Public class Demo1{
Public static void main(String[] args){

int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println(“请输入五个学员的成绩:”);
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}

	System.out.println("排序前的成绩:");
	for (int i = 0; i < scores.length; i++) {
		System.out.print(scores[i]+"\t");
	}
	//排序(冒泡排序)
	//原理:
	for (int i = 0; i < scores.length-1; i++) {
		for (int j = 0; j < scores.length-1-i; j++) {
			if(scores[j] < scores[j+1]){
				int temp =scores[j];
				scores[j]=scores[j+1];
				scores[j+1]=temp;
			}
		}
	}
	System.out.println();
	System.out.println("排序后");
	for (int i = 0; i < scores.length; i++) {
		System.out.print(scores[i]+"\t");
	}

}
}

6、Arrays类排序数组
需求说明:正确使用Arrays的sort()方法为数组进行排序,效果如下图所示。降序排列的写法可以参考for(int i=scores.length-1;i>=0;i–){}

Public class Demo1{
Public static void main(String[] args){

int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println(“请输入五个学员的成绩:”);
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}

	System.out.println("排序前的成绩:");
	for (int i = 0; i < scores.length; i++) {
		System.out.print(scores[i]+"\t");
	}
		Arrays.sort(arr);
		System.out.println("学员成绩按照升序排序后的结果:");
	for (int num : arr) {
		System.out.print(num+"\t");
	     }
		System.out.println("学员成绩按照降序排序后的结果:");

for (int i =arr.length-1; i >=0; i–) {
System.out.print(arr[i]+"\t");
}
}
}

1.4冒泡排序
口诀:N个数据来排序,外层循环N-1,内层循环N-1-I
N:数组长度
1.5二维数组
二维数组概念:用来保存一组具有相同数据类型的数据
语法:
数据类型[][] 数组名=new 数据类型[行数][列数];
存储格式跟一维区别:
一维:
12
34
56
78
90
12
89

二维:输出格式嵌套for循环
Int[][] nums=new int[7][3];
Nums[0][0]=12;
Nums[0][1]=34;
Nums[0][2]=56;

12 34 56
23 46 89
45 90 89
67 98 89
89 98 98
22 98 98
78 98 98

For(int i=0;i<xx;i++){for(int j=0;j<xx;j++){sysout(“*”)}}
1、二维数组计算班级成绩
需求说明:根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩。在这个程序中二维数组的第一维是班级,第二维是各班级的学生,与之对应的双重循环中,外层循环i为班级,内层循环j为各班级的学生。(注意:二维数组实际上是一个一维数组,它的每个元素又是一个一维数组)
同学1 同学2 同学3
89 98 98
22 98 98
78 98 98
每个班的平均分 总分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值