Java——数组
认识数组
数组:是具有相同数据类型且按一定次序排列的一组变量的集合体。
数组元素:构成数组的每一个数据
数组下标:下标就是数组元素在数组中的位置。下标从0开始,依次累加1,也称为索引;
数组大小:数组中元素的个数,也称为数组的长度。
定义数组
Java中定义数组有两种语法格式:
数据类型 数组名[ ]; 或 数据类型[ ] 数组名;
int[] scores;
//或者
int scores[];
例如: String names[] 或 String[] names 推荐第二种方式
静态初始化数组
数据类型[] 变量名 = new 数据类型[]{元素1,元素2,元素3};
简化为:
数据类型[] 变量名 = {元素1,元素2,元素3};
String[] names = {"赵三", "李四", "王五"...};
System.out.println(names[1]);
注意:数组变量名中储存的是数组在内存中的地址,数组是一种引用类型。
动态初始化数组
为数组元素分配空间的语法格式:
数组名 = new 数据类型[数组长度];
scores = new int[5];
//定义数组和为数组分配内存,这两步可以合并在一起写。
int[] scores = new int[5];
数组在计算机中的基本原理:
int[] ages = {12,24,36}
首先,左边 int[] ages 表示定义了一个数组类型的变量,变量名叫ages
其次,右边 {12,24,36} 表示创建一个数组对象,你完全可以把它理解成一个能装数据的东西。这个对象在内存中会有一个地址值[I@4c873330 ,每次创建一个数组对象都会有不用的地址值。
然后,把右边的地址值 [I@4c873330 赋值给左边的ages变量
所以,ages变量就可以通过地址值,找到数组这个东西。
数组的元素访问
// 数组名可以找到数组对象的地址,再通过索引就可以定位到具体的元素了
数组名[索引] // 范围是[0,10)
int[] arr = {12, 24, 36}; // 静态初始化
// 1、访问数组的全部数据
System.out.println(arr[0]); // 12
System.out.println(arr[1]); // 24
System.out.println(arr[2]); // 36
// 2、修改数组中的数据
arr[0] = 66;
arr[2] = 100;
System.out.println(arr[0]); //66
System.out.println(arr[1]);
System.out.println(arr[2]); //100
数组的遍历
int[] ages = {12, 24, 36};
for (int i = 0; i < ages.length; i++) {
// i的取值 = 0, 1, 2
System.out.println(ages[i]);
}
使用增强for循环遍历数组
JDK1.5及其之后的版本中提供了增强for循环语句,实现了Iterable接口的类都可以使用增强for循环进行元素的迭代。增强for循环的语法规则如下:
for (元素类型 变量名 : 要迭代的对象) {
System.out.println(变量名);
}
int[] arr = {15, 9000, 10000, 20000, 9500, -5};
for (int e : arr) {
System.out.printn(e);
}
for (int i = 0; i < arr.length; i ++) {
System.out.printn(arr[i]);
}
for (;;) {
}
案例
案例1
使用数组实现斐波拉切数列
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//输出斐波拉切数列;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int n = sc.nextInt();
int[] feibo = new int[n];
if (n==1){
feibo[0] = 1;
} else if (n==2) {
feibo[0] = 1;
feibo[1] = 1;
}else {
feibo[0] = 1;
feibo[1] = 1;
for (int i =3;i<=n;i++){
feibo[i-1]=feibo[i-3]+feibo[i-2];
}
}
for (int i = 1;i<= feibo.length;i++){
System.out.println("第"+i+"个数字是"+feibo[i-1]);
}
}
}
案例二
某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分做选手得分
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
// 某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分做选手得分
Scanner sc = new Scanner(System.in);
double[] scores = new double[6];
double sum = 0;
double avg = 0;
for(int i=1;i<=6;i++){
System.out.println("第"+i+"个评委打分:");
double score = sc.nextDouble();
scores[i-1]=score;
}
for (int i = 0;i<scores.length;i++){
sum += scores[i];
}
avg = sum / scores.length;
System.out.println("该选手的得分是:"+avg);
}
}
案例三
创建长度为10的int型数组,初始值为1、2、3、4、5、6、7、 8、9、10,按照下列规则更新数组中每一个元素的值:
a)数组的第n位元素 =数组的第n-1位元素*数组的第n位元素 * 数组的第n+1位元素
b)如果n = o,则数组的第n-1位元素的值按1计算。
c)如果n = 9,则数组的第n+1位元素的值按1计算。
更新后输出数组元素值应为:2,6,24,60,120,210, 336,504,720,90
public class Demo03 {
public static void main(String[] args) {
//创建长度为10的int型数组,初始值为1、2、3、4、5、6、7、 8、9、10,按照下列规则更新数组中每一个元素的值:
// a)数组的第n位元素 =数组的第n-1位元素*数组的第n位元素 * 数组的第n+1位元素
// b)如果n = o,则数组的第n-1位元素的值按1计算。
// c)如果n = 9,则数组的第n+1位元素的值按1计算。
//更新后输出数组元素值应为:2,6,24,60,120,210, 336,504,720,90
int[] array = {1,2,3,4,5,6,7,8,9,10};
int[] array1=new int[10];
for (int i = 0;i<array.length;i++){
if (i == 0){
array1[i]=1*array[i]*array[i+1];
}else if (i==9){
array1[i]=array[i-1]*array[i]*1;
}else {
array1[i]=array[i-1]*array[i]*array[i+1];
}
System.out.println(array1[i]);
}
}
}
案例四
求最小值
public class Test01 {
public static void main(String[] args) {
// 定义一个含有五个元素的数组,并为每个元素赋值,求数组中所有元素的最小值
//1.定义5个元素数组
//2.可以使用初始化数组的两种方式之一为数组元素赋值
//3.遍历数组求数组中的最小值
int[] arr = {14,23,13,43,24};
int min = 14;
for(int i=1;i<arr.length;i++){
if (arr[i]<min) {
min = arr[i];
}
}
System.out.println(min);
}
}