第1關:數組的復制
Begin-End
中填充代碼,將
arr1
數組中的數據全部復制給
arr2
數組,最后輸出
arr2
中所有的數據。
1
,
3
,
12
1
3
12
2
,
13
,
11
2
13
11
package step1; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { //動態構建arr1 int[] arr1 = new int[3]; Scanner sc = new Scanner(System.in); for(int i = 0 ; i< arr1.length ; i++){ arr1[i] = sc.nextInt(); } /********** Begin **********/ //創建數組arr2 int[] arr2 = new int[3]; //使用for循環將arr1的數據復制給arr2 for(int j =0 ; j<arr1.length ; j++){ arr2[j] =arr1[j]; System.out.println(arr2[j]); } /********** End **********/ } }
第2關:數組中元素的查找
1、編程要求:
在右側編輯器Begin-end
處填充代碼,實現在數組中查找指定字符串位置的功能。
2、測試效果:
測試輸入:張三
預期輸出:張三在數組的第1個位置
測試輸入:張富貴
預期輸出:張富貴在數組的第5個位置
3、程序實現:
package step2; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //str為要查找的字符串 String str = sc.next(); /********** Begin **********/ //創建數組 arr 給數組賦值 {"張三","張三豐","張無忌","王二麻子","張富貴"} String[] arr =new String[]{"張三","張三豐","張無忌","王二麻子","張富貴"}; for(int i=0;i<5;i++){ if(str.equals(arr[i])){ System.out.println(str+"在數組的第"+(i+1)+"個位置"); } } /********** End **********/ } }
4、題目總結:
(1)變量被創建的時候就相當於在內存中開辟空間,==
比較的是兩個對象的內存地址,重新創建的變量與原變量內存地址不同,所以不能用==比較。
(2)若沒有進行對象創建,而是僅僅對相同類型變量進行了兩次聲明,兩個變量內存地址相同。
如String str = "hello"
和String str1 = "hello"
沒有進行對象的創建,而是同時指向的一個對象,所以他們的內存地址是相同的。
第3關:交換算法
1、編程要求:
是時候檢驗一下啦,在右側編輯器Begin-end
中填充代碼,完成兩個變量的交換吧。
2、測試效果:
測試輸入:3
,5
預期輸出:
5
3
測試輸入:4
,2
預期輸出:
2
4
3、程序設計思路:
兩個變量數值的交換有三種換發:
(1)借助中間量交換 (開發常用)
理解:三個杯子,兩杯裝水,其中一個空杯子用作容器。
int x = 10; int y = 20; int z = x; x = y; y = z;
(2)位移運算交換 (面試常用)
理解:涉及到了異或運算符的規則:一個數對另一個數位異或兩次,該數不變
int x = 10; int y = 20; x = x ^ y; y = x ^ y; x = x ^ y;
(3)數值相加減交換
理解:先求得兩數的和再進行減運算
int x = 10; int y = 20; x = x + y; y = x - y; x = x - y;
4、程序實現:
package step3; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); /********** Begin **********/ //將a的值賦給b b的值賦給a int i =b; b=a; a=i; /********** End **********/ System.out.println(a); System.out.println(b); } }
第4關:選擇排序
1、編程要求:
在右側Begin-End
區域中添加代碼,實現對數組arr
的降序排序,並輸出排序后的arr
數組。
2、測試效果:
我會對你的程序進行測試;
預期輸入:6
,6
,5
,0
,2
,8
,9
預期輸出:[9, 8, 6, 5, 2, 0]
預期輸入:4
,3
,12
,1
,13
預期輸出:[13, 12, 3, 1]
3、程序設計思路:
(1)首先思考內層循環,對數組進行降序排序,也就是要將元素按從大到小排列到數組中,首先就是想辦法把最大值放到首位。
(2)首位解決了,要循環重復第(1)步操作,值得注意的是首位不需要考慮,所以在內層循環的變量初始值要做出改變。
4、程序實現:
package step4; import java.util.Arrays; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //動態創建數組 int[] arr = new int[sc.nextInt()]; for(int i = 0 ; i< arr.length ; i++){ arr[i] = sc.nextInt(); } /********** Begin **********/ for (int j = 0; j < arr.length - 1; j++) { for (int i = j; i < arr.length -1; i++) { if(arr[j] < arr[i+1]){ int temp = arr[j]; arr[j] = arr[i+1]; arr[i+1] = temp; } } } System.out.println(Arrays.toString(arr)); /********** End **********/ } }
5、題目總結:
(1)對於數組的輸出有更簡單的方法:Arrays.toString(數組)
可以直接輸出數組中的值。
(2)選擇排序更優化方法思考。
第5關:冒泡排序
1、編程要求:
在編輯器Begin-end
處填充代碼,使用冒泡排序對數組arr
進行升序排序,最后輸出排序之后數組arr
中的數據。
2、測試效果:
預期輸入:6
,9
,5
,8
,0
,2
,6
預期輸出:[0, 2, 5, 6, 8, 9]
預期輸入:4
,3
,12
,13
,0
預期輸出:[0, 3, 12, 13]
3、程序設計思路:
(1)將序列當中的左右元素,依次比較,如果左邊的元素大於右邊元素則交換位置,保證右邊的元素始終大於左邊的元素。
(2) 第一輪結束后,序列最后一個元素一定是當前序列的最大值。
(3)對序列當中剩下的n
-1個元素再次執行步驟1
。對於長度為n
的序列,一共需要執行n
-1輪比較。
4、程序實現:
package step5; import java.util.Arrays; import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //動態創建數組 int[] arr = new int[sc.nextInt()]; for(int i = 0 ; i< arr.length ; i++){ arr[i] = sc.nextInt(); } /********** Begin **********/ for(int j = 1 ; j< arr.length;j++){ for (int i = 0; i < arr.length -j; i++) { if(arr[i] > arr[i+1]){ int temp = arr[i];//交換位置 arr[i] = arr[i+1]; arr[i+1] = temp; } } } System.out.println(Arrays.toString(arr)); /********** End **********/ } }