- 存放一种类型的长度不可变的数据的集合
- 数组的类型可以是基本类型也可以是引用类型
- 数组是有长度的,长度是指这个数组可以存几个值,长度从1开始
- 数组是有下标的,下标是用来操作存取数组中的值,表示数组中元素的位置,下标从0开始,最大值都是长度-1
- 数组一旦定义了长度,就不能再改变了,数组的长度是固定的
- 数组在创建的时候就已经有了初始值,初始值是根据数据类型来决定的(int为0,String为null)
- 通过下标来操作数组(存取值),下标从0开始,到长度-1结束
- 数据类型 变量名[]
- 数据类型 [] 变量名
- String args[]
- 例如
- 二维数组的声明
- 类型[] 变量名 []
- 类型 [] [] 变量名
- 类型 变量名[] []
- 初始化:多维数组的第一维元素可以是任意长度的数组
new 类型 [数组长度]
new String[数组长度] {元素列表}
//元素类表必须是连续且有值的
//在[]中不能强制规范数组的长度,{}中的元素想多长就多长
//{元素列表}必须在声明时进行
例://此方法多用于数组里面的内容已经定了
int [] array= new int []{1,2,3};
System.out.println(array[0]);
//此时输出的值为1
数据类型[] 数组名 = new 数据类型[数组长度];
数据类型 数组名[] = new 数据类型[数组长度];
例//用于长度确定了,内容不确定,[]中必须确定长度
int[] arr=new int[5];//创建了一个长度为5的整数类型的数组
arr[0]=12;//向下标为0的空间存值
arr[1]=5;//向下标为1的空间存值
String[] arr = new String[10];//创建了一个长度为10的字符串类型的数值
-
- 下标是用于表示空间中的某一个元素,下标从0开始,下标用于数组的元素标记
//取值
int [] array= new int []{1,2,3};
System.out.println(array[0]);
//输出为1
arr[0]=12;//向下标为0的空间存值
arr[1]=5;//向下标为1的空间存值
int int[] score=new int[] {99,88,77,66,55,0};
score[score.length-1]=90;
//双重for循环实现数组的排列
//外层循环控制比较的是基轮
for(int i=0;i<score.length-1;i++){
//控制每轮控制的次数
for(int j=0;j<score.length-1-i;j++){
//判断
//score[j] score[j+1]
if(score[j]>score[j+1]){
//交换位置
int temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(score));
- 如果下标超过数组的长度就会抛出:Array Index Out Of Bounds Exception:X
- 如果最后一个元素的下标一定是数组的长度-1
- 数组的长度用length属性进行获取
-
数组的扩容
-
int [] score = {99,88,77,66,55};
int num=90;
//手动为数组扩容
int[] score2=new int[score.length+1];
for(int i=1;i<score.length;i++){
score2[i]=score[i];//先取出score数组中的值,然后将这个值赋score2中
}
//将score2的数组以字符串的方式进行展示
System.out.println(Arrays.toString(score2));
-
- 每次比较相邻的数,小的交换到前面,每轮结束后最大的数交换到最后
- N个数字来排队,两两相比小靠前,外层循环n-1(数组的长度),内层循环n-1-i;
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array=new int[]{88,77,93,76};
System.out.println("请随机输入一个值,如果数列中包含这个数,您就中奖了,否则谢谢光临");
//for-each循环遍历出array数组中所有的值
Scanner scanner=new Scanner(System.in);
int input=scanner.nextInt();
int sum = 0;
System.out.println("数列中值为");
for(int i:array){
System.out.println(i);
sum+=i;
}
int average=sum/array.length;
System.out.println("数列的平均值为:"+average);
if(input==array[0]||input==array[1]||input==array[2]||input==array[3]) {
System.out.println("恭喜你答对了");
}else {
System.out.println("谢谢光临");
}
}
数组的另一种遍历方法
for(int i=0;i<array.length;i++) {
System.out.println(array[i]);
}
import java.util.Scanner;
public class Test01 {
//有一个数列,循环输出数列的值,(使用for foreach来实现)求数列的平均值
//猜数字游戏,从键盘任意输入一个数字,判断数列中是否包含这个数
//如果包含就打印恭喜你猜对了,如果没有就打印谢谢光临,使用for循环来实现
public static void main(String[] args) {
// 定义一个数组
int[] array=new int[]{8,4,2,1,23,344,12};
//使用scanner获取用户输入的数字
System.out.println("请输入任意一个值:");
Scanner scanner= new Scanner(System.in);
int input=scanner.nextInt();
//定义一个值用于存放数列中所有值的和
int sum=0;
System.out.println("数组中的数值为");
//使用for循环遍历出数组中的值,并获取数组中值的和
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
sum+=array[i];
}
//打印出数组中值的平均值
int average=sum/array.length;
System.out.println("数组中的平均值为:"+average);
//判断输入的数是否符合中奖标准
for(int i=0;i<array.length;i++){
if(input==array[i]){
System.out.println("恭喜你,中奖了");
break;
}
if(input!=array[i]){
System.out.println("感谢参与,您未中奖啊");
break;
}
}
}
}
import java.util.Scanner;
public class Test02 {
//使用键盘输入本次java考试同学的成绩,可以定义有几人并输入几次,并打印考试成绩的最高分
public static void main(String[] args) {
//使用Scanner请用户输入本次考试有几位学生
System.out.print("本次参加考试的考生人数为:");
Scanner scanner = new Scanner(System.in);
int studentNumber=scanner.nextInt();
//输入考生成绩
System.out.println("请输入考生成绩:");
//使用for循环,将输入的成绩存入数组中,并进行比较
int [] array=new int[studentNumber];
int maxNumber=0;
for(int i=0;i<studentNumber;i++){
//将键盘输入的考生成绩存入数组中
array[i]=scanner.nextInt();
//将数组中的值与maxNumber进行比较,取出最大值
if(array[i]>maxNumber){
maxNumber=array[i];
}
}
System.out.println("本次成绩的最高分为:"+maxNumber);
}
}
import java.util.Scanner;
public class Test03 {
//将一组学员的成绩{99,85,82,63,60},将他们按照降序排列,要增加一个学员的成绩
//并将它插入序列,并保持降序
public static void main(String[] args) {
//要确保插入数据有位置,必须数组长度多一位,所以定义数组的时候,必须要多一个长度
int[] nums=new int[6];
nums[0]=99;
nums[1]=85;
nums[2]=82;
nums[3]=63;
nums[4]=60;
//使用Scanner用户输入插入数据
Scanner input=new Scanner(System.in);
System.out.print("请输入新增的成绩:");
int score=input.nextInt();
//拿用户输入的数据和原来数组中的数据去比较
//找到要插入的位置,下标,第一次比别人大
//下标初始值,可以随意,它在后面也还是会被赋值的,所以这里只是为了不报错给个初始值,除数组下标0到5以外,都可以
int index=-1;
for(int i=0;i<nums.length;i++){
if(score>nums[i]){
index=i;
break;//只要查找到第一次找到比输入值小的,就可以了,所以用break来结束for循环
}
}
System.out.println("插入成绩的下标是:"+index);
//因为上面定义的num[5]也就是第6个位置没有被使用,是空的,那么我们要把num[4]移动到num[5]上来,依此类推,在index位置处后面的依次都要向右移一位
for(int i=nums.length-1;i>0;i--){
if(index==i){//只移从插入那个坐标开始以及后面的数据
break;
}
nums[i]=nums[i-1];//把前一位赋值给后一位
}
nums[index]=score;//把输入的值赋给index坐标的位置
//使用增强型循环数组输出数组
for(int num:nums){
System.out.print(num+"\t");
}
}
}
import java.util.Scanner;
public class Test04 {
//输入4家店的手机的最低价格
public static void main(String[] args) {
//创建一个数组用来存放4家店的手机价格
int[] scores=new int[4];
System.out.println("请输入4家店的价格");
Scanner input = new Scanner(System.in);
//循环输出4家店的价格
int min=100000;//定义一个值与数组中的值进行比较,用于下面比较出最小值
for(int i =0;i<scores.length;i++){
System.out.print("第"+(i+1)+"家店的价格:");
scores[i]=input.nextInt();
//比较数组中的值并输出最小值
if(scores[i]<min) {
min=scores[i];
}
}
System.out.println("最低价格为:"+min);
}
}