初识数组
为什么需要数组
Java考试结束后,老师给张浩分配了一项任务,
让他计算全班(30人)Java课程考试的平均分
int stu1 = 95
int stu2 = 89
int stu3 = 79
int stu4 = 64
int stu5 = 76
int stu6 = 88
30个变量
太繁琐
不利于数据处理
......
avg = stu1+stu2+stu3+stu4+stu5...+stu30)/30:
数组是一个变量,存储相同数据类型的一组数据
声明个变量就是在内存空间划出-块合适的空间
声明一个数组就是在内存空间划出一串连续的空间
什么是数组
数组是一个变量,存储相同数据类型的一组数据
数组基本要素
标识符
数组元素
元素下标:从0开始
元素类型
数组长度固定不变,避免数组越界
数组中的所有元素必须属于相同的数据类型
总结
数组
在内存空间划出一串连续的空间
数组基本要素
标识符:驼峰命名规则
数组元素
元素下表:从0开始,数组中的每个元素都可以通过下标来访问
元素下标元素类型:数组中所有元素相同数据类型
数组的使用
如何使用数组
使用数组四步走
1.声明数组 int[ ] a;
2.分配空间 a = new int[5];
3.赋值 a [0]= 8;
4.处理数据 a [0] = a[0] * 10;
声明数组
声明数组:告诉计算机数据类型是什么
int[ ] score1;//Java成绩
int score2[ ];//Python成绩
String[ ]name;//学生姓名
语法
数据类型 数组名[];
数据类型[] 数组名;
声明数组时不规定数组长度
分配空间
分配空间: 告诉计算机分配几个连续的空间
scores = new int[30l;
avgAge = new int[6];
name = new String[30];
声明数组并分配空间语法
数据类型[] 数组名 = new 数据类型[大小];
数组元素根据类型不同,有不同的初始值
数组赋值
方法1:边声明边赋值
int[ ] scores = {89, 79, 76};
int[ ] scores = new int[]{89, 79,76};不能指定数组长度
方法2:动态地从键盘录入信息并赋值
Scanner input = new Scanner(System.in);
for(inti= 0;i< 30;i++)
scoresli] = input.nextlnt():
}
案例
//计算张浩班级30人Java平均分
import java.util.Scanner;
//记录张浩班30个同学的成绩
double[] scores = new double[30];
double avg = 0; //平均分
double sum = 0; //同学的成绩总分数
Scanner input = new Scanner(System.in);
//使用传统for为数组元素赋值
//使用for循环来遍历数组的元素下标:下标0-数组长度-1
for(int i=0;i<scores.length;i++){
System.out.print("请输入第"+(i+1)+"个同学的Java成绩:");
scores[i] = input.nextDouble();
}
//使用增强型for(foreach):迭代为数组元素操作
for(double score:scores){ //double score = scores[0];double score = scores[1];....
sum+=score;
}
avg = sum / scores.length;
System.out.println("张浩班级同学的Java平均分为:"+avg);
总结
数组使用四步
声明数组
分配空间
赋值
处理数据
数组使用常见错误
常见错误1
public class ErrorDemo1{
public static void main(String[]args){
int[] score -(new int[];
score[0] = 89;
score[1] = 63;
System.out.println(score[o]);
}
}
编译出错,没有写明数组的大小
常见错误2
int[ ] scores = new int[2];
scores[0] = 90;
scores[1] = 85;
scores[2] = 65;
System.out.println(scores[2]);
编译错误,数组越界
常见错误3
int[ ] score = new int[5]
;score = {60, 80, 90, 70, 85};
int[ ] score2;
score2 ={60, 80, 90, 70, 85);
编译出错,创建数组并赋值的方式必须在一条语句中完成
常见错误3
public class ErrorDemo1 {
public static void main(String[ ] args){
int[ ]scores = new int[6];
forint score:scores){
score=9;
}
System.out.println(scores[0]);
}
}
foreach是用来遍历数组的,不能用来对数组赋值
总结
数组与内存的存放关系,助于加深数组使用的认识
数组常见错误不止讲解过的几种,养成积累错误、记录解决方案的好习惯
数组使用练习
有一个数列:8,4,2,1,23,344,12
循环输出数列的值
求数列中所有数值的和
猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数
//猜数游戏
//声明数组存储数据
int[] list = new int[]{8,4,2,1,23,344,12};
//循环输出数组元素的值,并求和
int sum = 0; //总和
for(int num : list){
System.out.println(num);
sum += num;
}
System.out.println("数组元素总和为:"+sum);
//猜数
Scanner input = new Scanner(System.in);
System.out.print("请输入您要猜测的数字:");
int guess = input.nextInt();
//猜测结果
boolean isCorrect = false;
for(int num : list){
if(num == guess){
//猜测正确
isCorrect = true;
break;
}
}
if(isCorrect){
System.out.println("恭喜您,您猜的数字在数列中存在!");
}else{
System.out.println("对不起,您猜的数字不在数列中!");
}
数组存储5笔购物金额,在控制台输出并计算总金额
//购物金额结算
Scanner input = new Scanner(System.in);
System.out.println("请输入会员本月的消费记录");
//list记录用户的5笔消费金额
double[] list = new double[5];
for(int i=0;i<list.length;i++){
System.out.print("请输入第"+(i+1)+"笔会员的消费金额:");
list[i]=input.nextDouble();
}
//输出购物金额及总金额
double sum = 0; //总金额
System.out.println("序号\t\t金额(元)");
for(int i=0;i<list.length;i++){
System.out.println((i+1)+"\t\t"+list[i]);
sum += list[i];
}
System.out.println("总金额\t\t"+sum);
总结
数组可结合循环等内容使用
数组的使用可通过程序调试加深理解
数组的使用贵在练习、多敲多练
求数组的最值
从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分
根据打捷台的规则
max = stul[0] ;
if (stu[1]>max ){
max=stu [1] ;
}
if (stu[2]>max ){
max=stu [2] ;
}
if (stu[3]>max ){
max=stu [3] ;
}
使用循环解决
//获取五位学生Java考试最高分
//学生考试成绩数组的声明及赋值
int[] scores = new int[5];
Scanner input = new Scanner(System.in);
for(int i = 0;i<scores.length;i++){
System.out.print("请输入第"+(i+1)+"个同学的考试成绩:");
scores[i] = input.nextInt();
}
//求数组中的最大值
int max = scores[0];
for(int i = 1;i<scores.length;i++){
if(scores[i]>max){
max = scores[i];
}
}
System.out.println("此次考试成绩最高分为:"+max);
求出4家店的最低手机价格
步骤
1.定义数组存储价格,并利用循环输入
2定义变量min保存当前的最低价
3将min和数组中的其余元素依次比较
//获取4家店的最低手机价格
//手机价格数组的声明及赋值
double[] prices = new double[4];
Scanner input = new Scanner(System.in);
for(int i = 0;i<prices.length;i++){
System.out.print("请输入第"+(i+1)+"家店的手机价格:");
prices[i] = input.nextDouble();
}
//求数组中的最小值
double min = prices[0];
for(int i = 1;i<prices.length;i++){
if(prices[i]<min){
min = prices[i];
}
}
System.out.println("4个手机店铺最低价格为:"+min);
数组中插入元素
有一组学员的成绩199,85,82,63,601,
将它们按降序排列要增加一个学员的成绩,将它插入成绩序列,并保持降序
分析
将成绩保存在数组中
通过比较找到插入位置
该位置元素往后移一位
插入新成绩
//在已知降序的数组正确位置插入一个特定数字
//通过数组存储原来的5个成绩
//数组长度是固定的,一旦定义无法修改
//int[] list = {99,85,82,63,60};
int[] list = new int[6];
list[0] = 99;
list[1] = 85;
list[2] = 82;
list[3] = 63;
list[4] = 60;
//获取用户要插入的数值
Scanner input = new Scanner(System.in);
System.out.print("请输入您要插入的数值:");
int num = input.nextInt();
//找到num要插入的位置index:找到num比数组中元素(第一个)大的位置
//当用户插入一个比原数组所有数都小的数值时,如下代码就有问题:
//int index= 0;
//课下思考:如果index = -1有什么问题?提示:程序调试,下标越界
int index = list.length-1;
for(int i=0;i<list.length;i++){
if(num>list[i]){
index = i;
break;
}
}
//原index位置及以后的所有数据要整体往后挪
for(int i=list.length-1;i>index;i--){
list[i]=list[i-1]; //当list.length-1:5 list[5]=list[4]以此类推
}
//在index位置将num插入进来
list[index] = num;
System.out.println("插入成绩的下标是:"+index);
System.out.println("插入数值后的最后成绩是:");
for(int listNum :list){
System.out.print(listNum+"\t");
}
总结
数组有何作用?
使用数组有哪些步骤?
如何遍历一个数组?
简述求数组最大值的实现思路是怎样的?
简述如何在一个特定排序的数组中插入特定元素?