day 05 数组

1.数组

1.1 数组特点

 A 数组中的数据类型要一致,可以是基本数据类型,也可以是引用数据类型
 B 数组下标从0开始,一直到n-1结束

1.2 数组声明

 int[]  array; //声明一个整型数组,数组名叫array;
 int    array[]; //声明一个整型变量,变量为数组,数组名为array;

1.3 数组的创建与初始化

  1.动态初始化---只确定数组长度,不确定数组元素
  
	int[] array=new int[n]; //n表示数组中元素的个数,确定了数组元素个数,可以不放满,

  2.静态初始化---确定所有数组元素,由Java自己确定长度
  
    int[] array={1,2,34,56,7,8}; // 用确定的集合初始化数组
    int[] array=new int[]{1,2,34,5,7}; //用具体的集合初始化数组,确定了全部具体的数组元素,已经放满了

1.4 数组注意事项

	1.⽆论是哪⼀种创建的⽅式都需要指明数组的⻓度,⽆论是显式的还是隐式的
	2.数组的⻓度⼀旦定义了,固定不变
	3.数组属于引⽤数据类型
	4.数组中元素必须是同⼀种数据类型

1.5 数组数据类型的默认值

整数型:int 类型默认值为 0;
浮点型:float double 类型默认值为0.0;
布尔型:boolean 默认值为false;
字符型:char类型默认值为十六进制数  '\u0000' ;
引用型:所有的引用数据类型默认为null;

1.6 数组的常见操作

 1.给数组中的元素赋值
   
   	array[2]=33;
   	
 2.获取数组长度
   	
   	int length=array.length;
   	
 3.查看数组中的每一个元素
 
  	3.1 直接输出
	  	System.out.println(array[0]);
        System.out.println(array[1]);
        System.out.println(array[2]);
        
    3.2  for循环
 	  for(int i=0;i<array.length;i++){
    	System.out.println(array[i]);
	  }

1.7 数组测试使用

//创建大小在10~20之间的数组,用0到100之间的数据填充数组,输出结果

	public class ArrayTest {
	    public static void main(String[] args) {
	        Random random=new Random();
	        //10到20之间的数,包含20
	        int count=(int)(random.nextDouble()*(21-10)+10);
	        int[] array5=new int[count];
	        for(int i=0;i<array5.length;i++){
	        //每赋值一次,获取一次随机数,保证数据元素不完全相同
	            int num=random.nextInt(100);
	            array5[i]=num;
	        }
	        System.out.println(Arrays.toString(array5));
	    }
	}

1.8 数组的内存模型

 1.先声明数组,声明的数组在栈内存中开辟一块区域,默认值为null;
 2.初始化数组,new方法在堆内存中开辟一块区域,给区域中的每个元素赋值,将这块区域的首地址传递给数组变量;

在这里插入图片描述
1.9 数组的遍历

 //求数组中的最大值
 
 public class ArrayMaxValue {
    public static void main(String[] args) {
        int[] array=new int[]{1,3,6,4,7,234,7685,23,38,87,3};
        //定义一个变量,存放最大值
        int max=array[0];
        //默认第一个元素最大,直接从第二个元素比起
        for(int i=1;i<array.length;i++){
            //定义一个变量,存放当前正在遍历的数组元素
            int temp=array[i];
            if(max<temp){
                //将较大值赋值给max
                max=temp;
            }
        }
        System.out.println(max);
    }
}

	//10到20个成绩,求最大最小
public class StudentScoreMinAndMax {
    public static void main(String[] args) {
        Random random=new Random();
        int  count=random.nextInt(10)+10;
        Scanner scanner=new Scanner(System.in);
        double[] array=new double[count];

        for (int i=0;i<count;i++){
        System.out.println("请输入学生成绩:");
        double score=scanner.nextDouble();
        array[i]=score;
    }
    System.out.println(Arrays.toString(array));
    //将赋值之后的第一个元素赋值给变量
    double min=array[0];
    double max=array[0];
    for(int j=0;j<array.length;j++){
        if(max<array[j]){
            max=array[j];
        }
        if(min>array[j]){
            min=array[j];
        }
    }
    System.out.println("最小值是:"+min);
    System.out.println("最大值是:"+max);
    scanner.close();
    }
}

