當前位置:
首頁 > 知識 > 跳轉語句與數組基礎

跳轉語句與數組基礎

首先繼續來談一下循環:while循環、do…while循環、for each循環。

while循環

與for循環一樣,while也是一個預測試的循環,但是while在循環開始之前,並不能確定重複執行循環開始語句序列的次數。while按不同的條件執行循環語句序列零次或多次。

例:求1+2+……的和,值之和大於1000為止。

package kkzz;

public class SumWhile {

public static void main(String[] args) {

int sum = 0;

int i = 0;

while (sum <= 10000){

sum += i;

i++;

}

System.out.printf("%d",sum);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

10011

1

do…while循環

do語句按不同條件執行一次或多次循環語句序列。do…while循環的測試條件在執行完循環後執行,循環體至少執行一次,而while循環的循環體可能一次也不執行。

do…while循環語句的格式:

do{

循環體語句序列;

}while(條件表達式);

例:求1-100的和、奇數和、偶數和。

package com.k;

public class Dowhile {

public static int sum(int n) {

int sum = 0;

int i = 1;

do {

sum = sum + i;

i++;

} while (i <= n);//1-100求和

return sum;

}

public static int sumodd(int n) {

int sumOdd = 0;

int i = 1;

do {

sumOdd = sumOdd + i;

i += 2;

} while (i <= n);//1-100奇數求和

return sumOdd;

}

public static int sumeven(int n) {

int sumEven = 0;

int i = 2;

do {

sumEven = sumEven + i;

i += 2;

} while (i <= n);//1-100偶數求和

return sumEven;

}

public static void main(String[] args) {

System.out.println(sum(100));

System.out.println(sumodd(100));

System.out.println(sumeven(100));

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

5050

2500

2550

1

2

3

for each 語句

用於循環訪問數組或集合,以獲取所需信息。基本語句格式:for(變數:數據或集合){ 循環體語句序列;}

跳轉語句

跳轉語句用於無條件的轉移控制。使用跳轉語句執行分支,該語句會導致立即傳遞程序控制。Java提供了許多立即跳轉到程序中另一行代碼的語句,包括break、continue、return、throw。Java語言不支持goto語句。

break

break語句用於結束全部循環。

例:1+2+3+……n>1000時,輸出m 的值。

package com.k;

public class Dowhile {

public static int fun1(){

int i = 1;

int tmp = 0;

for(;tmp <= 1000;i ++){

tmp += i;

}

return i - 1;

} //只用for循環

public static int fun2(){

int i = 1;

int tmp = 0;

for(;;i ++){

tmp += i;

if(tmp > 1000){

break;

}

} //break 結束循環黨tmp大於1000時,返回i的值

return i;

}

public static void main(String[] args) {

System.out.println(fun1());

System.out.println(fun2());

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

45

45

1

2

continue

continue語句用於結束本次循環。

例:求既能被3整除又能被5整除的數字。

package com.k;

public class Dowhile {

ublic static void main(String[] args) {

System.out.println("1-100之間既能被3整除又能被5整除的數:");

for (int i = 1; i <= 100; i++) {

if (i % 15 != 0) {

continue;

}

System.out.println(i);

}

}

}

1

2

3

4

5

6

7

8

9

10

11

12

1-100之間既能被3整除又能被5整除的數:

15

30

45

60

75

90

1

2

3

4

5

6

7

return語句

return語句用於終止方法的執行並將控制返回給調用方法。如果方法有返回類型,return語句必須返回這個類型的值。如果方法為void類型,應使用沒有表達式的return語句;如果方法為void類型,方法體最後的return語句可以省略。

數組(Array)

數組是一種數據結構,包含相同類型的一組數據。數組本身是數組引用類型對象,數組元素可以是任何數據類型(簡單類型或引用類型),包括數組類型。

數組有一個「秩(rank)」,確定和每個數組元素的索引個數,其值是數組類型的方括弧對([])的個數。數組的秩又稱為數組的維度。「秩」為1的數組稱為一維數組,「秩」大於1的數組稱為多維數組。維度大小確定的多維數組通常稱為二維數組、三維數組等。

數組的每一個維度都有一個關聯的長度(length),它是一個大於或等於0的整數。創建數組實例時,將確定維度和各維度的長度,它們在該數組實例的整個生存期內保持不變。換言之,對於一個已存在的數組實例,既不能更改它的維度,也不能調整它的維度大小。

Java 語言中提供的數組是用來存儲固定大小的同類型元素。

數組的聲明:

首先必須聲明數組變數,才能在程序中使用數組。因為數組類型為引用類型,數組變數的聲明只是為數組實例的引用留出空間。數組的聲明有以下兩種形式:1.類型[] 數組變數名; //一般用該種形式; 2. 類型 數組變數名[];

例:

int[] arr1; //聲明一個整型數組

byte[] arrByte1; //聲明一個byte類型數組

1

2

數組的實例化(創建)和初始化:

數組在聲明後必須實例化才能使用。數組實例在運行時使用new運算符動態創建(即實例化)。

new運算符指定數組實例的長度。new運算符自動將數組的元素初始化為相應的默認值:簡單數值類型的數組元素默認值設置為零;char類型數組元素被初始化為0(u0000);boolean類型數組元素被初始化為false;而引用類型數組元素的默認值設置為null。使用new運算符創建數組時,還可以通過{}初始化數組的元素。

例:

int[] arr1; //聲明數組

arr1 = new int[10]; //創建一個可以存儲10個整數的數組(實例化數組)

int[] arr2 = new int[10]; //同時聲明和創建數組

arr2 = new int[]{1,2,3,4}; //創建並初始化一個可以存儲5個整數的數組

int[] arr3 = {1,2,3,4,5}; //聲明並初始化一個存儲4個整數的int數組(Java編譯器將自動出啊年數組)

String str[][] = new String[3][4]; //多維數組

1

2

3

4

5

6

如果通過{ }初始化數組的元素,則使用new運算符創建數組不需要也不能指定數組元素的個數,Java編譯器將自動推斷出數組的元素個數。 聲明數組時,可直接初始化(無需使用new運算符創建數組),Java編譯器將自動創建數組(實例化)。

數組的基本訪問操作

通過數組下標(或索引)來訪問數組中的數據元素。可以使用for each循環訪問數組的各個元素。數組下標從0開始,具有n個元素(即維度長度為n)的數組下標是 0~n-1。通過數組的length屬性,可以獲取數組的長度。注意:訪問數組時,如果使用了超過數組下標範圍的索引,即數組越界,則會引發ArrayIndexOutOfBoundsException。

例:

package kkee;

import java.util.Arrays;

public class NewArray {

public static void main(String[] args) {

int[] myList = {9, 2, 4, 5}; //聲明並初始化數組myList

// 列印所有數組元素

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

System.out.println(myList[i] + " ");

}

// 計算所有元素的總和

int total = 0;

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

total += myList[i];

}

System.out.println("Total is " + total);

// 查找最大元素

int max = myList[0];

for (int i = 1; i < myList.length; i++) {

if (myList[i] > max)

max = myList[i];

}

System.out.println("Max is " + max);

Arrays.sort(myList); //Arrays.sort 數組排序

System.out.println(Arrays.toString(myList));

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

9

2

4

5

Total is 20

Max is 9

[2, 4, 5, 9]

1

2

3

4

5

6

7

例:用數組列印斐波那契數列的前20項。

package com.k;

import java.util.Arrays; //導入Arrays包

public class Array {

public static void fabonacci(int[] array){ //數組作為函數的參數

int i;

array[0] = 1;

array[1] = 1;

for(i = 2;i < array.length; i++){

array[i] = array[i - 1] + array[i - 2];

}

}

public static void main(String[] args) {

int[] array = new int[20];

fabonacci(array);

System.out.println(Arrays.toString(array));

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]

1

例: for each輸出數組元素:

package kkee;

import java.util.Arrays;

/**

- @Package: kkee

- @Author:kkz

- @Description:

- @Date:Created in 2018/10/16 17:04

*/

public class Arrayforeach {

public static void main(String[] args) {

int[] array1 = new int[]{1,2,3,4,5};

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

System.out.print(array1[i] + " " );

}

System.out.println();

for(int i : array1) {

System.out.println(i);

}//for each 換行輸出數組元素

System.out.println(Arrays.toString(array1));//返回指定數組的字元串形式

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

1 2 3 4 5

1

2

3

4

5

[1, 2, 3, 4, 5]

1

2

3

4

5

6

7

Arrays 類

java.util.Arrays 類能方便地操作數組,它提供的所有方法都是靜態的。具有以下功能:

(1)給數組賦值:通過 fill 方法。

(2)對數組排序:通過 sort 方法,按升序。

(3)比較數組:通過 equals 方法比較數組中元素值是否相等。

(4)查找數組元素:通過 binarySearch 方法能對排序好的數組進行二分查找

法操作。

(5)複製數組:通過copyOf方法複製數組,截取或默認值填充,結果為相同數據類型的長度為指定長度的數組。

(6)複製數組的指定範圍內容:通過copyO分Range方法從起始索引(包括)到結束索引(不包括),結果為相同的數據類型的數組。

(7)返回指定數組內容的字元串形式:通過toString方法。

練習

1.實現二分查找演算法:有序的數組

pubclic static int binarySearch(int[] array,int key) {} 找到返回下標,沒有找到-1; 數組名,鍵值

二分查找演算法:

二分查找又稱折半查找,它是一種效率較高的查找方法。

折半查找的演算法思想是將數列按有序化(遞增或遞減)排列,查找過程中採用跳躍式方式查找,即先以有序數列的中點位置為比較對象,如果要找的元素值小 於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。通過一次比較,將查找區間縮小一半。 折半查找是一種高效的查找方法。它可以明顯減少比較次數,提高查找效率。但是,折半查找的先決條件是查找表中的數據元素必須有序。

折半查找法的優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用於不經常變動而查找頻繁的有序列表。

二分演算法步驟描述

① 首先確定整個查找區間的中間位置 middle;

② 用待查關鍵字值與中間位置的關鍵字值進行比較;

若相等,則查找成功

若大於,則在後(右)半個區域繼續進行折半查找

若小於,則在前(左)半個區域繼續進行折半查找

③ 對確定的縮小區域再按折半公式,重複上述步驟。

最後,得到結果:要麼查找成功, 要麼查找失敗。折半查找的存儲結構採用一維數組存放。

package mypratice;

/**

* @Package: mypratice

* @Author:kkz

* @Description:

* @Date:Created in 2018/10/16 17:15

*

*/

public class OrderArray {

public static void main(String[] args) {

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 11, 15, 17};

int key = 15; //查找元素

System.out.println("所查找元素在數組中的下標為:" + binarySearch(arr, key, 0, 10));

}

public static int binarySearch(int[] arr, int key,int start,int end) {

start = 0;

end = arr.length - 1;

while (start <= end) {

int middle = start + (end - start) / 2;

if (arr[middle] == key) {

return middle;

} else if (arr[middle] < key) {

start = middle + 1;

} else {

end = middle - 1;

}

}

return -1;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

所查找元素在數組中的下標為:9

1

2

2.求連續子數組的最大和?

{10,2,-1,9,-10,-99}最小值:不能超過0x80000000

從頭到尾遍歷整個數組,用一個整數記錄子數組和的最大值,如果子數組和大於這個值,則更新最大值,如果子數組和為負,子數組和清零,然後繼續往後遍歷。考慮數組全是負數、數組為空等邊界情況即可。

package mypratice;

/**

* @Package: mypratice

* @Author:kkz

* @Description:

* @Date:Created in 2018/10/16 22:45

*/

public class ConstantArray {

public static int SumOfSubArray(int[] array) {

if (array.length==0 || array==null) {

return 0;

}

int currentSum = 0; //存儲當前連續n項的和

int max = 0; //存儲連續子數組和的最大值

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

if(currentSum<=0){ //如過當前連續n項的和小於等於0,則沒必要與後面的元素相加

currentSum = array[i]; //currentSum重新賦值

}else{

currentSum += array[i]; //如果currentSum的值大於0,則繼續與後面的元素相加,

}

if(currentSum>max){ //每次改變currentSum的值都有與max進行比較

max = currentSum; //如果currentSum的值大於max,則將currentSum的值賦值給max

}

}

return max;

}

public static void main(String[] args) {

int[] array = {10,2,-1,9,-10,-99};

int result = SumOfSubArray(array);

System.out.println("連續子數組的最大和為:"+result);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

連續子數組的最大和為:20

1

3.交換兩個數?

package mypratice;

import java.util.Arrays;

/**

* @Package: mypratice

* @Author:kkz

* @Description:

* @Date:Created in 2018/10/16 22:24

*/

public class ChangeValue {

public static void main(String[] args) {

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

int temp = 0; //引入臨時變數,賦初始值為0

temp = arr[1]; //將arr[1]的值賦給temp temp = 1

arr[1] = arr[4]; //將arr[4]的值賦給arr[1] arr[1] = 5

arr[4] = temp; //將temp的值賦給arr[4] arr[4] = 1

System.out.println(Arrays.toString(arr)); //返回指定數組的字元串形式

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

[1, 5, 3, 4, 2]

1

4.逆置數組?{1,2,3,4}===》{4,3,2,1}

package mypratice;

import java.util.Arrays;

/**

* @Package: com.k

* @Author:kkz

* @Description:

* @Date:Created in 2018/10/14 21:09

*

* 逆置數組?{1,2,3,4}===》{4,3,2,1}

* 將數組中的

*/

public class TestArray {

public static void main(String[] args) {

int n = 1/2;

int[] array = {1,2,3,4};//聲明並初始化數組

for(int i = 0;i < (array.length)/2; i ++){

int tmp = array[i];//把數組中的值賦給臨時變數

array[i] = array[array.length - i - 1];//將後面的值賦給數組前面

array[array.length - i - 1] = tmp;//將臨時變數里的值賦給後面 即交換數組前一半與後面的元素

}

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

System.out.println(Arrays.toString(array));

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

[4, 3, 2, 1]

跳轉語句與數組基礎

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

C 中gets() 提示 warning: this program uses gets(), which is
對Linux定時任務的認識

TAG:程序員小新人學習 |