zoukankan      html  css  js  c++  java
  • day05-java-(循环问题,数组)

          day05-java-(循环问题,数组)    


    1.三种循环结构的更佳适用情况:
      1)while: "当..."循环
      2)do...while: "直到..."循环
                    要素1与要素3相同时首选
      3)for:固定次数循环

    循环结构的选择:
    1.先看固定次数还是不固定次数:
        固定次数-----首选for
        不固定次数-----再看要素1与3是否相同
            要素1与要素3相同时-----首选do...while
            要素1与要素3不同时-----首选while


    2.嵌套循环:
      1)循环中套循环,一般多行多列时使用,外层控制行,内层控制列
      2)执行过程:外层循环走一次,内层循环走所有次
      3)建议:循环层数越少越好,能用一层就不用两层,能用两层就不用三层
             若需求必须要通过三层以上循环才能解决,说明设计有问题
      4)break只能跳出一层循环


    3.程序=算法+数据结构
      1)算法:解决问题的流程/步骤(顺序、分支、循环)
      2)数据结构:将数据按照某种特定的结构来保存
                 数怎么存
        设计良好的数据结构会导致好的算法


    4.数组:
      1)相同数据类型元素的集合
      2)数组是一种数据类型(引用类型)
      3)数组的定义:
          int[] arr = new int[4];
      4)数组的初始化:
          int[] arr = new int[4]; //0,0,0,0
          int[] arr = {1,3,5,7};  //1,3,5,7
          int[] arr = new int[]{1,3,5,7}; //1,3,5,7
          int[] arr;
          arr = {1,3,5,7}; //编译错误
          arr = new int[]{1,3,5,7}; //正确
          
        //声明浮点型数组d,包含8个元素
        //每个元素都是double型,默认值为0.0
        double[] d = new double[8];

        //声明布尔型数组b,包含26个元素
        //每个元素都是boolean型,默认值为false
        boolean[] b = new boolean[26];

        //声明整型数组a,包含4个元素
        //每个元素都是int类型,默认值为0
        int[] a = new int[4]; //0,0,0,0
        
      5)数组的访问:
        5.1)通过(数组名.length)可以获取数组的长度
              int[] arr = new int[4];
              System.out.println(arr.length); //4
        5.2)通过下标/索引来访问数组中的元素
            下标从0开始,最大到(数组的长度-1)
              int[] arr = new int[3];
              arr[0] = 100; //给arr中第1个元素赋值为100
              arr[1] = 200; //给arr中第2个元素赋值为200
              arr[2] = 300; //给arr中第3个元素赋值为300
              arr[3] = 400; //数组下标越界异常
              System.out.println(arr[arr.length-1]); //输出最后一个元素的值


      6)数组的遍历:
          int[] arr = new int[10];
          for(int i=0;i<arr.length;i++){
            arr[i] = 100;
          }
          for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
          }
          for(int i=arr.length-1;i>=0;i--){
            System.out.println(arr[i]);
          }


      7)数组的复制:
        7.1)System.arraycopy(a,1,a1,0,4);
        7.2)int[] a1 = Arrays.copyOf(a,6);
            a = Arrays.copyOf(a,a.length+1); //扩容
            a = Arrays.copyOf(a,a.length-1); //缩容


      8)数组的排序:
        8.1)Arrays.sort(arr); //升序
        8.2)冒泡原理:
            8.2.1)四个数冒3轮
            8.2.2)每一轮都是从第1个元素开始冒
                  每一次都和它的下一个元素比
            8.2.3)冒出来的就不带它玩了

       9)计算程序执行时间:
        long a = System.currentTimeMillis();
        Arrays.sort(arr);
        long b = System.currentTimeMillis();

        System.out.println(b-a); //排序消耗的毫秒数

    冒泡排序执行过程:
    int[] arr = {45,8,34,1}; //升序
    第一轮:
      45和8比,换,8,45,34,1
      45和34比,换,8,34,45,1
      45和1比,换,8,34,1,45-------45冒出来了
    第二轮:
      8和34比,不换
      34和1比,换,8,1,34,45-------34冒出来了
    第三轮:
      8和1比,换,1,8,34,45--------8冒出来了

    找最大值算法:

    int[] arr = {23,45,67,10};
    1)假设第1个元素最大
        int max = arr[0];
    2)遍历剩余元素,将剩余元素与max对比,
      若剩余元素大于max,则修改max的值为较大的
        for(int i=1;i<arr.length;i++){
          if(arr[i]>max){
            max = arr[i];
          }
        }
    max=23/45/67

    数组操作代码演示:

    package day05;
    import java.util.Arrays;
    
    //数组的演示
    public class ArrayDemo {
        public static void main(String[] args) {
            //6.数组的排序
            int[] arr = {23,56,4,57,24,1,7,9};
            Arrays.sort(arr); //对arr升序
            for(int i=0;i<arr.length;i++){
                System.out.println(arr[i]);
            }
            
            /*
            //5.数组的复制
            int[] a = {10,20,30,40,50};
            //数组的扩容(创建一个新的数组)
            a = Arrays.copyOf(a,a.length+1);
            for(int i=0;i<a.length;i++){
                System.out.println(a[i]);
            }
            */
            /*
            int[] a = {10,20,30,40,50};
            //a:源数组
            //a1:目标数组
            //6:目标数组的长度
            int[] a1 = Arrays.copyOf(a,4);
            for(int i=0;i<a1.length;i++){
                System.out.println(a1[i]);
            }
            */
            /*
            int[] a = {10,20,30,40,50};
            int[] a1 = new int[6];
            //a:源数组
            //1:源数组的起始下标
            //a1:目标数组
            //0:目标数组的起始下标
            //4:复制的元素个数
            System.arraycopy(a,1,a1,0,4);
            for(int i=0;i<a1.length;i++){
                System.out.println(a1[i]);
            }
            */
            
            
            /*
            //4.数组的遍历
            int[] arr = new int[10];
            for(int i=0;i<arr.length;i++){
                arr[i] = (int)(Math.random()*100); 
            }
            for(int i=0;i<arr.length;i++){
                System.out.println(arr[i]);
            }
            */
            
            /*
            //3.数组的访问
            int[] arr = new int[3];
            System.out.println(arr.length); //3.
            arr[0] = 100; //给arr中第1个元素赋值为100
            arr[1] = 200;
            arr[2] = 300;
            //arr[3] = 400; //数组下标越界异常
            System.out.println(arr[arr.length-1]); //300
            */
            
            /*
            //2.数组的初始化
            int[] arr = new int[4]; //0,0,0,0
            int[] arr1 = {1,4,6,8}; //1,4,6,8
            int[] arr2 = new int[]{1,4,6,8}; //1,4,6,8
            int[] arr3;
            //arr3 = {1,4,6,8}; //编译错误
            arr3 = new int[]{1,4,6,8}; //正确
            */
            
            /*
            //1.数组的定义
            //声明整型数组arr,包含10个元素,每个元素都是int类型,默认值为0
            int[] arr = new int[10];
            */
        }
    }

     求数组元素的最大值

    package day05;
    import java.util.Arrays;
    //求数组元素的最大值
    public class MaxOfArray {
        public static void main(String[] args) {
            //给arr赋值
            int[] arr = new int[10];
            for(int i=0;i<arr.length;i++){
                arr[i] = (int)(Math.random()*100);
                System.out.println(arr[i]);
            }
            
            //找arr中的最大值
            int max = arr[0]; //假设第1个元素最大
            for(int i=1;i<arr.length;i++){ //遍历剩余元素
                if(arr[i]>max){ //若剩余元素大于max
                    max=arr[i]; //修改max的值为较大的
                }
            }
            System.out.println("最大值为:"+max);
            
            //扩容
            arr = Arrays.copyOf(arr,arr.length+1);
            //将最大值赋值给arr中的最后一个元素
            arr[arr.length-1] = max;
            for(int i=0;i<arr.length;i++){
                System.out.println(arr[i]);
            }
            
        }
    }
    九九乘法表
    package day05;
    //九九乘法表
    public class MultiTable {
        public static void main(String[] args) {
            for(int num=1;num<=9;num++){ //控制行
                for(int i=1;i<=num;i++){ //控制列
                    System.out.print(i+"*"+num+"="+i*num+"	");
                }
                System.out.println(); //换行
            }
            /*
             * num=4
             *   ......
             * num=3
             *   i=1 1*3=3
             *   i=2 2*3=6
             *   i=3 3*3=9
             *   i=4
             *   换行
             * num=2
             *   i=1 1*2=2
             *   i=2 2*2=4
             *   i=3
             *   换行
             * num=1
             *   i=1 1*1=1
             *   i=2
             *   换行
             */
            
        }
    }

    冒泡排序算法

    package day05;
    //冒泡排序算法
    public class BubbleSort {
        public static void main(String[] args) {
            /*
             * 要求:
             * 1.声明整型数组arr包含10个元素,
             *   每个元素为0到99之间的随机数,
             *   输出每个元素的值
             * 2.冒泡方式对arr进行升序排列
             * 3.输出arr排序后的数据
             */
            int[] arr = new int[10];
            for(int i=0;i<arr.length;i++){
                arr[i] = (int)(Math.random()*100);
                System.out.println(arr[i]);
            }
            for(int i=0;i<arr.length-1;i++){ //控制轮数
                for(int j=0;j<arr.length-1-i;j++){ //控制次数
                    if(arr[j]<arr[j+1]){ //每次都是和它的下一个元素比
                        int t = arr[j]; //满足条件则交换
                        arr[j] = arr[j+1];
                        arr[j+1] = t;
                    }
                    //若前数大于后数则交换,保证前数小于后数(升序)
                    //若前数小于后数则交换,保证前数大于后数(降序)
                }
            }
            
            System.out.println("排序后:");
            for(int i=0;i<arr.length;i++){
                System.out.println(arr[i]);
            }
        }
    }

     课后作业:

    判断一个数字是否是质数:

    方法一,判断?是否为质数:
    package day06;
    public class Test01 {
        public static void main(String[] args) {
            int num = 1;
            boolean flag = true; //1.假设是质数
            //for(int i=2;i<num;i++){ //2/3/4/.../98/99
            //for(int i=2;i<=num/2;i++){ //2/3/4/.../49/50
            for(int i=2;i<=Math.sqrt(num);i++){ //2/3/4/.../9/10
                if(num%i==0){
                    flag = false; //2.修改为不是质数
                    break;
                }
            }
            if(flag){ //3.判断得结论 相当于if(flag==true){
                System.out.println(num+"是质数");
            }else{
                System.out.println(num+"不是质数");
            }
        }
    }
    
    方法二,判断0~100之间的质数:
    package day06;
    import java.util.Scanner;
    public class Test01 {
        public static void main(String[] args) {
            int count = 0; //质数的个数
            for(int num=2;num<=100;num++){
                boolean flag = true;
                for(int i=2;i<=Math.sqrt(num);i++){ //2/3/4/.../9/10
                    if(num%i==0){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    count++; //质数个数增1
                    System.out.print(num+"	");
                    if(count%10==0){
                        System.out.println();
                    }
                }
            }
        }
    }
    
    方法三,判断2~?之间哪些是质数:
    package day06;
    import java.util.Scanner;
    public class Test01 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入查找质数的范围:2~");
            int max = scanner.nextInt();
            scanner.close();
            int numOfPrime = 0;
            for (int n = 2; n <= max; n++) {
                // 判断n是否是质数
                int m = (int) Math.sqrt(n);
                int i = 2;
                for (; i <= m; i++) {
                    if (n % i == 0)
                        break;
                }
                if (i > m) {
                    System.out.print(n + " ");
                    if (++numOfPrime % 10 == 0)
                        System.out.println();
                }
            }
            System.out.println("
    共有" + numOfPrime + "个质数");
        }
    }

    求0~99之间的10个随机数,进行排序,并求出最小数为?

    方法一:
    package day06;
    import java.util.Scanner;
    public class Test01 {
        public static void main(String[] args) {
            int[] arr = new int[10];
            for(int i=0;i<arr.length;i++){
                arr[i] = (int)(Math.random()*100);
                System.out.println(arr[i]);
            }
            
            int min = arr[0];
            for(int i=1;i<arr.length;i++){
                if(arr[i]<min){
                    min=arr[i];
                }
            }
            System.out.println("最小值为:"+min);
            
            int[] arr1 = new int[arr.length+1];
            System.arraycopy(arr,0,arr1,1,arr.length);
            arr1[0] = min;
            for(int i=0;i<arr1.length;i++){
                System.out.println(arr1[i]);
            }
        }
    }
    
    方法二:
    package day06;
    import java.util.Random;
    import java.util.Arrays;
    public class Test01 {
        public static void main(String[] args) {
            //创建一个 10 个长度的数组
            int[] arr = new int[10];
            
            //随机生成 10 个0-99之间的数值,放入数组
            Random ran = new Random();
            for(int i=0;i<arr.length;i++){
                arr[i] = ran.nextInt(100);            
            }
            //打印数组中的数据
            System.out.println("数组中的数据为:" + Arrays.toString(arr));
            
            //查询最小值
            int min = arr[0];
            for(int i=1; i<arr.length; i++) {
                if(min > arr[i]) {
                    min = arr[i];
                }
            }
            System.out.println("最小值是:" + min);
            
            //创建新数组
            int[] arrNew = new int[arr.length + 1];
            //将原数组的元素拷贝进入新数组
            System.arraycopy(arr, 0, arrNew, 1, arrNew.length-1);
            
            //最小值放入新数组第一位,并打印新数组
            arrNew[0] = min;
            System.out.println("新数组中的数据为:" + Arrays.toString(arrNew));
        }    
    }
  • 相关阅读:
    The 2014 ACM-ICPC Asia Xi'an Regional Contest — F题 Color
    CodeForces 358D — Dima and Hares
    VIJOS国庆节模拟赛之繁星春水
    两个算法
    HDU 4901
    Andrew Stankevich Contests #2
    HDU 4701
    HDU 5033
    程序安装出现错误代码为2869
    常用正则表达式总结(以后加了再补充)
  • 原文地址:https://www.cnblogs.com/tangshengwei/p/6139268.html
Copyright © 2011-2022 走看看