目录
一、数组的快速入门和使用
定义:
数组:是一种引用数据类型,顾名思义就是一组数据,一组同一类型的数据
引出数组的使用:
问题:
一个有 养鸡场有 6 只鸡,它们的体重分别是
3kg,5kg,1kg,3.4kg,2kg,50kg 。
请问这六只鸡的总体重是多少?平均体重是多少?
传统方法:逐个定义六个变量,然后相加求和再/6求平均数
缺点:死板,浪费时间,如果是几百个数据也要一一定义
解决方法:用数组来解决问题
1.定义一个数组 double[] hens = {3, 5, 1, 3.4, 2, 50,4.5};
double[]表示是double类型的数组 数组名:hens
2. {3, 5, 1, 3.4, 2, 50}依次表示数组的值/元素
3.遍历数组得到数组的所有元素的和,使用for循环
注意事项:
1.我们可以通过hens[下标]来访问数组的元素,下标是从0开始编号的(!!),第一个元素就是hens[0],第二个元素是hens[2];以此类推,所以for循环中循环变量初始化 i=0;
2.通过for就可以循环的访问数组的元素
3.使用一个变量 totalWeight 将各个元素累积
public class ArrayTest{
public static void main(String[] args){
double[] hens = {3, 5, 1, 3.4, 2, 50};
double totalWeight = 0;
for(int i = 0; i < 6; i++){
System.out.println("第" + i + "只鸡的重量是" + hens[i]);
totalWeight += hens[i];
}
System.out.println("6只鸡的重量是" + totalWeight + "平均体重是" + (totalWeight / 6));
}
}
数组的长度:
数组名.length;
作用:可以判断出数组内有多少个数据
比如:
public class Array01{
//编写一个main方法
public static void main(String[] args){
平均体重=" + avgWeight);
double[] hens = {3, 5, 1, 3.4, 2, 50,4.5};//定义一个数组
double totalWeight = 0;
for(int i = 0; i < 7; i++){//因为数组的下标是从0开始编号,所以初始循环变量必须是 i = 0;
System.out.println("第" + (i+1) + "个元素的值=" + hens[i]);
totalWeight += hens[i];
}
System.out.println("一共有" + hens.length + "组数据");
System.out.println("总体重=" + totalWeight);
System.out.println("平均体重=" + (totalWeight/7));
}
}
运行结果:
进一步优化:
把7全都替换成hens.length
二、数组使用方式
一、动态初始化
第一种动态分配方式
数据类型 数组名[] = new 数据类型[大小]
书写方式有两种:第一种: 数据类型[] 数组名,例如int[] a ;第二种:数据类型 数组名[],比如int a [ ]
import java.util.Scanner;
public class Array02{
//编写一个main方法
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double scores[] = new double[5];//定义一个double型数组,这个数组有5个数
//循环输入
for(int i = 0; i < scores.length; i++){
System.out.println("请输入数组的第" + (i+1) + "个元素");
scores[i] = input.nextDouble();//通过for循环依次输入此数组内的五个元素
}
//输出、遍历数组
for(int i = 0; i < scores.length; i++){
System.out.println("数组的第" + (i+1) + "个元素的值=" + scores[i]);
}
}
}
第二种动态分配方式
先声明数组,再new
int a[] ;是一个空值,还没有真正的被分配存储空间
a = new int[5];被分配了内存空间,可以存放数据
二、静态初始化
直接写出所有元素的值 eg: int[] = {56,67,89,78,89};
适用于所有元素的值都已经确定了
三、数组使用细节(复习string和基本数据类型转换)
1)数组是多个相同类型数据的组合,实现对这些数据的统一管理
2)数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
3)数组创建后,如果没有赋值,有默认值 整数型的四个byte、 short、 int、 long的是 0;小数型float 、double是 0.0;布尔型boolean是false;字符型char是\u000; 字符串String是null
4) 使用数组的步骤 1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组(前面已经讲过)
5) 数组的从 下标是从 0 开始的。(重要!!!)
6) 数组下标必须在指定范围内使用,否则报:下标越界异常,double[] nums = new double[10];有效下标是0-9;
7) 数组属引用类型,数组型数据是对象(object)(???)//第七章会讲对象
四、练习
第一题:1) 创建一个 char 类型的 26 个元素的数组,分别 放置'A'-'Z'。使用 for 循环访问所有元素并打印出来。
我的思路:1)定义一个有26个元素的char类型的数组
2)char[0] = 'A'; char[1] = 'B'('A'+1);以此类推,需要使用for循环
代码
char[] arr = new char[26];
for(int i = 0; i < arr.length; i++){
arr[0] = 'A';
arr[i] = (char)(arr[i]+1);
}
此代码的执行流程
1)i=0; arr[0] = 'A';arr[0] = 'B';
2)i=1; arr[0] = 'A';arr[1] =(char)(arr[1]+1);//打印结果是□,是无效的
以此类推后面都是这种□
改正
arr[0]=(char)('A'+0)//'A'+0是int型数据,arr[]是数组,但是arr[0]是char类型,所以需要强制类型转换
arr[1]=(char)('A'+1)//B
arr[2]=(char)('A'+2)//C
...
arr[25]=(char)('A'+25)//Z
代码
public class ArrayExercise01{
//编写一个main方法
public static void main(String[] args){
//1) 创建一个 char 类型的 26 个元素的数组,分别 放置'A'-'Z'。
//使用 for 循环访问所有元素并打印出来。提示:char 类型
//数据运算 'A'+2 -> 'C'
char[] arr = new char[26];
for(int i = 0; i < arr.length; i++){
arr[i] = (char)('A'+i);
System.out.print(arr[i] + " ");
}
}
}
第二题: 请求出一个数组 int[]的最大值 {4,-1,9, 10,23},并得到对应的下标。
代码
public class ArrayExercise02{
//编写一个main方法
public static void main(String[] args){
//请求出一个数组 int[]的最大值 {4,-1,9, 10,23},并得到对应的下标
int[] arr = {4, -1, 9, 10, 23, 78, 3, 90};
int max = arr[0];
int maxIndex = 0;
for (int i = 1; i < arr.length; i++){
if(arr[i] > max){
max = arr[i];
maxIndex = i;
}
}
System.out.print("次数组的最大值是" + max + " 对应的下标是" + maxIndex);
}
}