流程控制
顺序结构
1.空语句
;// 其实就是一个分号
2.表达式语句
(a+b)*2
是算数表达式,c>d
是布尔表达式,表达式能够被Java编译器识别,但是由于没有对程序任何操作,因此单独存在对程序本身无任何意义。
3.复合语句
Java语言的复合语句与C语言及其它语言相同,以整个块区为单元的语句,所以又称为块语句,复合语句右开括号{
开始,闭括号}
结束;复合语句为局部变量创建了一个作用域,该局部变量在作用域能够被使用,在作用域外将会出现错误。
分支结构
1.if语句
if(布尔表达式){
语句块
}else if(布尔表达式){
语句块
}else{
语句
}
2.switch语句
switch(表达式){
case 常量值1:
语句块1
[break;]
...
case 常量值n:
语句块n
[break;]
default:
语句块n+1
[break;]
}
switch语句中的表达式的值必须是整型,字符型,字符串型或枚举类型,常量值1~n+1的数据类型必须与表达式的值的类型相同
循环结构
1.while语句
while(条件表达式){
语句块
}
2.do-while语句
do{
语句块
}while(条件表达式);
3.for语句
for(表达式1;表达式2;表达式3){
语句块
}
4.foreach循环
foreach语句是for语句的特殊简化版本,不能完全取代for语句,但任何foreach语句都可以改写为for语句
for(元素类型 i : 遍历对象){
语句块
}
5.循环控制
break:跳出当前循环体,从而中断当前循环
continue:跳过本次循环,执行循环的增量部分,然后进行条件判断
return:跳出当前方法
数组
数组是指具有相同数据类型的一组数据的集合
一维数组
创建1:先声明,再用new关键字进行内存分配
声明:
type arrayname[]; int arr[];
type[] arrayname; int[] arr;
内存分配:
arrayname = new type[length]; arr = new int[5];
创建2:声明的同时分配内存
type[] arrayname = new type[length]; int[] arr = new int[5];
初始化
type[] arrayname = new type[]{value1,...,valuen}; int[] arr = new int[]{1,2,3,4};
type[] arrayname = {value1,...,valuen}; int[] arr2 = {1,2,3,4};
二维数组
一维数组中的各个元素仍然是一个数组,那么它就是二维数组;二维数组常用于表示表,第一个下标表示元素所在的行,第二个下标表示元素所在的列。
创建1:先声明,再用new关键字进行内存分配
声明:
type arrayname[][]; int arr[][];
type[][] arrayname; int[][] arr;
内存分配:
arrayname = new type[length][length]; arr = new int[2][4];
arrayname = new type[length][]; arr = new int[2][];
arrayname[index] = new type[length]; arr[0] = new int[4];
arr[1] = new int[4];
创建2:声明的同时分配内存
type[][] arrayname = new type[length][length]; int[][] arr = new int[2][4];
初始化:
type[][] arrayname = {value1,...,valuen}; int[][] arr = {{1,2},{3,4}};
Arrays工具类
方法 | 参数 | 作用 | 示例 |
---|---|---|---|
fill(int[] a,int fromIndex,int toIndex,int value) | a:要进行元素替换的数组 fromIndex:第一个元素索引(包含) toIndex:最后一个元素索引(不包括) value:要存储到数组中所有元素的值 | 将指定的int值分配给int型数组指定范围中的每个元素 | Arrays.fill(arr,8); |
sort(object) | object:进行排序的数组名称 | 对任意类型的数组进行升序排序(按字典编排顺序,数字在字母前,大写字母在小写字母前) | Arrays.sort(arr); |
copyOf(arr,int newlength) copyOfRange(arr,int fromIndex,int toIndex) | arr:要进行复制的数组 newlength:新数组的长度 | 复制数组至指定长度(newlength>oldlength:整型0填充,但是char用null填充;newlength<oldlength:从第一个元素开始截取) | Arrays.copyOf(arr,5); |
binarySearch(Object[] a,int fromIndex,int toIndex,Object key) | a:搜索的数组 key:搜索的值 | 使用二分搜索法来搜索指定数组,以获得指定对象,返回搜索元素的索引值 | Arrays.binarySearch(arr,0,2,“a”) |
排序算法
1.冒泡排序
int temp;
for(int i=1;i<array.length;i++){
//比较相邻两个元素,较大的元素往后冒泡
for(int j=0;j<array.length-1;j++){
if(array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
2.直接选择排序
for(int i=1;i<array.length;i++){
int index = 0;
for(int j=1;j<array.length-1;j++){
if(array[j]>array[index]){
index = j;
}
}
//交换在位置array.length-i和index(最大值)上的两个数
int temp = array[array.length-i];
array[array.length-i] = array[index];
array[index] = temp;
}
3.反转排序
int temp;
for(int i=0;i<array.length/2;i++){
temp = array[i];
array[i] = array[array.length-1-i];
array[array.length-1-i] = temp;
}
方法
定义与调用
完整的方法通常包括方法名称、方法主体、方法参数和方法返回值类型
方法返回值:方法体中用return语句指明要返回的值(表达式),可以是常量,变量,对象,返回的数据类型必须与声明成员方法时给出的返回值类型一致
方法参数:形参是定义方法时参数列表中出现的参数,实参是调用方法时为方法传递的参数
方法重载
两同一不同
:同一个类,同一个方法,不同的列表参数。方法的其它部分:返回值类型,修饰符等,与方法重载没有任何关系
可变参数
/*paramList表示方法的固定参数列表
paramType表示可变参数的类型
...表示声明可变参数的标识
paramName表示可变参数名称*/
methodName({paramList},paramType…paramName)
public void eat(String...foods){}
eat("米饭","馒头","面条");