Java基础应用编程—— 数组

本章内容

一维数组

数组的定义和创建

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

{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 <a.length;i++){ 
        for(int j=0;j <a[i].length;j++){ 
            a[i][j]=i+j; 
            } 
       },    
    则a[2][3] = ____    
    A.3      B.4         C.5          D.2
    答案 :C

多维数组的遍历

利用循环语句 和 数组下标

☻ 练习 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<color.length;i++){
            System.out.println(color[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<point.length;i++)
{
    System.out.println(point[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;
                }
                  }
        }
    }

本章重点总结

一维数组

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

多维数组

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

课后作业

  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} ,计算出数组中的平均值、最大值、最小值。(知识点:数组遍历、数组元素访问) [选作题]

分割线


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容