大家好,欢迎来到IT知识分享网。
为什么需要数组?
问题:我们要计算30个学生的平均分
如果没有数组,我们的代码是这样的
int score1 = 32;
int score2 = 56;
int score3 = 78;
//……此处省略26个变量
int score30 = 88;
double average = (score1 + score2 + …… + score30) / 30;
缺陷很明显了吧?首先要定义的变量太多,假如我们需要存10000个学生的成绩呢?定义10000个变量?这显然不可能,也不利于数据的处理。
那么我们的数组来啦!
了解数组
1.数据的组合
2.在内存中开辟一连串的空间
3.同一数据类型的情况
数组要素
1.标识符:数组名称,称为标识符,用于区分不同的数组
2.数组元素:数组中存放的数据,叫做数组元素。
3.数组下标:在数组中,为了正确地得到数组的元素,需要对它们进行编号,这样计算机才能根据编号去存取,这个编号就称为数组下标。数组下标从0开始
4.元素类型:存储在数组中的数组元素应该是同一数据类型
数组的基本特点
其长度是确定的,数组一但被创建,它的大小是不可以改变的
其元素必须是相同类型的,不允许混合类型
数组中的元素可以是任何数据类型,包括基本类型和引用类型
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组本身就是在堆中的
这个并不够详细,只是放出来给大家瞄一眼
定义数组的语法
动态初始化
1.声明数组
数据类型[]数组名; 数据类型 数组名[];//不推荐
数组名可以是任意合法的变量名。
声明数组就是告诉计算机该数组中数据的类型是什么。
虽然声明了数组,但并不会为数组元素分配空间。
2.分配空间
数组名 = new 数据类型[数组长度];
或者
数据类型[] 数组名 = new 数据类型[数组长度]
3.赋值
分配空间后就可以向数组里放数据了
语法:数组名[下标值];
int[] scores = new int[5];//成绩数组
int sum = 0;//成绩总和
Scanner input = new Scanner(System.in);
System.out.println(“请输入5位同学的成绩:”);
for (int i = 1; i <= scores.length; i++){//scores.length 数组长度
scores[i] = input.nextInt();
sum = sum + scores[i];//成绩累加
}
//计算并输出平均分
System.out.println(“学员的平均分是:” + (double)sum/scores.length);
这是数组长度:数组名.length
那么数组的最大下标是?数组长度-1
【注意】数组的下标是从0开始的
练习一:依次输入五句话,然后将它逆序输出
String[] str = new String[5];//定义一个String类型长度为5数组
Scanner input = new Scanner(System.in);
System.out.println(“请输入5句话”);
for (int i = 0;i < str.length;i++){
System.out.print(“第” + (i+1) + “句话:”);
str[i] = input.next();
}
System.out.println(“逆序输出为”);
for (int i = str.length-1;i >= 0;i–){//从最大下标开始输出,到下标为0时结束
System.out.println(str[i]);
}
练习二:从键盘输入10个整数,合法值为1、2、3,其他的都是非法数字。统计合法数字和非法数字的个数
int[] nums = new int[10];//长度为10
int[] count = new int[4];//存放3个合法数字和非法数字
Scanner input = new Scanner(System.in);
System.out.println(“请输入10个整数:”);
for (int i = 0; i < nums.length;i++){
nums[i] = input.nextInt();
switch (nums[i]){
case 1:
count[0]++;//记录1的个数
break;
case 2:
count[1]++;//记录2的个数
break;
case 3:
count[2]++;//记录3的个数
break;
default:
count[3]++;//记录非法数字个数
}
}
//遍历合法数字和非法数字
for (int i = 0;i < count.length;i++){
if(i == count.length-1){
System.out.println(“非法数字的个数:” + count[3]);
}else{
System.out.println(“数字” + (i+1) + “的个数为:” + count[0]);
}
}
定义一个数组的另一种方式(静态初始化:创建 + 赋值)
数据类型[] 数组名 = {值1,值2,值3,……,值n};
int[] scores = {44,54,67,34,65};
练习三:假设有一个长度为5的数组 int[] array = {1,3,-1,5,-2};
现在要创建一个新数组newArray[],要求把原来数组中元素逆序放进新数组,并且如果原数组小于0的数,在新数组中按0存放。
int[] array = {1,3,-1,5,-2};//长度为5的数组
//遍历原数组,这里用的是foreach循环
System.out.println(“原数组为:”);
for (int i : array) {
System.out.print(i + “\t”);
}
int[] newArray = new int[array.length];//新数组
int index = 0;//用于给新数组赋值
//把原数组的值逆向放到新数组全靠这块代码
for (int i = array.length-1; i >= 0 ;i–){
//原数组值小于0,在新数组里就等于0,这里用continue是因为 整型数组默认值是0
if (array[i] < 0){
continue;//跳过这次循环
}
newArray[array.length-1-i] = array[i];//array.length-1-i:逆序放在在新数组中的元素下标
}
System.out.println(“\n逆序并处理后的数组为:”);
for (int i : newArray) {
System.out.print(i + “\t”);
}
这里使用了一个foreach循环
/*
for(类型 变量名 : 数组或者集合对象){ //这种循环适合遍历
System.out.println(变量名);
}
*/
for (int i : newArray) {
System.out.print(i + “\t”);
}
数据类型默认值:因为数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式隐式赋值
int(0)double(0.0)char(\u0000)String(null)boolea(false)
基本类型没有默认值
引用类型有默认值
数组下标越界
下标的合法区间:[0 ~ length-1],如果越界就会报错;
int[] array = new int[5];
array[5] = 10;//下标越界
**ArrayIndexOutOfBoundsException**:数组下标越界异常
多维数组
/*
array[0] 1,2
array[1] 2,3
*/
int[][] array = {
{1,2},{5,2}};//这是一个二维数组
System.out.println(array[0][1]);//取到的是1
//遍历这个数组中的所有值
for (int i = 0; i < array.length; i++){
for (int j = 0; j < array[i].length; j++){
System.out.println(array[i][j]);
}
}
可以理解为:数组中存放的还是数组。这个东西比较灵活,可以自己敲代码尝试三维、四维,就跟嵌套似的
Arrays 类
数组的工具类java.util.Arrays
数组本身没什么方法给我们用,所以提供了一个工具类供我们使用,从而对数据对象进行一些基本的操作
查看JDK帮助文档 链接:https://pan.baidu.com/s/16cGBmZcGMKW0NckaXDXTDQ 提取码:wssb
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而”不用”使用对象来调用(注意:是”不用”而不是”不能”)
常用功能:
给数组赋值:通过fill方法
对数组排序:通过sort方法,按升序
比较数组:通过equals方法比较数组中的元素是否相等
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作
int[] array = {1,2,3,4,5564,462,5377,34};
System.out.println(array);//[I@1b6d3586 现在看不懂没关系
//打印数组元素Arrays.toString
System.out.println(Arrays.toString(array));
//数组进行排序:升序
Arrays.sort(array);
System.out.println(Arrays.toString(array));
//数组填充
Arrays.fill(array, 0);
System.out.println(Arrays.toString(array));
标签:Java,定义,int,System,数组,println,array,out
来源: https://blog.csdn.net/weixin_45277249/article/details/111307521
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15761.html