JavaNote2
来源:互联网 发布:汉王pdf ocr mac版 编辑:程序博客网 时间:2024/05/21 22:44
class Life{ public static void main(String[] args){ int alive; while(alive) { eat(); sleep(); code(); repeat(); } }}
老人说,这不丢脸,也无损真正的骄傲.
1.简单语句
条件语句(if, if()else{}, if() else, if{} else if{}else{})
switch多分支语句
// Switch不是循环 楼主之前一直认为switch是循环里面的一种public static void main(String[] args){ String i = "星期一"; //之前在其他博客里面看见有人说switch条件只能是字符和数字型, //楼主这已经做了案例,字符串也是可以的. switch(i){ case "星期一" : System.out.println("星期一"); break; case "2" : System.out.println("星期二"); break; case "3" : System.out.println("星期三"); break; case "4" : System.out.println("星期四"); break; case "5" : System.out.println("星期五"); break; case "6" : System.out.println("星期六"); // 如果不打break,则直接进入下一条执行语句不再看下一条的条件 case "7" : System.out.println("星期天"); break; default : System.out.println("你是个瓜皮!"); } switch(i){ case "1" : case "2" : case "3" : case "4" : case 5 : System.out.println("如果1,2,3,4,5执行的是相同语句则可以这样省略写"); default : System.out.println("给石头点个赞哦!"); }}
循环语句(单纯的理解循环简单, 合理运用就有点难度了, 楼主更多的喜欢for循环.)
for循环
for循环在大多数编程语言都有, for运用太广了, 就不细说.
在这里想起一个我们老师讲的搞笑的小故事.印度人写99乘法表.有兴趣的同学可以网上搜一搜
附上for循环写的两种排序, 冒泡排序,插入排序
//冒泡排序 bubble sortstatic int[] bubbleSort(int[] arr){ int i; int j; int temp = 0; for(i = 0; i < arr.length; i++){ for(j = 0; j < arr.length - 1 - i; j++){//除去右移的大数的数量 if(arr[j] > arr[j+1]){ //两数比较 大数右移 移后不参与下次运算 temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr;}//选择排序 select sortstatic int[] selectSort(int[] arr){ int i; int j; int temp = 0; int minIndex = 0; for(i = 0; i < arr.length; i++){ minIndex = i; for(j = i + 1; j < arr.length; j++){ if(arr[minIndex] > arr[j]){ // 关键 储存每一轮的最小数的索引 minIndex = j; } } if(minIndex != i){ // 调换位置 temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } return arr;}
while循环
- PS一个while 和 do..while 的不同点:while是先判断条件再执行循环体, do..while是先执行一遍再判断条件是否执行.
do .. while循环
- 和 while 同理
2.方法(Method),也有人称之为函数(function), 表示一个功能
作用: 解决代码功能重复的问题.
术语(因楼主这方面了解得太少所以是从别处Copy,见谅! 如果有不对的地方, 希望有大手子提出)
修饰符: 方法的访问权限等,静态的(static).
返回值类型: 当方法操作完毕之后,可能会给调用者返回一个结果.如果没有返回值,此时我们把返回值类型声明为void. 如果方法定义了返回类型,则方法体必须使用return返回该类型的一个值. 如果方法使用void来表示返回值类型,此时在方法体中不需要使用return.
方法名字: 命名的使用符合标识符规范,使用一个动词或者动词短语表示,首字母小写,如:sendMsg(发生信息),register(注册)
形式参数: 其实是多个变量,统称为形参,包括:参数个数,参数的类型,参数的顺序,此时参数的名字没有实质的意义.
方法签名: 方法签名 = 方法名字 + 形式参数; 在同一个类中,多个方法的签名不能相同. 推论:1)方法必须定义在类中,2)方法之间是兄弟关系(平行).
实际参数: 调用方法的时候,实际传递的参数值. 方法只有被调用才会执行!方法可以被重复调用!
//一个简单的整数求和功能static int getSum(int x, int y){int sum = x + y;return sum;}
方法重载(overload), 同一种功能的多个方法.
遵循原则
- 方法必须在同一个类中, 并且方法的名字相同
- 方法各自的参数列表不同(参数类型,参数个数,参数顺序).
- 关于返回值的问题.有两种不同意见,一种是说和返回类型没有关系, 另外一种是说返回值类型不同就不能说是方法的重载.
- 附上重载小案例(小数求和)
//一个简单的整数求和功能,稍加完善小数求和static int getSum(int x, int y){return x + y;}static double getSum(double i, double j){return i + j;}static double getSum(double i, int x){return i + x; }
3.递归(本来递归是该写在方法里面的, 但是怎么说呢, 可能对于我来说有些难理解,所以以下内容不是全部正确, 只是拿来讨论的, 而不是下结论)
先来看看百科里面的递归名词解释.程序调用自身的编程技巧称为递归( recursion)。由此可推出来, 递归是一种技巧,说白了就是让代码看着更优雅, 更有逻辑性, 更有b格, 楼主目前接触的递归, 都是能够用for循环写出来的, 但for循环写的b格能有递归高?不过for循环和递归同写一个案例, 可能for循环效率会高点.
一句经典且好理解的话: 递归就是自己玩自己.
不能无限制地调用本身, 须有个出口, 化简为非递归状况处理. (没出口, 死循环?).
递归比较经典的案例: 阶乘, 斐波那契数列, 汉诺塔问题.
//看这个递归案例最好能理解 方法(函数)的执行结果(return)就等价于这个方法本身(如有错,求指正)public class Test(){ public static void main(String[] args){ method(5); } public static int method(int num){ int temp = num; if(num > 0){ System.out.println(method(--num)); } return temp; }}
4.数组
初始化, 数组必须初始化才可以使用.
- 静态初始化.程序员自己设置需要存储的数据(元素),而数组的长度由系统决定.
- int[] nums = new int[]{1,3,5,7,9};
- 动态初始化.程序员指定数组的长度,而数组的元素的默认值由系统决定.
- int[] nums = new int[5];
- 如果事先知道需要存储哪些数据, 使用静态初始化. 若事先不知道存储哪些数据, 使用动态初始化.
- 不能同时使用静态和动态初始化.int[] nums = new int[5]{1,3,5,7,9};(大红×)
- 静态初始化.程序员自己设置需要存储的数据(元素),而数组的长度由系统决定.
数组中的数组(也可以叫做多维数组,但是JAVA中是不存在多维数组这个概念的)
简单定义:数组作为数组元素.
- C语言中的多维数组好像是固定长度,而JAVA却不是.(这话可能有错, 如有错, 求大佬们指正)
Java5对数组的新语法支持(语法糖)
- 增强for循环-foreach
for(int ele : nums){ System.out.println(ele);}
- 方法的可变参数
static double getSum(double ... arr){ double sum = 0.0 for(double price : arr){ sum+=price; } return sum;}
数组相关算法以及操作.
- 在上面介绍for循环时候, 插入了冒泡排序, 选择排序的代码,重要的理解部分也备注了,这里再插入一段插入排序的代码
static int[] insertSort(int[] arr){ int i; int j; int insertNode; for(i = 1; i < arr.length; i++){//待比较的数 insertNode = arr[i]; for(j = i - 1;j >= 0; j--){ //循环排序过的并进行比较 if(insertNode < arr[j]){ arr[j + 1] = arr[j]; // 排序过所有元素右移 }else{ break; } } arr[j+1] = insertNode; // 插入到正确的位置 } return arr; }
数组的排序算法还蛮多的, 如归并排序,快速排序,计数排序, 基数排序等等..虽然有ArraysUtil工具,但是楼主还是在学习写排序的源码, 怎么说呢, 会造车还不会开车吗?
数组的操作, 也有很多, 还是一样, 试着去写源码比较爽.就不贴上代码了.
CNcots CNINA Caprice of the stone的简写, 译为石头的随想曲.
博客中有网上摘抄的资料. 有个人的一些小心得 ,有什么不对的地方, 还请各位观客老爷们指出.
JavaNote系列博客, 纯属个人学习时间段整理的一些笔记, 会坚持每周至少一更,多多关照.