【大数据开发】Java语言基础——作业day04

    技术2025-06-21  15

    1.使用递归输出30位的斐波那契数列

    见day03作业

    2.设计一个函数,计算两个日期之间相差多少天。两个日期的年月日由参数控制。

    import java.util.Scanner; class Demo13 { public static void main(String[] args) { int year1,month1,day1; int year2,month2,day2; int all_days; //记录总天数 Scanner sc = new Scanner(System.in); System.out.print("please input year1、month1、day1:"); year1 = sc.nextInt(); month1 = sc.nextInt(); day1 = sc.nextInt(); System.out.print("please input year2、month2、day2:"); year2 = sc.nextInt(); month2 = sc.nextInt(); day2 = sc.nextInt(); //如果年份是同一年则应该分开来计算 if(year1 != year2) { //System.out.println(calRestDays(year1,month1,day1)); //System.out.println(calDays(year2,month2,day2)); //System.out.println(calYear(year1,year2)); all_days = calRestDays(year1,month1,day1) + calDays(year2,month2,day2) + calYear(year1,year2); } else all_days = calDays(year2,month2,day2) - calDays(year1,month1,day1); System.out.print("The totall days are:" + all_days); } //判断是否是闰年 public static boolean isLeap(int year) { if ((year%4 == 0 && year%100 != 0) || year%400 == 0) return true; return false; } public static int calRestDays(int year, int month, int day) { int[] mon = new int[]{31,28,31,30,31,30,31,31,30,31,30,31}; //下标为0~11,月份为1~12 int total_days = 0; int rest_days; //一年总数减去这个日期在这一年的天数 //计算第month月的上一个月之前这一年有多少天 for (int i=0; i<month-1; i++) { total_days += mon[i]; } total_days += day; //System.out.println("total_days:" + total_days); //如果这个月是3、4、5...月份并且是闰年,那这一年要多+1天 //平年是365天,闰年是366天 if(month >2 && isLeap(year)) { total_days++; rest_days = 366-total_days; } else rest_days = 365-total_days; return rest_days; } public static int calDays(int year, int month, int day) { int[] mon = new int[]{31,28,31,30,31,30,31,31,30,31,30,31}; int total_days = 0; //计算第month月的上一个月之前这一年有多少天 for (int i=0; i<month-1; i++) { total_days += mon[i]; } total_days += day; //如果这个月是3、4、5...月份并且是闰年,那这一年要多+1天 //平年是365天,闰年是366天 if(month >2 && isLeap(year)) total_days++; return total_days; } //year1的年份比year2更小 public static int calYear(int year1, int year2) { int sum=0; for (int i = (year1+1); i<year2; i++) { if(!isLeap(i)) sum += 365; else //如果第i年是闰年,那么应该多加一天 { sum += 365; sum++; } } return sum; } }

    3.设计一个函数,判断一个数组是不是一个升序的数组。

    class Demo8 { public static void main(String[] args) { int[] a = new int[]{10,2,5,8}; boolean boo = inc(a); if(boo == true) System.out.print("是升序"); else System.out.print("不是升序"); } public static boolean inc(int[] arr) { int low=0, high=1; while (high < arr.length) { if (arr[low++] > arr[high++]) return false; } return true; } } 4.设计一个函数,将一个数组中的元素倒序排列(注意,不是降序)。 import java.util.Scanner; class Demo9 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] arr = new int[10]; System.out.print("input 10 numers:"); for (int i=0; i<arr.length; i++) { arr[i] = sc.nextInt(); } reverse(arr); for (int i=0; i<arr.length; i++) { System.out.print(arr[i] + " "); } } public static void reverse(int[] arr) { int low=0, high=arr.length-1; while (low<high) { int temp = arr[low]; arr[low] = arr[high]; arr[high] = temp; low++; high--; } } }

    5.将一个数组中的元素拷贝到另外一个数组中

    import java.util.Scanner; class Demo10 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] arr1 = new int[10]; int[] arr2 = new int[10]; //输入arr1、arr2 System.out.print("input 10 numers:"); for (int i=0; i<arr1.length; i++) { arr1[i] = sc.nextInt(); } copyArray(arr1, arr2); //输出arr1、arr2 for (int i=0; i<arr1.length; i++) { System.out.print(arr1[i] + " "); } System.out.println(); for (int i=0; i<arr2.length; i++) { System.out.print(arr2[i] + " "); } } public static void copyArray(int[] arr1, int[] arr2) { int j=0; for (int i=0; i<arr1.length; i++) { arr2[j++] = arr1[i]; } } }

    6. 设计一个函数,比较两个数组中的元素是否相同(数量、每一个数值都相同,才认为是相同的数组)

    class Demo11 { public static void main(String[] args) { int[] arr1 = {1, 5, 3, 4, 5}; int[] arr2 = {1, 2, 3, 4, 5}; boolean boo=isEqual(arr1, arr2); if(boo) System.out.println("isEqual"); else System.out.println("isNotEqual"); } public static boolean isEqual(int[] arr1, int[] arr2) { int i=0,j=0; while (i<arr1.length && j<arr2.length) { if (arr1[i++] != arr2[j++]) return false; } if (i<arr1.length || j<arr2.length) return false; return true; } }

    7.设计一个函数,找出一个整型数组中的第二大的值。

    (1)不可以通过排序实现,不能修改数组中的数据顺序 (2)要考虑到最大的数字可能出现多次

    class Demo12 { public static void main(String[] args) { int[] arr = {6,5,5,4,3,5}; int max = nextMax(arr); System.out.println(arr[max]); } public static int nextMax(int[] arr) { int max1=0, max2=0; int flag=0; for (int i=1; i<arr.length; i++) { if (arr[i] > arr[max1]) { //若发生了交换则另flag=1 flag = 1; max2 = max1; max1 = i; } } //若flag=0,则没有发生交换,max=arr[0] if (flag == 0) { max2=1; for (int i=2; i<arr.length; i++) if (arr[i] > arr[max2]) max2 = i; } return max2; } }
    Processed: 0.012, SQL: 9