一、回顾及打印方法版万年历

package com.qf.test01;import java.util.Scanner;public class Test01 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入年:");int year = scan.nextInt();System.out.println("请输入月:");int month = scan.nextInt();//计算总天数int allDay = getAllDayOfYear(1900, year) + getAllDayOfMonth(year, 1, month) + 1;//计算星期int week = getWeek(allDay);//获取当月的天数int day = getDay(year, month);//打印日历printCalendar(year, month, day, week);//关闭资源scan.close();}//打印日历public static void printCalendar(int year, int month, int day, int week){System.out.println(" ---" + year + "年" + month + "月---");System.out.println("一\t二\t三\t四\t五\t六\t日");int num = 0;//控制换行//打印空格for(int i = 1;i<week;i++){System.out.print("\t");num++;}//打印日期for(int i = 1;i<=day;i++){System.out.print(i + "\t");num++;if(num % 7 == 0){System.out.println();}}}//获取星期public static int getWeek(int allDay){int week = allDay%7;if(week == 0){week = 7;}return week;}//获取月的总天数public static int getAllDayOfMonth(int year, int start, int end){int allDayOfMonth = 0;for (int i = start; i < end; i++) {allDayOfMonth += getDay(year, i);}return allDayOfMonth;}//获取当月的天数public static int getDay(int year, int month){int day = 0;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:day = 31;break;case 4:case 6:case 9:case 11:day = 30;break;case 2:if(isLeapYear(year)){day = 29;}else{day = 28;}break;}return day;}//获取年的总天数public static int getAllDayOfYear(int start, int end){int allDayOfYear = 0;for (int i = start; i < end; i++) {if(isLeapYear(i)){//闰年allDayOfYear += 366;}else{//平年allDayOfYear += 365;}}return allDayOfYear;}//判断闰年public static boolean isLeapYear(int year) {if(year%4==0 && year%100!=0 || year%400==0){return true;}return false;}}

二、冒泡排序

package com.qf.test02;public class Test01 {public static void main(String[] args) {/*** * 冒泡排序口诀:*        N个数字来排序*        两两相比小靠前*        外层循环N-1*        内层循环N-1-i* * 有兴趣研究下其他的排序算法*     https://blog.csdn.net/weixin_45082647/article/details/104149152*/int[] is = {64,12,81,8,45,27};for(int i = 0;i<is.length-1;i++){for(int j = 0;j<is.length-1-i;j++){if(is[j] > is[j+1]){int temp = is[j];is[j] = is[j+1];is[j+1] = temp;}}}for (int e : is) {System.out.println(e);}}
}

2.1数组遍历

