1.程序的基本
1.当一个代码文件中只有一个class或者有public class的时候,代码文件的名称必须与该class或者public class的名称完全一致。
2.,每一个方法都必须用成对的大括号将其中的代码包括起来,每一个执行语句的结尾都必须有一个英文半角分号。
3.一个代码文件里面可以有很多方法,但只能有一个public修饰的方法。方法可以调用方法,但方法不能嵌套方法。调用方法的时候,必须完整地写出目标方法的名称和调用参数。
4.void修饰的方法不需要返回值,除此之外的方法在执行的结尾必须有一个返回值。
5.当程序里面出现"Scanner"、"Arrays"等特定代码时,必须在最开头的部分添加一个以"import"开头的语句。
6.一个变量必须先声明才能使用,否则这个变量等于不存在。
7.等待补充
2.逻辑语句
1.if型语句
if型语句非常简单,非此即彼。
if型语句可以只有if而没有else,但是当有else出现的时候,每一个else都必须对应一个if,否则就会出现错误。
2.与 a&b / 或 a|b / 非 a!b / 异或a^b
它们分别表示:
只有a和b两者均为真时结果c为真;
只有a和b两者均为假时结果为假;
当a为真时结果c反而是假的;
当a与b的结果相反时结果c才是真的。
除此之外,对于“与”和“或”还有使用两个相同字符(&& / ||)的“短路形式”,在这种形式下,当a为真时,“短路与”的右边(也就是b)会参与运算,而“短路或”的右边不参与运算。
3.三元运算符
表达形式:(条件)?表达式1:表达式2;
当条件为真时,使用表达式1;
当条件为假时。使用表达式2;
三元运算符可以简化 if-else 型语句,但它必须有一个返回值。
if-else 型语句中,if 和 else 的后面都可以跟多个语句,这一点是三元运算符做不到的。
4.等待补充
3.循环语句和Switch-Case语句
1.for循环
for循环的语句一定是以:
for(起始变量 ; 限制范围 ; 变量的步长){}
的模式来写的,例如:
for(int i=1 ; i<10 ; i++)
在不超过限制范围的情况下,每当变量行进一个步长的时候,for循环的循环体都会执行一次,其它的循环有着类似的机制。
2.while 和 do-while 循环
这两个循环都是在循环条件为真的时候执行循环体,但是它们有一个区别:
while 循环的循环体不需要执行至少一次,但 do-while 循环的循环体必须执行至少一次。
需要注意的是,对于这两种循环都必须在循环体语句后面跟上一个迭代语句部分,否则循环会变成死循环。
3.Switch-Case 语句
Switch-Case 语句提供了一种面向多种可能结果的时候的解决方法,但是有几点要注意:
Switch后面跟的()内必须是一个变量,Case X 的 X 必须与这个变量是相同的类型,而且各个 Case 的 X 必须各不相同,还要注意避免关键字等特殊字符的使用。
每一个 Case 必须有 break 语句,如果多个 Case 输出同一个结果,可以把它们排在一起,然后只在最后一个 Case 写入输出结果语句和 break 语句,这可以节省存储空间,提升效率。
4.等待补充
4.数组
1.数组有静态初始化与动态初始化两种方式,区别在于:
静态初始化:在定义数组的同时就为数组元素分配空间并赋值。
动态初始化:数组声明并为数组元素分配空间的操作与赋值的操作分开进行。
当数组初始化完成后,其长度是不可变的。
2.要打印数组的元素,必须使用 for 循环,在条目 3.1 中的 for 循环可以精确控制数组的输出(尤其是一维数组)。
还有一种 for 循环,其格式为:
for (定义与数组元素同类型的变量的语句 :数组的名称 )
这种 for 循环无法精确控制输出,它会把数组中的所有元素都输出出来。
3.语句的力量
//1:int[] array2=array1;
//2:int[] array2=new int[array1.length];
第一个语句是直接把 数组1 赋值给 数组2 ,且两个数组均指向同一个数组元素地址串,修改其中一个数组的其中一个元素,会对另一个数组中的同一个索引位置的元素产生同样的影响。
第二个语句是使第二个数组与第一个数组拥有相等的长度,在其后接上条目 3.1 中的 for 循环语句并在循环体中写入:"array2 [i] = array1 [i]" 后,数组2 的元素 和 数组1中的元素的 值与显示索引位置 完全一致,但是它们的存储空间地址完全不同,对 数组2 的修改并不会对 数组1 中的任何元素产生影响。
4.以下情况会引起程序错误:
访问数组中不存在的脚标,会引起越界错误;
数组引用未指向实体,却在操作实体中的元素,会引起空指针错误。
5. 等待补充
5.算法
1.冒泡排序算法
依次对数组中相邻的两个元素进行比较,如果左边的元素比右边的元素大或者小,则交换两个元素的位置,直到最大或者最小的那个元素被排到最后的位置,然后固定最后一个位置的元素并将其排除在比较循环之外,对剩下的元素再进行比较的循环。
2.快速排序算法
从数组中选择一个基准元素,将比它小的摆在一侧,比它大的摆在另一侧,相同的则可以排列在任意侧,然后用递归算法将左右两侧的元素排序。
递归的最底部情形是数列的大小为零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代 (iteration)中,它至少会把一个元素摆到它最后的位置去。
3.选择排序算法
选择排序是一种简单直观的排序算法,工作原理为:在未排序的序列中找出最小 (大) 的元素与第一个位置的元素交换位置,然后在剩下的元素中再找最小(大)元素与第二个元素的位置交换,依此类推,直到所有元素排序排序完成。
选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)的元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)的元素的位置,最后仅需一次交换操作即可将其放到合适的位置。
4.插入排序算法
从第一个元素开始。
首先认为该元素已经排序,然后取出下一个元素,在排好的元素序列中从后往前检索。
如果一个已经排序的元素大或小于于被取出的元素,将这个元素往后移一位。
当检索到比被取出的元素小或者大的元素,或者检索到与被取出的元素相等的元素的时候,将被取出的元素插入该元素的后面一个位置。
然后取出下一个位置上的未排序元素,继续检索循环直到所有元素都被检索过。
5.递归算法
递归算法就是在算法中 “再使用同一个算法” ,也就是 “我用我自己”。
多数时候,需要的递归算法都是迭代有限次数的,通过设置一个 return 语句可以将迭代次数控制在有限范围之内。