Educoder-Java ⼊门-数组进阶各关卡题⽬总结
第1关:的复制
1、编程要求:
在右侧编辑器Begin-End中填充代码,将arr1数组中的数据全部复制给arr2数组,最后输出arr2中所有的数据。
2、测试效果:
我会对你的程序进⾏测试,如下:
测试输⼊:1,3,12
预期输出:
1
3
12
测试输⼊:2,13,11
预期输出:
2
13
11
3、程序设计思路:
(1)数组的数组名中储存的实际是数组的值,所以不能⽤数组名直接复制。
(2)采⽤for循环将arr1⾥⾯的元素循环赋予arr2⾥⾯的元素。
4、程序实现:
第2关:数组中元素的查
1、编程要求:
在右侧编辑器Begin-end处填充代码,实现在数组中查指定字符串位置的功能。
2、测试效果: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 **********/ }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
测试输⼊:张三
预期输出:张三在数组的第1个位置
测试输⼊:张富贵
预期输出:张富贵在数组的第5个位置
3、程序实现:
4、题⽬总结:(1)变量被创建的时候就相当于在内存中开辟空间,⽐较的是两个对象的内存地址,重新创建的变量与原变量内存地址不同,所以不能⽤⽐较。
(2)若没有进⾏对象创建,⽽是仅仅对相同类型变量进⾏了两次声明,两个变量内存地址相同。
如String str = "hello"和String str1 = "hello"没有进⾏对象的创建,⽽是同时指向的⼀个对象,所以他们的内存地址是相同的。第3关:交换算法
1、编程要求:
是时候检验⼀下啦,在右侧编辑器Begin-end中填充代码,完成两个变量的交换吧。
2、测试效果:
测试输⼊:3,5
预期输出:
5
3
测试输⼊:4,2
预期输出:
2package 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 **********/ }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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、程序实现:
第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 ); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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、程序实现:
5、题⽬总结:
(1)对于数组的输出有更简单的⽅法:String(数组)可以直接输出数组中的值。
(2)选择排序更优化⽅法思考。
第5关:冒泡排序
1、编程要求:
在编辑器Begin-end处填充代码,使⽤冒泡排序对数组arr进⾏升序排序,最后输出排序之后数组arr中的数据。
2、测试效果: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 **********/ }}
1
2
3
4
5
6
7
8
9
10
11
12
13
数组全部赋值为114
15
16
17
18
19
20
21
22
23
24
25
预期输⼊: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 **********/ }} 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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论