1.10 反转数组

 1.使用左右计数的方式,一直循环,当进行到中间时,停止循环
 
 public class ArrayTurnAroundDemo {
    public static void main(String[] args) {
	        int[] array=new int[]{12,4,6,7,2,76,45,2,782,3};
	        
	 A:   ***int left=0;
        	int right=array.length;
           for(int i=0;i<array.length;i++){
		            int temp=array[i];
		            array[i]= array[array.length-i-1];
		            array[array.length-i-1]=temp;
		            left++;
		            right--;
		            if(left>right){
		                break;
        }***
        
     B:int minValue=0;
        int maxValue=array.length-1;
        while ((minValue<=maxValue)){
            int temp=array[minValue];
            array[minValue]=array[maxValue];
            array[maxValue]=temp;
            minValue++;
            maxValue--;
        }
        System.out.println(array.length);
        System.out.println(Arrays.toString(array));
        }
    }
}
2.使用分割数组的方式,将数组分割成前后两部分,只循环前一部分,当循环到中间元素时,停止循环
	
public class ArrayTurnAroundDemo {
    public static void main(String[] args) {
        int[] array=new int[]{12,4,6,7,2,76,45,2,782,3};
     	for(int i=0;i<array.length/2;i++){
	         int temp=array[i];
	         array[i]=array[array.length-1-i];
	         array[array.length-1-i]=temp;
     }
        System.out.println(Arrays.toString(array));
    }
}

1.11 查询数组中某个值第一次出现的位置

public class ArrayNumberFirstLocation {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要查询的数据");
        int value=scanner.nextInt();
        int[]   array=new int[]{1,34,65,356,146,6551,624};
        ArrayNumberFirstLocation arrayNumberFirstLocation=new ArrayNumberFirstLocation();
        int num=arrayNumberFirstLocation.indexof(array,value);
        System.out.println(num);

}
    public static int  indexof(int[] array,int value){
        for (int i=0;i<array.length;i++){
        if(array[i]==value){
            System.out.println(value+"第一次出现的位置是"+(i+1));
            //寻找第一次的位置,找到之后停止循环,不进行第二位置的查找
            return i;
        }
        }
        return -1;
   }
}

1.12 冒泡排序

//键盘录⼊5个学⽣的年龄, 按照从⼤到⼩对年龄进⾏排序
public class Test01 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int[] array=new int[5];
        for(int i=0;i<array.length;i++){
            System.out.println("请输入学生成绩:");
            array[i]=scanner.nextInt();
        }
        for(int i=1;i<array.length;i++){
            for(int j=0;j<array.length-i;j++){
                if(array[j]>array[j+1]){
                    int temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
        scanner.close();
    }
}

1.13 JDK排序

	int[] array={1,34,5,4,34,6,34,45};

 1.sort方法
 
        Arrays.sort(array);
   2.sort(int[] array, int fromIndex,int toIndex)//排序数组指定区间的元素,取头不取尾
   
   //排序数组的从0到4位元素,排a[0],a[1],a[2],a[3];
   
      Arrays.sort(array,0,4)  ;   
        
  2.toString方法
  
        System.out.println(Arrays.toString(array));

1.14 JDK方法测试

//在歌唱⽐赛中,共有10位评委进⾏打分,在计算歌⼿得分时,去掉⼀个最⾼分,去掉⼀个最低分, 然后剩余的8位评
//委的分数进⾏平均,就是该选⼿的最终得分.输⼊每个评委的评分,求某选⼿的得分
public class SongerScore {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int[] array=new int[10];
        int sum=0;
        for(int i=0;i<array.length;i++){
            System.out.println("请输入第"+(i+1)+"个成绩:");
            array[i]=scanner.nextInt();
        }
        //排序
        Arrays.sort(array);
        //最大最小值设置为0
        array[0]=0;
        array[9]=0;
        //求和
        for(int i=0;i<array.length;i++){
            sum+=array[i];
        }
        System.out.println("平均成绩是:"+sum/8);
        scanner.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值