数组及简单的应用

数组

  • 存放一种类型的长度不可变的数据的集合
  • 数组的类型可以是基本类型也可以是引用类型
  • 数组是有长度的,长度是指这个数组可以存几个值,长度从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);
		
	}


}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大黑翔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值