package com.qf.test03;public class Test01 {public static void main(String[] args) {/*** 知识点:数组的查找 -- 顺序查找* * 设计思想:从头到尾遍历数组*/int[] is = {64,12,81,8,45,27};int num = 81;//要查找的元素for (int i = 0; i < is.length; i++) {if(is[i] == num){System.out.println("查找到元素了");}}}
}

2.2遍历循环2分法查找

package com.qf.test03;
import java.util.Arrays;
public class Test02 {public static void main(String[] args) {/*** 知识点:数组的查找 -- 二分法查找* * 设计思想:把数组一分为二,缩小范围的查找方式* 注意:使用二分法查找之前,必须先排序*/int[] is = {64,12,81,8,45,27};int num = 81;//要查找的元素//排序:8 12 27 45 64 81 Arrays.sort(is);int start = 0;int end = is.length-1;while(start <= end){int mid = (start + end)/2;if(num > is[mid]){start = mid+1;}else if(num < is[mid]){end = mid-1;}else{System.out.println("找到元素了");break;}}}
}

三、数组的复制

3.1缺点

package com.qf.test04;public class Test01 {public static void main(String[] args) {  //原数组String[] names = {"水菜丽","朝桐光","濑亚美莉","深田咏美"};//新数组String[] newNames = names;//修改原数组中的数据names[0] = "高正";//遍历新数组for (String str : newNames) {System.out.println(str);}}
}

3.2数组复制2

package com.qf.test04;public class Test02 {public static void main(String[] args) {//原数组String[] names = {"水菜丽","朝桐光","濑亚美莉","深田咏美"};//新数组String[] newNames = new String[names.length];//将原数组中的数据迁移到新数组中for (int i = 0; i < names.length; i++) {newNames[i] = names[i];}//修改原数组中的数据names[0] = "高正";//遍历新数组for (String str : newNames) {System.out.println(str);}}
}

3.3数组的扩容

package com.qf.test04;public class Test03 {public static void main(String[] args) {/*** 知识点:数组的扩容*///原数组String[] names = {"水菜丽","朝桐光","濑亚美莉","深田咏美"};//创建新的数组(是原数组长度1.5倍)int oldCapacity = names.length;int newCapacity = oldCapacity + (oldCapacity>>1);String[] newNames = new String[newCapacity];//将原数组所有的数据迁移到新数组中for (int i = 0; i < names.length; i++) {newNames[i] = names[i];}//将新数组的地址赋值给原数组names = newNames;//遍历原数组for (String str : names) {System.out.println(str);}}
}

3.4数组的删除1

package com.qf.test04;public class Test04 {public static void main(String[] args) {/*** 缺点:数组本来说是一个存储数据的容器,删除一个元素,就把容器的空间给缩小了(不合理的设计思想)*///原数组String[] names = {"水菜丽","朝桐光","濑亚美莉","深田咏美"};//创建新数组String[] newNames = new String[names.length-1];//除了要删除的元素("朝桐光"),把 其余的元素迁移到新数组中int index = 0;//新数组的下标for (String str : names) {if(!str.equals("朝桐光")){newNames[index++] = str;}}//将新数组的地址赋值给原数组names = newNames;//遍历原数组for (String str : names) {System.out.println(str);}}
}

3.5数组的删除2

package com.qf.test04;public class Test05 {public static void main(String[] args) {//原数组String[] names = {"水菜丽","朝桐光","濑亚美莉","深田咏美"};//迁移数据(把要删除的元素后面的数据往前移)for (int i = 1; i < names.length-1; i++) {names[i] = names[i+1];}//把最后一个元素赋值为nullnames[names.length-1] = null;//遍历原数组for (String str : names) {System.out.println(str);}}
}

3.6需求

设计一个方法,传入一个int类型的数组,返回最大值和最小值

package com.qf.test05;public class Test01 {public static void main(String[] args) {int[] is = {64,12,81,8,45,27};int[] method = method(is);System.out.println("最大值为:" + method[0]);System.out.println("最小值为:" + method[1]);}public static int[] method(int[] is){//假设下标为0的元素是最大值int max = is[0];//假设下标为0的元素是最小值int min = is[0];for (int i = 1; i < is.length; i++) {if(max < is[i]){max = is[i];}if(min > is[i]){min = is[i];}}return new int[]{max,min};}
}

总结:
1.数组可以作为方法的参数传入到方法内部
2.数组可以作为返回值将方法内部的多个参数返回给调用方

3.7可变数

package com.qf.test05;public class Test02 {public static void main(String[] args) {//实参作为元素压入到数组中int max = getMax(1,2,3);System.out.println(max);}//可变参数底层就是数组public static int getMax(int... is){int max = is[0];for (int i = 1; i < is.length; i++) {if(max < is[i]){max = is[i];}}return max;}//可变参数后面不能加其他参数public static void method(String str,int...is){}
}

3.8Arrays工具类

package com.qf.test05;import java.util.Arrays;public class Test03 {public static void main(String[] args) {/**** 含义:Java给我们提供的专门操作数组的工具类* * 工具类--该类方法都是静态的,直接使用类名调用* API -- Java类的使用说明书*/int[] is = {64,12,81,8,45,27};//排序:8, 12, 27, 45, 64, 81Arrays.sort(is);//查找(前提必须先排序)//返回值:如果查找的数据在数组内,返回下标,否则返回 -插入点-1int index = Arrays.binarySearch(is, 12);System.out.println("获取查找元素的下标:" + index);//拷贝数组int[] copyOf = Arrays.copyOf(is, is.length*2);//拷贝区间(开始下标-包含,结束下标-不包含)int[] copyOfRange = Arrays.copyOfRange(copyOf, 2, 8);//替换Arrays.fill(copyOfRange, 888);Arrays.fill(copyOfRange, 1, 4, 666);//(开始下标-包含,结束下标-不包含)//将数组转换为字符串System.out.println(Arrays.toString(copyOfRange));}
}

四、内存图

Java数组以及冒泡排序--------07相关推荐

  1. Java数组和冒泡排序

    Java数组 数组分一维数组.二维数组和多维数组. 以下详细讲解的是一维数组和简单的冒泡法. 需知Java中数组长度一经定义,固定不变. 一般数组初始化(声明并指定数组长度) 数组的内存模型详解 基础 ...

  2. Java数组初始化, 冒泡排序, 查找

    文章目录 数组快速入门 数组的使用 使用方式1 动态初始化 使用方式2 动态初始化 使用方式3 静态初始化 数组使用注意事项和细节 数组赋值机制 数组翻转 数组扩容 排序的介绍 冒泡排序法 数组的查找 ...

  3. Java数组实现冒泡排序

    冒泡排序的思想: 对于一个乱序的数组,依次比较arr[i] 与 arr[i + 1] 的大小,小的放左边,大的放右边,每次冒泡排序的结果是找出数组中最大的值放在数组最右边,直到数组的值为从小往大排列为 ...

  4. java 数组的冒泡排序

    //将五个整数升序排序 public static void main(String[] args) int[] nums=new int[5]; int i,j; //循环变量 int temp; ...

  5. java 数组冒泡排序、转置(降序)

    1.java 数组冒泡排序 排序的基本原理(升序): 原始数据:  2 .1 .9 .0 .5 .3 .7 .6 .8: 第一次排序: 1  .2 .0 .5 .3 .7 .6 .8 .9 : 第二次 ...

  6. 18 - java基初 数组介绍 冒泡排序

    文章目录 数组 1.数组的定义 2.数组声明创建 3.数组的初始化 1. 静态初始化 2. 动态初始化 3. 数组的默认初始化 4.数组的四个基本特点 5.数组边界 6.数组的使用 for循环 for ...

  7. java:数组的冒泡排序

    eclipse使用Java实现数组的冒泡排序 文章目录 前言 方案 代码实现 前言 声明一个数组,包含10个元素,给每个元素赋值0~99的随机整数,使用冒泡算法对数组进行升序排序,并输出排序后的值 方 ...

  8. Java实现数组的冒泡排序

    定义一个数组,Java实现从小到大冒泡排序. 结果如下: package 企业技术实习1105作业; /** 冒泡排序* */public class demo1 {public static voi ...

  9. java数组冒泡排序

    冒泡排序(Bubble Sort)是常用的数组排序算法之一 冒泡排序 提示:冒泡排序的基本思想是:对比相邻的元素值,如果满足条件就交换元素值,把较小的元素值移动到数组前面,把大的元素值移动到数组后面( ...

  10. java 奇偶数据排序算法,简单讲解奇偶排序算法及在Java数组中的实现

    简单讲解奇偶排序算法及在Java数组中的实现 奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序 举例吧, 待排数组 [6 2 4 1 5 9] ...

最新文章

  1. BOOK19868595
  2. shell编程中crontab用法超级详解!
  3. c++枚举类型(二) 命名空间
  4. 【django】 F 和 Q 对象
  5. [HAOI2018] 染色(二项式反演+NTT)
  6. java iterator获取索引_2020年Java面试题最新整理(1625)
  7. Coursera机器学习笔记(一) - 监督学习vs无监督学习
  8. pycharm插件之SonarLint
  9. mysql中常见的几种索引
  10. 猴子爬山编程java_Java趣味编程100例
  11. 搭建SSM全流程框架过程
  12. Windows活动目录(域服务器)经典系列图文教程
  13. ORB-SLAM3论文翻译
  14. 用靠谱助手多开玩梦幻西游手游
  15. 【英语语法入门】 第22讲 完成时
  16. 快速备注一下IMSI和IMEI的区别
  17. NTP网络时钟同步协议对计算机网络数据的重要性
  18. 面试题:进程间通信的方式
  19. 工信部行业划分标准 《关于印发中小企业划型标准规定的通知(工信部联企业〔2011〕300号)》
  20. springBoot防重复提交

热门文章

  1. IEEE文献高级检索
  2. 揭示模式(Revealing Module)
  3. bing输入法linux,必应Bing输入法特殊符号输入方法图文教程
  4. 震惊,java8 Nashorn和laytpl居然能擦出这样火花!
  5. mysql通过Navcat 备份数据.psc 还原数据时 只有表没有数据解决方法
  6. WEB前端知识大整合之JS表单验证
  7. java购物结算_Java编写网上超市购物结算功能程序
  8. Google Chrome常用插件推荐
  9. 两数互素有什么性质_两个数互质是什么意思 判断互质数的方法有哪些
  10. adjacent_diffenerce