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
数组全部赋值为1
14
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小时内删除。