1. 编程题 提示用户输入年月日信息,判断这一天是这一年中的第几天并打印。 ```java / 提示用户输入年月日信息,判断这一天是一年中的第几天 /

    import java.util.Scanner;

    public class PrintWhatDay {

    1. //0-声明两个数组分别表示平年与闰年12个月的天数
    2. static int[] arr1 = {31,28,31,30,31,30,31,31,30,31,30,31};
    3. static int[] arr2 = {31,29,31,30,31,30,31,31,30,31,30,31};
    4. public static void main(String[] args) {
    5. //1. 提示用户输入年月日
    6. System.out.println("请依次输入 年 月 日: ");
    7. Scanner sc = new Scanner(System.in);
    8. int year = sc.nextInt();
    9. int month = sc.nextInt();
    10. int day = sc.nextInt();
    11. //2. 调用函数计算总天数
    12. System.out.println(countDays(year, month, day));
    13. }
    14. private static int countDays(int year, int month, int day) { //注意:[静态方法]不能调用 [非 静 态 方 法]
    15. //1. 判断当日year是平年还是闰年
    16. //能被4整除,并且不能被100整除 || 能被400整除
    17. int[] arr = arr1;
    18. if( (year%4 == 0 && year%100 != 0) || (year%400 == 0) ) {
    19. arr = arr2; //将arr指向arr2
    20. }
    21. //2. 计算总天数
    22. int countdays = 0;
    23. for(int i = 0; i < month-1; i++) {
    24. countdays += arr[i];
    25. }
    26. countdays += day;
    27. return countdays;
    28. }

    }

    ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1567843/1594147756553-c02f84e7-35b2-42c4-8f0e-af1b601749dc.png#align=left&display=inline&height=109&margin=%5Bobject%20Object%5D&name=image.png&originHeight=217&originWidth=776&size=29346&status=done&style=none&width=388)
    
    2. 编程题 编程找出 1000 以内的所有完数并打印出来。 所谓完数就是一个数恰好等于它的因子之和,如:6=1+2+3
    ```java
    /*
        编程找出 1000 以内的所有完数并打印出来。
        所谓完数就是一个数恰好等于它的因子之和
            如:6=1+2+3
    */ 
    import java.lang.Math;
    
    public class WanShu {
        public static void main(String[] args) {
            int sum = 0;
            for(int i = 1; i < 1001; i++) {
                for(int j = 2; j <= (int)(Math.sqrt(i)); j++) { //注 :使用sqrt降低算法时间复杂度
                    if(i%j == 0) {
                        sum += (j==i/j)?j:(j + i/j);     //因子是成对出现的
                    }
                }
    
                if(++sum == i) {
                    System.out.println(i);
                }
                //System.out.println(i+":"+sum);
    
                sum = 0;  //每次循环sum需要重置
            }
        }
    }
    

    image.png

    1. 编程题 实现双色球抽奖游戏中奖号码的生成,中奖号码由 6 个红球号码和 1 个蓝球号码组成。 其中红球号码要求随机生成 6 个 1~33 之间不重复的随机号码。 其中蓝球号码要求随机生成 1 个 1~16 之间的随机号码。 ```java /* 实现双色球抽奖游戏中奖号码的生成 中奖号码由 6 个红球号码和 1 个蓝球号码组成。 其中红球号码要求随机生成 6 个 1~33 之间不重复的随机号码。 其中蓝球号码要求随机生成 1 个 1~16 之间的随机号码。

    */ import java.util.Random; import java.util.Arrays;

    public class DoubleColorSphere { public static void main(String[] args) throws Exception { int[] blueSphere = new int[6]; Random ra = new Random();

        /*2-循环摇号,碰到重复重新摇*/
        for(int i = 0; i < blueSphere.length; i++) {
            blueSphere[i] = ra.nextInt(33)+1;
            if(i > 0 && checkNum(blueSphere, i, blueSphere[i])) {
                System.out.println("号码"+blueSphere[i]+"重复,重新摇......");
                Thread.sleep(1000); // 表示模拟睡眠1秒的效果
                /*注意这里需要 -1 */
                i--;
            }
        }
    
        System.out.println("本期开奖号码为:" + Arrays.toString(blueSphere).replace(",", "")+" + "+(ra.nextInt(16)+1));
    }
    
    /*查询arr数组中的前len个元素是否存在var相等的变量*/
    private static boolean checkNum(int[] arr, int len, int var) {
        for(int i = 0; i < len; i++) {
            if(arr[i] == var) {
                //System.out.println(var+" "+ arr[i]);
                return true;
            }
        }
        return false;
    }
    

    }

    ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1567843/1594147882092-6b74f961-53d0-47a0-b1cd-8e4085c0f120.png#align=left&display=inline&height=35&margin=%5Bobject%20Object%5D&name=image.png&originHeight=69&originWidth=797&size=13514&status=done&style=none&width=398.5)
    
    4. 编程题 自定义数组扩容规则,当已存储元素数量达到总容量的 80%时,扩容 1.5 倍。 例如,总容量是 10,当输入第 8 个元素时,数组进行扩容,容量从 10 变 15。
    ```java
    /*
        自定义数组扩容规则 当已存储元素数量达到总容量的 80%时,扩容 1.5 倍。 
        例如,总容量是 10,当输入第 8 个元素时,数组进行扩容,容量从 10 变 15。
    */
    import java.util.Random;
    import java.util.Arrays;
    
    public class ExpandArray {
        public static void main(String[] args) throws Exception {
            //1. 定义数组
            int[] arra = new int[10];
            int highNum = arra.length*8/10; //预警值
            Random ra = new Random();
    
            int i = 0;
    
            //2. 用for循环赋值,当已存储元素数量达到总容量的80%,扩容处理
            while(true) {
                arra[i++] = ra.nextInt(10);
                if(i >= highNum) {
                    System.out.println("扩容中......");
                    //System.out.println("before:"+Arrays.toString(arra));
                    Thread.sleep(1500); // 模拟睡眠1500ms的效果
                    int newLen = arra.length*15/10;
                    //int newLen = (arra.length + arra.length>>1);
                    System.out.println("扩容后的长度:"+newLen);
                    int[] newArr = new int[newLen];
                    System.arraycopy(arra, 0, newArr, 0, highNum);
                    arra = newArr;
                    //System.out.println("After:"+Arrays.toString(arra));
                    highNum = arra.length*8/10;
                }
            }
        }
    }
    

    image.png

    1. 编程题 使用二维数组和循环实现五子棋游戏棋盘的绘制,具体如下:

    模块一作业 - 图3

    /*
        编程题 使用二维【整型】数组和循环实现五子棋游戏棋盘的绘制
    */
    
    public class DrawPannel {
        public static void main(String[] args) {
            int[][] arr = new int[17][17];
            /*1. 数组的初始化操作*/
            for(int i = 0x0; i <= 0xf+1; i++) {
                for(int j = 0x0; j <= 0xf+1; j++) { 
                    if( (i==0 || j==0) && (i + j > 0)) {
                        arr[i][j] = i+j-1;
                    }
                }
            }
            /*2. 打印数组元素*/
            for(int i = 0x0; i <= 0xf+1; i++) {
                for(int j = 0x0; j <= 0xf+1; j++) {
                    if( i+j == 0)
                        System.out.print("   ");
                    else if(i==0 || j==0) {
                        System.out.printf("%x  ", arr[i][j]); //格式化输出
                    }
                    else {
                        System.out.print("+  ");
                    }
                }
                System.out.println();
            }
        }
    }
    

    image.png