本章内容
一维数组
数组的定义和创建
数组可以看成是多个相同类型数据的组合,实现对这些数据的统一管理
{1,2,3,4,5}
{“apple”,“pear”,“banana”,“grape”}
数组中的每一个数据 — 数组的一个元素(element)
数组中的元素可以是任何数据类型,包括基本数据类型和引用类型
数组中元素的个数,称为数组的长度(length)
JAVA语言中声明数组时不能指定其长度
e.g. int a[5]; //非法
数组的其他基本概念
数组的索引 -- index
数组的类型 -- type
数组的名称 – name
数组的定义和创建
数组类型 数组名 [ ]
或
数组类型[ ] 数组名
示例
数组的定义和创建
数组名 = new 数据元素类型[ 元素个数 ]
示例
数组的内存模型
数组是存储多个相同类型变量的对象。数组的所有元素保存在堆内存中。
创建一个数组就是在堆中创建一个数组对象。
数组创建后立即拥有默认值。
索引从0开始。
连续分配
数组的初始化
在创建数组的同时就为数组元素分配空间并赋值
声明数组:和使用变量要先声明一样,先声明数组的类型和名称
int[] = myNumbers;
构造数组:声明之后,还不知道能存放多少个数据
myNumbers = new int[20];
构造/创建数组使用了关键字new,它是内存分配操作符,所谓创建数组,就是在内存中给数组分配空间。
初始化数组:使用new创建数组后,所有元素其实已经被初始化,元素都是默认值,这种初始化就叫做”动态初始化“。
还有一种初始化方式是不使用new,而是在声明数组的同时就完成创建和初始化工作,这叫做”静态初始化“。
如:int[ ] buf = {10,20,30,66};
myNumbers[0] = 5;
myNumbers[1] = 10;
myNumbers[2] = 15;
myNumbers[3] = 20;
数组元素的访问
Java中,数组元素的下标从0开始
元素的下标可以是整型常量或整型表达式
数组的属性
数组的长度(length)必须>=0;
length为只读。
利用length遍历数组
示例 Test.java
int[ ] array ;
array = new int [4] ;
练习
☻ 练习
说明下列创建数组的方法那些是正确的______。
A) int dim[ ] = new int[4];
B) int dim[4] = new int[ ];
C) int dim[ ] = new int[ ]{1,2,3,4};
D) char a[ ] = {‘A’, ‘B’};
E) char c[ ] = “ABC”;
答案 :A、C、D
数组的异常 示例
Array_exception2.java
数组越界异常( ArrayIndexOutOfBoundsException )
class Array_exception2 {
public static void main(String args[]){
int a[]=new int[3];
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
System.out.println(a[3]);
}
}
多维数组的创建
Java中没有真正的多维数组,只有数组的数组
锯齿数组
Java中多维数组不一定是规则矩阵形式
多维数组的创建
数组类型 数组名 [ ] [ ]
数组类型[ ] [ ] 数组名
数组类型[ ] 数组名 [ ]
int a[ ] [ ] ;
int[ ][ ] b ;
int[ ] c[ ] ;
多维数组的创建
数组名 = new 数据元素类型[ 行数 ] [ 列数 ] ;
数组名 = new 数据元素类型[ 行数 ] [ ] ;
a = new int [3][4] ;
a = new int [3][ ] ;
a = new int [ ][4] ; //非法
多维数组的初始化
数组类型 数组名[ ][ ] = { {元素11,元素12,…} , {元素21,元素22,… } }
数组类型 数组名[ ][ ] = new 数据类型[ ][ ] { {元素11,元素12,…} , {元素21,… } }
int a[ ][ ] = { {1,2,3}, {4,5}, {7} } ;
int a[ ][ ] = new int[ ][ ]{ {1,2,3}, {4,5}, {7} } ;
示例 MulArray.java
int[ ][ ] a = new int[3][ ];
a[0] = new int[2];
a[1] = new int[3];
a[2] = new int[4];
a[0][0] = 1;
a[0][1] = 2;
…
多维数组的内存模型
int a[ ][ ] = { {1,2,3}, {4,5}, {7} } ;
☻ 练习
int[ ][ ]a = new int[3][4];
for(int i=0;i
多维数组的遍历
利用循环语句 和 数组下标
☻ 练习 Array_traversal.java
循环遍历字符串数组{“red”,”orange”,”yellow”,“green”,“blue”,”purple”},
并将其打印
class Array_traversal {
public static void main(String args[ ]){
String color[ ] = {"red","orange","yellow",
"green","blue","purple"};
for(int i=0;i
数组的复制 和排序
System.arraycopy(source,srcPos,dest,destPos,length)
复制source数组中从下标srcPos开始的length个元素到目标数组dest,并从目标数组的下标为destPos的位置开始储存
source: 源数组
srcPos: 源数组中的起始位置
dest: 目标数组
destPos:目标数组中的起始位置
length: 要复制的数组元素的个数
☻ 练习 Array_copy.java
复制数组{1,2,3,4,5}中从下标0开始的
5个元素到目标数组{6,7,8,9,10,11,12,13,14,15},
并从目标数组的下标为0的位置开始储存
Arrays.sort(arr_name)
Arrays.sort(arr_name,fromIndex,toIndex)
对数组arr_name中,从下标为fromIndex到toIndex的元素(不包括toIndex)进行升序排序
示例:ArraySort_sample.java
int[ ] point = {1,6,2,3,9,4,5,7,8};
java.util.Arrays.sort( point );
for(int i=0;i
冒泡排序法(Bubble Sort)
冒泡排序法是一种简单的排序算法
它重复地走访过要排序的数组,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数组的工作是重复地进行直到没有再需要交换,也就是说该数组已经排序完成。
冒泡排序法(Bubble Sort)
假设输入6个数为:9,8,5,4,2,0。
经过第一趟(共5次比较与交换)后,最大的数9已“沉底” 。
然后进行对余下的前面5个数第二趟比较,如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。
按上面的规律,要将n个元素排序,其核心代码表示如下:
for(i = 1; i < n; i++)
{
for(j = 0; j < n-i; j++)
{
if(a[ j ] > a[ j +1 ])
{
t = a[ j ];
a[ j ] = a[ j +1 ];
a[ j +1 ] = t;
}
}
}
// 冒泡排序(下沉法)
public static void bubbleSort(int[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = 0; j < a.length - i ; j++) {
if (a[j] > a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
}
本章重点总结
一维数组
掌握数组的长度
掌握一维数组的声明、创建、初始化
数组的常见错误
多维数组
掌握二维数组的声明、创建、初始化
理解数组的复制
理解数组的排序
课后作业
- 编写一个简单程序,要求数组长度为5,分别赋值10,20,30,40,50,在控制台输出该数组的值。(知识点:数组定义和创建、一维数组初始化)[必做题]
- 将一个字符数组的值(neusofteducation)拷贝到另一个字符数组中。(知识点:数组复制) [必做题]
- 给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组,先排序,然后输出排序后的数组的值。(知识点:Arrays.sort排序、冒泡排序) [必做题]
- 有2个多维数组分别是 2 3 4 和 1 5 2 8 4 6 8 5 9 10 -3 2 7 -5 -18
按照如下方式进行运算。生成一个2行4列的数组。此数组的第1行1列是21+35+42第1行2列是25+39+47 第2行1列是41+65+8*2 依次类推。(知识点:多维数组定义和创建、数组遍历、数组元素访问) [选作题] - 输出一个double型二维数组(长度分别为5、4,值自己设定)的值。(知识点:数组定义和创建、多维数组初始化、数组遍历) [必做题]
- 在一个有8个整数(18,25,7,36,13,2,89,63)的数组中找出其中最大的数及其下标。(知识点:数组遍历、数组元素访问) [必做题]
- 将一个数组中的元素逆序存放(知识点:数组遍历、数组元素访问) [选作题]
- 将一个数组中的重复元素保留一个其他的清零。(知识点:数组遍历、数组元素访问) [选作题]
- 给定一维数组{ -10,2,3,246,-100,0,5} ,计算出数组中的平均值、最大值、最小值。(知识点:数组遍历、数组元素访问) [选作题]
==================================================================
分割线
==================================================================
博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。