第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 **********/ } }