美文网首页
Java基础重点复习,

Java基础重点复习,

作者: 唯死撑尔 | 来源:发表于2019-04-26 17:49 被阅读0次

    break:用于终止整个循环。

    continue:用于中止本次循环,进入下一次循环。

    递归

    方法自身调用自身的过程叫做方法的递归(recursion)

    递归问题的特点

    一个问题可被分解为若干层简单的子问题

    子问题和其上层问题的解决方案一致

    外层问题的解决依赖于子问题的解决

    需求:求5的阶乘(5!)

    分析:

    5! = 5*4!

    4! = 4*3!

    3! = 3*2!

    2! = 2*1!

    1! = 1;

    public class Test03{

        public static int rec(int n){

           if(1 == n){

               return 1;

           }

           return n * rec(n-1);

        }

        public static void main(String[] args){

           int a = 5;

           int r = rec(a);

           System.out.println("r = " + r);

        }

    }

    递归执行过程

    递归效率稍低。

    递归结构包括两个部分:

    递归结束条件。解答:什么时候不调用自身方法。如果没有条件,将陷入死循环。

    递归体。解答:什么时候需要调用自身方法。

    总结

    递归的优点

    简单的程序

    递归的缺点

    但是递归调用会占用大量的系统堆栈,内存耗用多,

    在递归调用层次多时速度要比循环慢的多

    递归的使用场合

    任何可用递归解决的问题也能使用迭代解决。

    当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;

    在要求高性能的情况下尽量避免使用递归,递归既花时间又耗内存。

    查找算法

    import java.util.Scanner;

    public class Test08{

        public static void main(String[] args){

              // 数组的查找

           int[] arr = {8,4,2,1,23,344,12};

           Scanner sc = new Scanner(System.in);

           //

              System.out.println("请键盘输入一个数:");

           int t = sc.nextInt();

           int loc = -1;

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

               if(t == arr[i]){

                  loc = i;

                  break;

               }

           }

           if(loc < 0){

                   System.out.println("没找到元素");

           }else{

                   System.out.println("找到元素:"+loc);

           }

        }

    }

    数组的插入算法

    需求:有一个有序的数组,向数组中添加一个元素后,依然保持数组有序。

    public class Test09{

        public static void main(String[] args){

              // 数组的查找

           // {1,3,5,9,12};

           int[] arr = new int[6];

           arr[0] = 1;

           arr[1] = 3;

           arr[2] = 5;

           arr[3] = 9;

           arr[4] = 12;

           int t = 0;

              // 【1】找位置

           int loc = -1;

           for(int i=0;i<arr.length-1;i++){

               if(arr[i] > t){

                  loc = i;

                  break;

               }

           }

           // System.out.println("loc="+loc);

              // 【2】移动元素

           if(loc < 0){

                   // 数组中的元素比要添加的数都小

               arr[arr.length-1] = t;

           }else{

                   // 在数组中找到位置

               for(int i = arr.length-1;i>loc;i--){

                  arr[i] = arr[i-1];

               }

               arr[loc] = t;

           }

              // 【3】遍历元素

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

               System.out.print(arr[i]+"\t");

           }

        }

    }

    数组的删除算法

    需求:有一个有序的数组,删除数组一个元素,依然保持数组有序。

    public class Test10{

        public static void main(String[] args){

              // 数组元素的删除

           int[] arr = {1,3,5,9,12};

           int t = 3;

              // 【1】找位置

           int loc = -1;

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

               if(t == arr[i]){

                  loc = i;

                  break;

               }

           }

           if(loc < 0){

                   System.out.println("数组中没有找到目标元素");

           }else{

               for(int i=loc;i<arr.length-1;i++){

                  arr[i] = arr[i+1];

               }

                   // 覆盖残留值

               arr[arr.length-1] = 0;

           }

              // 【3】遍历

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

               System.out.print(arr[i]+"\t");

           }

        }

    }

    冒泡排序

    public class Test01{

        public static void main(String[] args){

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

           int tmp = 0;

              // for循环用于控制趟数

           for(int i=0;i<arr.length-1;i++){

                   // 内层for用于控制两两比较次数

               for(int j=0;j<arr.length-1-i;j++){

                  if(arr[j]>arr[j+1]){

                      tmp = arr[j];

                      arr[j]=arr[j+1];

                      arr[j+1]=tmp;

                  }

               }

           }

              // 遍历

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

               System.out.print(arr[i]+"\t");

           }

        }

    }

    数组的常用方法

    import java.util.Arrays;

    public class Test03{

        public static void main(String[] args){

              // 【2】排序方法(升序)

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

           String[] arr2 = {"cello","bworld","ava"};

           Arrays.sort(arr2);

              // 方法的调用可以嵌套

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

              // 【3】二分法查找算法

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

           // {1,2,3,4,5}

           Arrays.sort(arr3);

              // 对有序的且无重复元素的数组进行查找。

           int index = Arrays.binarySearch(arr3,6);

           System.out.println("index:"+index);

        }

    }

    二分法(折半查找)查找算法

    private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) {

            int low = fromIndex;

            int high = toIndex - 1;

            while (low <= high) {

                int mid = (low + high) >>> 1;

                int midVal = a[mid];

                if (midVal < key)

                    low = mid + 1;

                else if (midVal > key)

                    high = mid - 1;

                else

                    return mid; // key found

            }

            return -(low + 1);  // key not found.

        }

    如果找到返回key在数组中的位置;如果找不到,返回-(插入点+1)。插入点就是key应该插入到数组的具体位置。

    import java.util.Arrays;

    public class Test04{

        public static void main(String[] args){

              // 【5】数组的复制

           int[] arr3 = {1,2,3};

              // 注意:arr3和arr3Cpy是两个不同的内存空间,相互独立

           int[] arr3Cpy = Arrays.copyOf(arr3,5);

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

              // 【6】数组的复制

           // System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

              // System.arraycopy(源数组,源起始索引,目标数组,目标起始索引,长度)

           int[] arr4 = {1,2,3};

           int[] arr4Cpy = new int[arr4.length];

           System.arraycopy(arr4,1,arr4Cpy,0,3);

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

        }

    }

    注意:arraycopy会出现越界的问题。

    相关文章

      网友评论

          本文标题:Java基础重点复习,

          本文链接:https://www.haomeiwen.com/subject/dwvqnqtx.html