补Java基础之重生(9)数组(下)

一、数组

1、动态初始化

定义:数组时先不存入具体的元素值,只确定数组存储的数据变量和数组的长度,不确定具体值。
语法格式:

数据类型[] 数组名=new 数据类型[长度]
int [] arr=new int [3];
//后赋值
arr[0]=10;
System.out.println(arr[0]);
**注意事项:**静态初始化和动态初始化数组的写法是独立的,不可以混用。

2、元素默认值规则

数据类型明细默认值
基本数据类型byte、short、char、int、long0
float、double0.0
booleanfalse
引用类型类、接口、数组、Stringnull

使用场景

  1. 动态初始化:适用开始不确定具体元素值,只知道元素个数的业务场景。
  2. 静态初始化:适合一开始就知道要存入那些元素值得业务场景。

3、小练习:评委打分

需求:某个歌唱比赛,需要开发一个系统:可以录入6名评委得打分,录入完毕后立即输出平均分作为选手得分。
代码如下:

package Array;

import java.util.*;

/**
	* user:liaoxinyue
	**/
public class ArrayDemo2 {
				public static void main ( String[] args ) {
								double[] scores  = new double[ 6 ];
								Scanner  scanner = new Scanner ( System.in );
								double   sum     = 0;
								for ( int i = 0 ; i < 6 ; i++ ) {
												System.out.println ( "请输入第" + ( i + 1 ) + "位评委打分" );
												scores[ i ] = scanner.nextDouble ( );
												sum += scores[ i ];
								}
								double average = sum / scores.length;
								System.out.println ( average );
				}
}

运行结果如下:
在这里插入图片描述

4、数组原理

  1. Java内存分配介绍
  • 方法区(字节码文件先加载到这里)
  • 栈内存(方法运行时所进入的内存,变量也在这里)
  • 堆内存(new出来的东西在这块内存中开辟空间并产生地址)
  1. int a=20;int []arr=new int[3]这两行代码的执行原理。
    a为变量,存在栈内存中,数据为20;
    arr为数组变量,存放在栈中,根据索引(地址值)访问堆内存中存储的数据。

5、多个变量指向同一个数组对象

多个数组变量中存储的是同一个数组对象的地址。
多个变量修改的都是同一个数组对象中的数据。

代码如下:

package Array;

/**
	* user:liaoxinyue
	**/
public class ArrayDemo3 {
				public static void main ( String[] args ) {
//								目标:多个变量指向同一个数组对象的问题
								int [] arr1={11,22,33};
//								把整型的数组变量arr1赋值给整型数组变量arr2
								int [] arr2=arr1;//地址值
//								将多个变量指向同一个数组对象
								System.out.println (arr1 );
								System.out.println (arr2 );
								arr2[1]=99;
								System.out.println (arr1[1] );
								//99,因为两个变量指向同一个数组,所以值为99
//								此时整型数组变量arr2为空,不指向任何数组
								arr2=null;
								System.out.println (arr2 );//null
//								System.out.println (arr2[0] );//会爆空指针异常(NullPointerException)
//								System.out.println (arr2.length);//会异常
				}
}

运行结果如下:
在这里插入图片描述
6、综合案例

  1. 数组元素求最大值
    代码如下:
package Array;

/**
	* user:liaoxinyue
	**/
public class ArrayDemo4 {
				public static void main ( String[] args ) {
								int []faceScore=new int[]{15,9000,10000,20000,9500,-5};
								int max=faceScore[ 0 ];
								for ( int i = 1 ; i < faceScore.length ; i++ ) {
												int score=faceScore[ i ];//去堆中找一次
												if ( max<score ){
																max=score;
												}
//												在堆中寻找两次
//												if ( max < faceScore[ i ] ) {
//																max = faceScore[ i ];
//												}
								
								}
								System.out.println (max );
				}
}

在这里插入图片描述

  1. 数组反转
    需求:某个数组5个数据:10,20,30,40,50,请将这个数组中的数据进行反转。
    [10,20,30,40,50]转换为[50,40,30,20,10]
    代码如下:
public class ArrayDemo5 {
				public static void main ( String[] args ) {
								int[] arr = new int[] { 10 , 20 , 30 , 40 , 50 };
								for ( int i = 0, j = arr.length - 1 ; i < j ; i++ , j-- ) {
												
												int bemp = arr[ i ];
												arr[ i ] = arr[ j ];
												arr[ j ] = bemp;
								}
								for ( int i = 0 ; i < arr.length ; i++ ) {
												System.out.println ( "当前数组arr为"+arr[i] );
								}
								
				}
}

运行结果如下:
在这里插入图片描述

  1. 随机排名
    需求:某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请先输入5名员工的工号,然后展示出一组随机排名顺序。
    代码如下:
package Array;

import java.util.*;

/**
	* user:liaoxinyue
	**/
public class ArrayDemo6 {
				public static void main ( String[] args ) {
								int []bank=new int[5];
								Scanner scanner=new Scanner ( System.in );
								for ( int i = 0 ; i < bank.length ; i++ ) {
												System.out.println ("请输入第"+(i+1)+"为员工的工号" );
												bank[ i ]=scanner.nextInt ( );
								}
								Random random=new Random (  );
								for ( int i = 0 ; i < bank.length ; i++ ) {
												int j=random.nextInt ( bank.length );
												int temp=bank[ i ];
												bank[i]=bank[ j ];
												bank[j]=temp;
								}
								for ( int i = 0 ; i < bank.length ; i++ ) {
												System.out.println ("当前排名为:"+bank[i] );
								}
				}
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值