Java基础知识(下)
---------------------- QQ:371524846 期待与您交流! ----------------------
一、流程控制
1 顺序结构,(从左到右,从上到下的运行结构)
2 选择结构,(条件语句:if , switch)
3 循环结构,(for循环【一般都用】,while【一般常用】,do while【一般不用】)
2.1 if...else 结构 简写格式: 变量 = (条件表达式)?表达式1:表达式2;
三元运算符:
好处是简化if...else代码;但是因为是运算符,所以必须要有一个结果。
2.2 switch语句特点:
a. switch语句选择的类型只有四种:byte, short, int,char.
b. case 之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
c. 结束switch语句的两种情况:遇到break,执行switch语句结束。
d. 如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直接遇到break或者switch结尾结束。
e. 什么时候使用switch?
要比对的值为整型;
比对的值是有限的值。
要比对的值个数太多,就不要再使用switch了。
default 可以放到任何位置!只有所有case都不匹配时,才使用default作为入口点。
3.1 循环结构:while 、do while 和 for
(1)while: 先判断条件,只有条件满足才执行循环体。格式如下:
While(条件表达式)
{
循环体 执行语句;
}
(2)do while:先执行循环体,在判断条件,条件满足,再继续执行循环体。
也就是 do while 无论条件是否满足,循环体至少执行一次。格式如下:
do
{
循环体 执行语句;
}While(条件表达式);
(3)for 语句 格式如下:
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
特点:当多表达式出现时,可以用“,”隔开;
对于for循环来说,不写条件表达式,默认的就是true。
eg:
for(int i = 1; i <= 10; i++) //i是局部变量,出了这个块就死亡
{
int j = 1;
}
注:
无限循环的最简单表现形式:
for(;;){} while(true){}
不是规律的规律:
尖朝上,可以改变条件,让条件随着外循环变化;
尖朝下,可以改变初始化值,让初始化值随着外循环变化。
other:其他流程控制语句:
break(跳出当前所在的循环,标号除外), continue(继续)
break语句:应用范围:选择结构和循环结构。
continue语句:应用于循环结构。
注:a, 这两个语句离开了应用范围,存在是没有意义的。
b, 这个两个语句单独存在,下面都不可以有语句,因为执行不到。
c, continue语句是结束本次循环继续下次循环。
d,标号的出现,可以让这两个语句作用于指定的范围。
二、函数
1. 函数的定义:函数就是定义在类中的具有特定功能的一段独立小程序。也称为方法。
2. 函数定义的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,..)
{
执行语句;
return 返回值; //可以省略
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return: 用于结束函数。
返回值:该值会返回给调用者。
3.如何定义一个函数呢?
(1)既然函数是一个独立的功能,那么先明确该功能的运算结果是什么;
因为这是在明确函数的返回值类型。
(2)再明确在定义该功能的过程中是否需求未知的内容参与运算;
因为这是在明确函数的参数列表(参数的类型和参数的个数)。
4. 函数的重载(overload) :
概念:在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。
重载的特点:与返回值类型无关,只看参数列表。
重载的好处:方便与阅读,优化了程序设计。
什么时候用重载?
当定义的功能相同,但参与运算的未知内容不同。
那么,这时就定义一个函数名称以表示其功能,方便阅读,而通过参数列表的不同来区分多个同名函数。
eg:
1 public class FunctionOverload { 2 public static void main(String[] args) { 3 add(3,6); 4 add(2,3,6); 5 } 6 //获取两个整数的和 7 public static int add(int x ,int y){ 8 return x+y; 9 } 10 //获取三个整数的和 11 public static int add(int x ,int y,int z){ 12 return x+y+z; 13 } 14 }
三、数组
1.数组的定义:
概念: 同一个类型数据的集合。其实数组就是一个容器。
数组是引用类型,它是我们真正学习引用类型的开始。
数组的好处:数组有下标(角标),用来访问数组中的元素。可以自动给数组中的元素从0开始编号,到"长度-1"结束。方便操作这些元素。最大的好处(与循环配
合使用)。
2.数组定义的格式
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
eg: int[] arr = new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素, 元素,......};
eg: int[] arr = new int[]{3,5,1,7};
int[] arr ={3,5,1,7};
3.数组的排序:
选择排序: 内循环结束一次,最值出现在头角标位置上。
冒泡排序:相邻的两个元素进行比较,如果符合条件就换位。
第一圈:最值出现最后一位。
注意:不能让角标越界
位置置换抽取功能:无论什么排序,都需要对满足条件的元素进行位置置换,所以可以把这部分相同的代码抽取出来,单独封装成一个函数。
折半查找(二分搜索法):提高效率,但是必须要保证该数组是有序的数组。
eg:
1 classSortArray{ 2 public static void main(String[] args) { 3 int[] arr = { 9, 8, 3, 5, 2 }; 4 System.out.print("排序前:"); 5 printArray(arr); //打印原数组 6 sortArray(arr); //调用排序方法 7 System.out.print("排序后:"); 8 printArray(arr); // 打印排序后的数组 9 } 10 public static void printArray(int[] arr) { //定义打印数组方法 11 System.out.print("["); 12 for (int x = 0; x < arr.length; x++) { 13 if (x != arr.length - 1) 14 System.out.print(arr[x] + ", "); 15 else 16 System.out.println(arr[x] + "]"); 17 } 18 } 19 public static void bubbleArray(int[] arr) { //选择排序 20 for (int x = 0; x < arr.length - 1; x++) { 21 for (int y = x+1; y < arr.length; y++) { 22 if (arr[x] > arr[y]) { 23 int temp = arr[x]; 24 arr[x] = arr[y]; 25 arr[y] = temp; 26 } 27 } 28 } 29 } 30 public static void sortArray(int[] arr) { // 定义对数组排序的方法(冒泡排序) 31 for (int x = 0; x < arr.length - 1; x++) { 32 for (int y = 0; y < arr.length - x - 1; y++) { 33 if (arr[y] > arr[y + 1]) { 34 int temp = arr[y]; 35 arr[y] = arr[y + 1]; 36 arr[y + 1] = temp; 37 } 38 } 39 } 40 } 41 }
4.二维数组:
定义二维数组的样式:
int[][] arr=new int[10][20];
int[][] arr=new int[3][];
int[][] arr=new int[][]{{},{},{}};
int arr[][]=… (平时不用,考别人用)
int[] arr[]=… (平时不用,考别人用)
int[] a={1,2,3};
int[] b={4,5};
int[][] ab={a,b};
---------------------- QQ:371524846 期待与您交流! ----------------------