第4章 數組(6課時)

常見異常

java.lang.ArrayIndexOutOfBoundsException: 5

at com.neuedu.test.Chap04.test01(Chap04.java:14)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)

at org.junit.runners.ParentRunner.run(ParentRunner.java:363)

at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

定義:

數組可以看成是多個相同類型數據的組合再姑,實現對這些數據的統(tǒng)一管理

元素:數組里的每個值叫做一個元素

索引index:是數據在數組里存放的位置 (編號)? 索引從0開始

{1,2,3,4,5}? ?3的索引為2

數組元素類型:可以是任何類型(四類八種基本類型+引用類型)

分類:

一維數組

?多維數組


一維數組定義

兩種定義方式?

1)數組類型? 數組名稱[]

int a[];

2)數組類型[]? 數組名稱

int[] b;

給數組指定長度

int a[]=new int[4];

給數組賦值

? ? ?//第一種,用下標(索引)方式給數組賦值

? ? ? a[0]=56;

? ? ? a[1]=45;

? ? ? a[2]=18;

? ? ? a[3]=11;

? ? ? a[4]=9;

學生練習

定義一個長度為5的一維數組暮蹂,給他賦值 ,并用for循環(huán)打印元素值

@Test

public void test1() {

//定義數組的兩種方式

? ? ? int a[]=new int[5];

? ? ? int[] b=new int[5];

? ? ? //數組是引用類型 把地址存到棧里构回,把數據存到堆里

? ? 給數組賦值

? ? ? 第一種脱茉,用下標方式給數組賦值

? ? ? a[0]=56;

? ? ? a[1]=45;

? ? ? a[2]=18;

? ? ? a[3]=11;

? ? ? a[4]=9;

? ? ? //System.out.println(a[2]);

? ? ? //得到數組長度

? ? ? int len=a.length;

? ? ? //for循環(huán)打印數組的每個值

? ? ? for(int i=0;i<len;i++){

? ? ? System.out.println(a[i]);

? ? ? }

}

第二種創(chuàng)建同時賦值

數組類型? 數組名[ ] = {元素1,元素2交汤,…}

數組類型?數組名[ ] = new 數據類型[ ]{元素1,元素2劫笙,…}

int [] a=new int[]{1,2,3};

int [] a={3,4,5};

學生練習:

用這種方式改造剛才的程序

加強for循環(huán)(以后常用)

格式:

for(數組元素類型? 循環(huán)到的變量命名:? 所循環(huán)的數組名){

?語句;

}

課堂練習

編寫一個長度為5的整型數組芙扎,每個元素賦值為0-10的隨機整數,遍歷該數組填大,輸出每個元素戒洼。

@Test

public void test3(){

int a[]=new int[5];

for(int i=0;i<a.length;i++){

int r=new Random().nextInt(10);

a[i]=r;

}

for(int b:a){

System.out.println(b);

}

}

數組越界異常

ArrayIndexOutOfBoundsException

作業(yè)

1)線上學習多維數組的創(chuàng)建、初始化栋盹、內存模型

2)背冒泡排序

3)今天課堂代碼寫一下

數組的遍歷

因為數組有下標施逾,數組的遍歷本質上是利用數組的下標,循環(huán)下標讀取數據例获。

課堂練習:


學生練習:

1)從鍵盤輸入班級學員成績汉额,計算全班學員的平均分

2)從鍵盤輸入班級學員成績,找出全班學員的最高分

數組復制


System.arraycopy(src, srcPos, dest, destPos, length);

//src:從哪里拷 源數組 拷貝誰

? //srcPos:從源數組中的第幾個下標開始? 源數組中的起始位置

? //dest:目標數組

? //destPos:目標數組中的起始位置

? //length:要復制的數組元素的個數

/**

? ? * 已知兩個一維數組:{1,2,3,4,5}和{6,7,8}榨汤,將這兩個一維數組合并成一個一維數組{1,2,3,4,5,6,7,8}蠕搜。

? ? */

@Test

