Java数组以及冒泡排序--------07
一、回顾及打印方法版万年历
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相关推荐
- Java数组和冒泡排序
Java数组 数组分一维数组.二维数组和多维数组. 以下详细讲解的是一维数组和简单的冒泡法. 需知Java中数组长度一经定义,固定不变. 一般数组初始化(声明并指定数组长度) 数组的内存模型详解 基础 ...
- Java数组初始化, 冒泡排序, 查找
文章目录 数组快速入门 数组的使用 使用方式1 动态初始化 使用方式2 动态初始化 使用方式3 静态初始化 数组使用注意事项和细节 数组赋值机制 数组翻转 数组扩容 排序的介绍 冒泡排序法 数组的查找 ...
- Java数组实现冒泡排序
冒泡排序的思想: 对于一个乱序的数组,依次比较arr[i] 与 arr[i + 1] 的大小,小的放左边,大的放右边,每次冒泡排序的结果是找出数组中最大的值放在数组最右边,直到数组的值为从小往大排列为 ...
- java 数组的冒泡排序
//将五个整数升序排序 public static void main(String[] args) int[] nums=new int[5]; int i,j; //循环变量 int temp; ...
- java 数组冒泡排序、转置(降序)
1.java 数组冒泡排序 排序的基本原理(升序): 原始数据: 2 .1 .9 .0 .5 .3 .7 .6 .8: 第一次排序: 1 .2 .0 .5 .3 .7 .6 .8 .9 : 第二次 ...
- 18 - java基初 数组介绍 冒泡排序
文章目录 数组 1.数组的定义 2.数组声明创建 3.数组的初始化 1. 静态初始化 2. 动态初始化 3. 数组的默认初始化 4.数组的四个基本特点 5.数组边界 6.数组的使用 for循环 for ...
- java:数组的冒泡排序
eclipse使用Java实现数组的冒泡排序 文章目录 前言 方案 代码实现 前言 声明一个数组,包含10个元素,给每个元素赋值0~99的随机整数,使用冒泡算法对数组进行升序排序,并输出排序后的值 方 ...
- Java实现数组的冒泡排序
定义一个数组,Java实现从小到大冒泡排序. 结果如下: package 企业技术实习1105作业; /** 冒泡排序* */public class demo1 {public static voi ...
- java数组冒泡排序
冒泡排序(Bubble Sort)是常用的数组排序算法之一 冒泡排序 提示:冒泡排序的基本思想是:对比相邻的元素值,如果满足条件就交换元素值,把较小的元素值移动到数组前面,把大的元素值移动到数组后面( ...
- java 奇偶数据排序算法,简单讲解奇偶排序算法及在Java数组中的实现
简单讲解奇偶排序算法及在Java数组中的实现 奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序 举例吧, 待排数组 [6 2 4 1 5 9] ...
最新文章
- BOOK19868595
- shell编程中crontab用法超级详解!
- c++枚举类型(二) 命名空间
- 【django】 F 和 Q 对象
- [HAOI2018] 染色(二项式反演+NTT)
- java iterator获取索引_2020年Java面试题最新整理(1625)
- Coursera机器学习笔记(一) - 监督学习vs无监督学习
- pycharm插件之SonarLint
- mysql中常见的几种索引
- 猴子爬山编程java_Java趣味编程100例
- 搭建SSM全流程框架过程
- Windows活动目录(域服务器)经典系列图文教程
- ORB-SLAM3论文翻译
- 用靠谱助手多开玩梦幻西游手游
- 【英语语法入门】 第22讲 完成时
- 快速备注一下IMSI和IMEI的区别
- NTP网络时钟同步协议对计算机网络数据的重要性
- 面试题:进程间通信的方式
- 工信部行业划分标准 《关于印发中小企业划型标准规定的通知(工信部联企业〔2011〕300号)》
- springBoot防重复提交