第六章 一维数组及经典应用

本文详细介绍了Java中一维数组的定义、特征、声明、赋值、初始化、长度获取、元素访问以及遍历。内容包括数组作为内存中连续空间存储相同类型数据的特点,以及如何通过下标访问和修改数组元素,同时提供了获取数组最大最小值的方法和冒泡排序的实现。
摘要由CSDN通过智能技术生成

Java面向对象基础

第六章 一维数组及经典应用

  • 对于Java的变量来说,当生命或者是初始化一个变量时,就会在内存空间中开辟空间保存数据,当这个变量离开它的作用于时,这个变量所占用的内存空间就会被Java回收,销毁这个变量。
  • 对于普通变量来说,一次只能存储一个值。
  • 普通变量一次只能存储一个值,往往我们希望一个变量能够存储多个值,于是就产生了数组这个概念。

一、数组

1、定义:

在这里插入图片描述
在内存中,开辟一块连续的内存空间,用于存储一堆数据类型相同数据的变量,称之为数组。

2、特征:

在这里插入图片描述

(1)数组在内存空间中所占据的空间是连续的。
(2)数组要求所存储的所有数据的类型是相同的。
(3)数组中所存储的数据的数量,在创建数组时,一旦声明将不再发生改变。

  • 我们将数组中能够存储多少个数据,称之为该数组的长度。数组的长度一旦固定,将不再发生改变。

(4)数组中每个数据都会分配一个小的空间,每个小的空间都可以通过下标来进行访问。

  • 我们将每个存储空间也称之为元素。

  • 数组元素的下标从0开始。
    思考:为什么数组的下标是从0开始???
    简单一句话:就是为了方便 计算出每个元素的具体内存地址。
    因为数组变量 实际上在内存上储存的是这个数组变量中第一个元素的的首地址,而系统在取数组中某个元素的值时,必须要得到具体的那个元素的地址才能获取到对应的值
    具体每个元素的内存地址 = 数组变量首地址 + 下标 X 每个元素占用的字节数

  • 本质上来说,数组元素的下标就是该元素距离第一个元素的偏移量。
    (5)对于数组来说,其本质也是一个变量,只不过这个变量和其他变量的区别是可以存储多个值。

3、数组的声明形式有两种:

(1)数据类型[ ] 变量名;

int[] nums1;

Java创建的标准形式。

(2)数据类型 变量名[ ];

int nums2[];

C语言创建数组的形式,为了兼容C的习惯。

4、数组的赋值形式有两种:

(1)变量名 = new关键字 数据类型[ ]{数值1,数值2… };

nums1 = new int[]{5,7,9};

直接给该数组的每个元素一个具体的值,同时指明了这个数组的长度。

(2)变量名 = new关键字 数据类型[长度 ];

nums2 = new int[3];

只说明该数组的元素个数,即长度,而不是具体的设定数组每个元素的值。

5、数组的初始化形式有三种:

(1)数据类型[ ] 变量名 = {数值1,数值2,数值3…};

int[] nums3 = {5,8,9};

直接制定该数组每个元素的值,同时也就设定了该数组的长度。

(2)数据类型[ ] 变量名 = new关键字 数据类型[ ]{数值1,数值2…};

int[] nums4 = new int[]{5,7,9};

直接指定该数组每个元素的值,同时设定了该数组的长度,使用关键字new。

(3)数据类型[ ] 变量名 = new关键字 数据类型[长度 ];

int[] nums5 = new int[3];

不指定该数组每个元素上具体的值,而值设定该数组的长度。

6、length

如果想要获得一个数组的元素个数,也就是数组长度,通过length获得。

nums1.length;

其中“.”可理解为汉语中的“的”。

7、下标

(1)想要访问数组的某个元素,则可通过下标来获得。

##获取数组num1中下标为3的元素:
int num1 = nums1[3];

(2)如果想要向数组中某个元素内存入数据,同样通过下标实现。

##向数组nums1中下标为0的元素存入数据100:
nums[0] = 100;
  • 对于任意一个数组,其最小下标为0,最大下标为该数组的长度-1。

(3)获得nums1数组中左后一个元素的值:

【1】根据公式,获得nums1数组中最后一个元素下标的值。

int maxIndex = nums1.length-1;

【2】再根据下标获得该元素的值。

nums1【maxIndex】;

补充:

  • 往往我们需要获得一个数组中每个元素的值,那么这个过程就称为遍历
  • 由于数组存在最小下标和最大下标,那么如果所给定的下标超出这个范围,就会产生错误,称之为数组下标越界(ArrayIndex Out Of Bounds Exception)。
  • 对于一个数组来说,无论是声明后赋值,还是直接初始化,都存在两种:
    (1)每个元素都赋予一个具体的值;
    (2)只给定这个数组一个长度,并未赋值。
    但是对于第(2)种来说,Java会默认给每个元素赋予一个默认值,默认值为0。
public static void main(String[] args) {
   	//初始化一个int类型的数组
   	int[] nums1 = new int[4];
   	//未进行赋值,查看nums1数组下标为1值
   	System.out.println(nums1[1]);
   }

在这里插入图片描述
* 对于不同数据类型的数组,Java所给定的默认值分别是:
整数型:0;
浮点型:0.0;
字符型:’ ';
布尔型:false;
应用数据类型:null;

8、判断数组中的最大最小值

(1)最大、最小值的初始值设置为数组中第一个元素的值;
(2)如果此时该元素的值小于最小值,那么该元素的值就是最小值;如果此时该元素的值大于最小值,那么该元素的值就是最大值。

//初始化一个数组
   	int[] nums = {8,78,6,5,1};
   	//初始化最大值和最小值
   	int max = nums[0];
   	int min = nums[0];
   	//遍历数组进行判断
   	for(int i = 1;i<=nums.length-1;i++) {
   		//最大值
   		if(nums[i]>max) {
   			max = nums[i];
   		}
   		//最小值
   		if(nums[i]<min) {
   			min = nums[i];
   		}
   	}
   	System.out.println("最大值为:"+max);
   	System.out.println("最小值为:"+min);
9、冒泡排序

(1)什么是冒泡排序:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
在这里插入图片描述
(2)冒泡排序代码实现:

int score[] = {67, 2, 75, 21, 89};
		//遍历输出数组
		System.out.println("数组score的最初顺序为:");
		for(int k = 0; k<=score.length-1;k++) {
			System.out.print(score[k]+" ");
		}
		System.out.println("");
		//冒泡排序
		for (int i = 0; i < score.length -1; i++){    //最多做n-1趟排序
			for(int j = 0 ;j < score.length - i - 1; j++){    //保证j+1正确,不能出现下标越界
				//如果j对应的元素大于j+1元素,那么就交换两个变量的值
				if(score[j] > score[j + 1]){    //把大的值交换到后面
					//初始化一个临时变量
					int temp = score[j];
					score[j] = score[j + 1];
					score[j + 1] = temp;
				}
			}        
			//输出每次排序的结果
			System.out.print("第" + (i+1) + "次排序结果:");
			for(int a = 0; a < score.length; a++){
				System.out.print(score[a] + " ");
			}
			System.out.println("");
		}
		//输出最终排序结果
		System.out.print("最终排序结果:");
		for(int a = 0; a < score.length; a++){
			System.out.print(score[a] + " ");
		}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值