? ? public void exam04(){

? ? int[] a={1,2,3,4,5};

? ? int b[]={6,7,8};

? ? int c[]=new int[a.length+b.length];

? ? //src源數組從哪里拷 源數組 拷貝誰

? ? //srcPos 起始位置的索引號

? ? //dest 目標數組

? ? //destPos 放到c的起始位置

? ? //length拷貝幾個

? ? //把a復制到c里

? ? System.arraycopy(a, 0, c, 0, a.length);

? ? //把b復制到c里

? ? System.arraycopy(b, 0, c, a.length, b.length);

? ? for(int i=0;i<c.length;i++){

? ? System.out.println(c[i]);

? ? }

? ? }

數組排序

Arrays.sort(c)? 全排

int c[]={4,1,8,9,6,2,1,0};

? ?Arrays.sort(c);

? for(int i=0;i<c.length;i++){

? System.out.println(c[i]);

? }

Arrays.sort(c, fromindex, toindex);? ?從哪個索引到哪個索引處進行排序,其他的不動收壕。

?//從指定位置到終止位置進行排序

? Arrays.sort(c, 3, c.length);

? System.out.println("指定位置排序");

? for(int i=0;i<c.length;i++){

? System.out.println("---->"+c[i]);

}


課堂練習:

1)將一個字符數組的值(neusofteducation)拷貝到另一個字符數組中妓灌。(知識點:數組復制)

2 )給定一個有9個整數(1,6,2,3,9,4,5,7,8)的數組,先排序蜜宪,然后輸出排序后的數組的值虫埂。

冒泡排序:


//冒泡排序

@Test

public void sort(){

int[] a = { 1, 6, 2, 3, 9, 4, 5, 7, 8 };

int len=a.length;

//1、n個數排序圃验,外層的循環(huán)n-1次? i=0~n-1

for(int i=0;i<len-1;i++){//0 ~n-1

//2掉伏、里層循環(huán)j=0~n-1-i次

for(int j=0;j<len-1-i;j++){

//循環(huán)體里比對? 如果a[j]>a[j+1]? 兩個數就交換,大的會被交換到最下面】

if(a[j]>a[j+1]){

int temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

}

System.out.println("排序后:");

for(int i=0;i<len;i++){

System.out.println(a[i]);

}

}

@Test

public void sort2(){

int[] a = { 1, 6, 2, 3, 9, 4, 5, 7, 8 };

int len=a.length;

//1、n個數排序斧散,外層的循環(huán)n-1次? i=1~n(不包括n)

for(int i=1;i<len;i++){//1 ~n

//2供常、里層循環(huán)j=0~n-i次

for(int j=0;j<len-i;j++){

//循環(huán)體里比對? 如果a[j]>a[j+1]? 兩個數就交換,大的會被交換到最下面】

if(a[j]>a[j+1]){

int temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

}

System.out.println("排序后:");

for(int i=0;i<len;i++){

System.out.println(a[i]);

}

}

二維數組的創(chuàng)建和遍歷

public static void main(String[] args) {

//創(chuàng)建并初始化數組

? ? ? ? //int[][] a=new int[][]{{1,2,3},{4,5,6}};

? ? ? ? int[][] a={{1,2,3},{4,5,6}};

? ? ? ? for(int i=0;i<a.length;i++){

? ? ? ? //a[0]={1,2,3} a[1]={4,5,6}

? ? ? ? for(int j=0;j<a[i].length;j++){

? ? ? ? System.out.println(a[i][j]);

? ? ? ? }

? ? ? ? }}

作業(yè):

1)鍵盤輸入班級學員成績鸡捐,計算全班學員每科的平均分? ? ?3科? ? 5人

@Test

public void score() {

// 從鍵盤輸入班級學員成績栈暇,計算全班學員每科的平均分 (約定好是3科5人)

Scanner sc = new Scanner(System.in);

int[][] scores = new int[3][5];

while (true) {

// 逐科輸入,一共輸入3科

label: {

for (int i = 0; i < 3; i++) {// 幾科

System.out.println("開始輸入第" + i + "科學員成績");

// 每科輸入5個人的

int sum = 0;

for (int j = 0; j < 5; j++) {// 5人

System.out.println("請輸入第" + j + "個學員成績");

int score = sc.nextInt();// 第i科第j個學員成績

if (score < 0 || score > 100) {

System.out.println("成績不合法箍镜,重頭再來");

break label;

}

scores[i][j] = score;

sum += score;

}

// 平均分=每科總成績/總人數

double avg = sum / 5;

System.out.println("平均成績" + avg);

}

}

// 循環(huán)打印用戶輸入的成績

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 5; j++) {

System.out.print(scores[i][j] + "? ");

}

System.out.println();

}

}

}

2)第4章課后習題

