Java基础应用编程—— 数组

本章内容

Java基础应用编程—— 数组_第1张图片

一维数组

数组的定义和创建

数组可以看成是多个相同类型数据的组合,实现对这些数据的统一管理

{1,2,3,4,5}
{“apple”,“pear”,“banana”,“grape”}

数组中的每一个数据 — 数组的一个元素(element)

数组中的元素可以是任何数据类型,包括基本数据类型和引用类型

数组中元素的个数,称为数组的长度(length)

JAVA语言中声明数组时不能指定其长度

 e.g.  int  a[5];     //非法

数组的其他基本概念

数组的索引 -- index
数组的类型 -- type
数组的名称 – name

数组的定义和创建

数组类型 数组名 [ ]

数组类型[ ] 数组名

示例

Java基础应用编程—— 数组_第2张图片

数组的定义和创建

数组名 = new 数据元素类型[ 元素个数 ]

示例

Java基础应用编程—— 数组_第3张图片

数组的内存模型

数组是存储多个相同类型变量的对象。数组的所有元素保存在堆内存中。
创建一个数组就是在堆中创建一个数组对象。
数组创建后立即拥有默认值。
索引从0开始。
连续分配

Java基础应用编程—— 数组_第4张图片

数组的初始化

在创建数组的同时就为数组元素分配空间并赋值

Java基础应用编程—— 数组_第5张图片

声明数组:和使用变量要先声明一样,先声明数组的类型和名称

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开始

元素的下标可以是整型常量或整型表达式

Java基础应用编程—— 数组_第6张图片

数组的属性

数组的长度(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基础应用编程—— 数组_第7张图片

锯齿数组

Java中多维数组不一定是规则矩阵形式

Java基础应用编程—— 数组_第8张图片

多维数组的创建

数组类型   数组名 [  ] [  ]
数组类型[  ] [  ]   数组名
数组类型[  ]   数组名 [  ]

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} } ;
Java基础应用编程—— 数组_第9张图片

☻ 练习

    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。


Java基础应用编程—— 数组_第10张图片

经过第一趟(共5次比较与交换)后,最大的数9已“沉底” 。

Java基础应用编程—— 数组_第11张图片

然后进行对余下的前面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;
                }
                  }
        }
    }

本章重点总结

一维数组

掌握数组的长度
掌握一维数组的声明、创建、初始化
数组的常见错误

多维数组

掌握二维数组的声明、创建、初始化
理解数组的复制
理解数组的排序

课后作业

  1. 编写一个简单程序,要求数组长度为5,分别赋值10,20,30,40,50,在控制台输出该数组的值。(知识点:数组定义和创建、一维数组初始化)[必做题]
  2. 将一个字符数组的值(neusofteducation)拷贝到另一个字符数组中。(知识点:数组复制) [必做题]
  3. 给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组,先排序,然后输出排序后的数组的值。(知识点:Arrays.sort排序、冒泡排序) [必做题]
  4. 有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 依次类推。(知识点:多维数组定义和创建、数组遍历、数组元素访问) [选作题]
  5. 输出一个double型二维数组(长度分别为5、4,值自己设定)的值。(知识点:数组定义和创建、多维数组初始化、数组遍历) [必做题]
  6. 在一个有8个整数(18,25,7,36,13,2,89,63)的数组中找出其中最大的数及其下标。(知识点:数组遍历、数组元素访问) [必做题]
  7. 将一个数组中的元素逆序存放(知识点:数组遍历、数组元素访问) [选作题]
  8. 将一个数组中的重复元素保留一个其他的清零。(知识点:数组遍历、数组元素访问) [选作题]
  9. 给定一维数组{ -10,2,3,246,-100,0,5} ,计算出数组中的平均值、最大值、最小值。(知识点:数组遍历、数组元素访问) [选作题]
    ==================================================================

分割线

==================================================================
博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。

你可能感兴趣的:(Java基础应用编程—— 数组)