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));
    }    
}
原文地址:https://www.cnblogs.com/tangshengwei/p/6139268.html