補充:

選擇排序:



//選擇排序

@Test

public void selectSort(){

//原始數據{ 3, 6, 8, 1}

//1源祈、在一個長度為 N 的無序數組中,第一次 假設min=第一個數 遍歷后面 n-1 個數找到最小的和第一個數交換鹿寨。

? ? ? //第一次假設 min=3? { 3, 6, 8, 1};? {1新博,6薪夕,8脚草,3}

//2、第二次從下一個數開始遍歷 n-2 個數原献,找到最小的數和第二個數交換馏慨。

? ? //第二次假設 min=6? {1,6姑隅,8写隶,3};? ==》{1,3讲仰,8慕趴,6};

//3、重復以上操作直到第 n-1 次遍歷最小的數和第 n-1 個數交換鄙陡,排序完成冕房。

? //第三次假設 min=8? {1,3趁矾,8耙册,6};? ==》{1,3毫捣,6详拙,8};

int[] a={ 3, 6, 8,1};

int len=a.length;//4

//n個數,外層循環(huán)n-1次? 0~n-1

for(int i=0;i<len-1;i++){

? //每一次蔓同,先假設當前這個數是最小值

int min=a[i];//a[0],a[1],a[2]

System.out.println("當前假設的最小值為:"+min);

//里層循環(huán)從下一個(i+1)開始到最后一個

for(int j=i+1;j<len;j++){

? ? ? if(a[j]<min){

? ? ? //交換a[j]和min

? ? ? int temp=a[j];

? ? ? a[j]=min;

? ? ? min=temp;

? ? ? }

}

System.out.println("這一軟計算后的最小值為:"+min);

a[i]=min;

}

System.out.println("---------------------------");

for(int i=0;i<len;i++){

System.out.println(a[i]);

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末饶辙,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子斑粱,更是在濱河造成了極大的恐慌弃揽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異蹋宦,居然都是意外死亡披粟,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門冷冗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來守屉,“玉大人,你說我怎么就攤上這事蒿辙∧捶海” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵思灌,是天一觀的道長俺叭。 經常有香客問我,道長泰偿,這世上最難降的妖魔是什么熄守? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮耗跛,結果婚禮上裕照,老公的妹妹穿的比我還像新娘。我一直安慰自己调塌,他們只是感情好晋南,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著羔砾,像睡著了一般负间。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姜凄,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天政溃,我揣著相機與錄音,去河邊找鬼檀葛。 笑死玩祟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的屿聋。 我是一名探鬼主播空扎,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼润讥!你這毒婦竟也來了转锈?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤楚殿,失蹤者是張志新(化名)和其女友劉穎撮慨,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡砌溺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年影涉,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片规伐。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡蟹倾,死狀恐怖,靈堂內的尸體忽然破棺而出猖闪,到底是詐尸還是另有隱情鲜棠,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布培慌,位于F島的核電站豁陆,受9級特大地震影響,放射性物質發(fā)生泄漏吵护。R本人自食惡果不足惜盒音,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望何址。 院中可真熱鬧里逆,春花似錦进胯、人聲如沸用爪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偎血。三九已至,卻和暖如春盯漂,著一層夾襖步出監(jiān)牢的瞬間颇玷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工就缆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帖渠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓竭宰,卻偏偏與公主長得像空郊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子切揭,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,699評論 0 3
  • 第四天 數組【悟空教程】 第04天 Java基礎 第1章數組 1.1數組概念 軟件的基本功能是處理數據狞甚,而在處理數...
    Java幫幫閱讀 1,599評論 0 9
  • 貪心算法 貪心算法總是作出在當前看來最好的選擇。也就是說貪心算法并不從整體最優(yōu)考慮廓旬,它所作出的選擇只是在某種意義上...
    fredal閱讀 9,238評論 3 52
  • /*【程序21】 * 作者 南楓題目:求1+2!+3!+...+20!的和 1. 程序分析:此程序只是把累加變成了...
    HUC南楓閱讀 436評論 0 0
  • 50道經典Java編程練習題哼审,將數學思維運用到編程中來。抱歉哈找不到文章的原貼了,有冒犯的麻煩知會聲哈~ 1.指數...
    OSET我要編程閱讀 6,962評論 0 9