Java数组那些事

1、数组的定义

Java中为什么要有数组呢?
问大家一个问题:一个班里有50名同学,如何在程序中输出所有同学的学号?
如果没有数组,定义50个int 分别输出吗?要是100多人呢?1000人呢?定义起来你会崩溃的?
数组: 一组能够存储相同数据类型值的变量的集合。
当我们有一组相同类型的数据需要存储,如果此时使用单个变量来存储,我们将要定义若干个变量名,这样将会
非常繁琐,并不利于维护。

2、数组的赋值

为了给大家加深印象,我决定给大家画张图来理解一下:


四种:

  • 使用默认的初始值来初始化数组中的每一个元素
    语法:数组元素类型 [] 数组名 = new 数组元素类型[数组中元素的个数(数组的长度)];
    如:
    int [] scores = new int[3];
    /*数组赋值
		nums[0]=1;
		nums[1]=2;
		nums[2]=3;
		nums[3]=4;
		nums[4]=5;
		*/
		for(int i=0;i<5;i++){
			scores[i]=i+1;
		}
  • 先声明,然后再赋予默认的初始值。
    语法:数组元素类型 [] 数组名;
    数组名= new 数组元素类型[数组中元素的个数(数组的长度)];
    如:
int [] scores;
     scores = new int[3];//这种呢就相当于第一种分开写了
  • 先声明,然后再使用指定的值进行初始化。
    语法:数组元素类型 [] 数组名 = new 数组元素类型[]{元素1,元素2,…};
    如:
int [] scores = new int[]{56,78,98};//赋值和声明写一起了,
  • 将第三种写法可以简化为(使用数组常量值给数组进行赋值)
    语法:数组元素类型 [] 数组名 = {元素1,元素2,…};
    如:
int [] scores =  {56,78,98};//第三种的简写这个用的最多

所有的数组一定要有长度,所以所有的数组都有长度这个属性

System.out.println(scores.length);
//scores.length .可以理解为的  scores的长度

3、数组的遍历

求数组的长度:
x.length

通过下标来访问数组中的元素。
下标:从0开始,到数组长度-1
如:int[] scores = {89,90};
访问最后一个元素值:
int lastElement = scores[scores.length-1];
遍历:依次取出数组中的每一个元素。
遍历方式一:普通的for循环
语法:

for(int i = 0; i< 数组的长度;i++){
//i:循环变量,同样:也是数组的下标(取值范围[0,数组长度))
        数组中元素的类型 变量 = 数组名[i];
}
public class Test5{

	public static void main(String[] args){	
		//数组的遍历
		int[] scores={59,75,65,89,100};
		System.out.println("数组的长度:"+scores.length);
		//这样写的话 每次都去访问数组的长度
		//for(int i=0;i<scores.length;i++){
		//高手写代码 这样写效率比较高 前提是长度是固定的,
		int scoreLen=scores.length;
		for(int i=0;i<scoreLen;i++){
			int score=scores[i];
			System.out.println(score);
		}
		//如果直接打印scores能不能打印出来呢,
		//答案是不能的你打印的是,对象的字符串表现方式,它不是内存地址 
		System.out.println(scores);
	}

}

jdk1.5以后Java新增foreach循环和可变参数
遍历方式二:使用增强for循环【foreach循环】
语法:

for(数组中元素的类型 变量:数组名){
                  数组中元素的类型 临时变量 = 变量;
  }
public class Test5{

	public static void main(String[] args){	
		//数组的遍历 
		int[] scores={59,75,65,89,100};
		    //这种遍历方式呢有一定的限制,更强大的循环还是普通的for它可以控制下标
			for(int x:scores){//1.5新增特性
				System.out.println(x);
			}
	}

}

和foreach一起新增的另一个特性:可变参数

public class Test5{

	public static void main(String[] args){	
		//数组的遍历
		int[] scores={59,75,65,89,100};
		print(scores);
		//可变参数就不用包装成数组格式,直接传
		print2(1,2,3,4);
	}
	public static void print(int[] x){
		int len=x.length;
		for(int i=0;i<len;i++){
			System.out.println(x[i]);
		}
	}
	//JDK1.5可变参数
	//可变参数只能是参数列表中的最后一个
	//可变参数可以作为数组使用
	public static void print2(int... x){
		int len=x.length;
		for(int i=0;i<len;i++){
			System.out.println(x[i]);
		}
	}

}

使用数组要注意的问题:

空指针异常(NullPointerException)
数组越界异常(ArrayIndexOutOfBoundsException )
public class Test5{

	public static void main(String[] args){	
		//数组的遍历
		int[] scores={59,75,65,89,100};
		//测试空指针异常
		//当一个变量为null(没有赋值)时我们调用了改变量的属性和方法,  
	//它就死给你看,一给我嘞giao
	//这个异常以后编程回经常经常遇到哦
		print(null);
		//测试数组下标越界,这个也经常遇到
		print2(scores);
	
	}

	public static void print(int[] x){
		int len=x.length;
		for(int i=0;i<len;i++){
			System.out.println(x[i]);
		}
	}
	//测试数组下标越界
	public static void print2(int[] x){
		int len=x.length;
		for(int i=0;i<=len;i++){
			System.out.println(x[i]);
		}
	}

}

控制台就会报错:

4、数组内存结构分析:

我们来分析一下这行代码

//new 表示创建一个数组 这得结合内存来说一下
int [] scores = new int[3];

先来说一下栈内存堆内存
数组是引用类型,会存在堆内存中,

5、多维数组

Java中没有真正的多维数组
数组中的元素还是数组的话就是多维数组,
普通的开发二维可能就够了,游戏开发可能用到更高维的数组

/*
一起来参加屌丝程序员大赛吧,有3个班级各3名学员参赛,
	记录每个学员的成绩,并计算每个班的平均分。
*/
public class Test5{

	public static void main(String[] args){	
	int[][] scores={{78,89,89},{87,96,85},{67,79,78}};
	int classlen=scores.length;
	for(int i=0;i<classlen;i++){
		int sum=0;
		int count=scores[i].length;
		for(int j=0;j<count;j++){
			sum+=scores[i][j];
		}
		int avg=sum/count;
		System.out.println("第"+(i+1)+"班的平均成绩:"+avg);
	}
	
	}

}

qq技术交流群:679293162

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值