---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
程序流程控制
判断结构
if语句
用于做判断使用的。
常见于对某个范围进行判断,或者几个变量进行判断,还有就是boolean表达式的判断。
三种格式:
1.if(条件表达式)
{
执行语句;
}
执行流程:
如果条件表达式为true,就执行语句体;
否则,什么都不执行。
2. if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
执行流程:
如果条件表达式为true,就执行语句体1;
否则,就执行语句体2;
特殊:
可以和条件表达式在某些情况下进行替换。
一般是在赋值的情况下可以。
举例:
获取两个数中的最大值。
3. if(条件表达式)
{
执行语句;
}
else if(条件表达式)
{
执行语句;
}
else
{
执行语句;
}
执行流程:
如果条件表达式1为true,就执行语句体1;
如果条件表达式2为true,就执行语句体2;
...
否则,就执行语句体n;
注意事项
a:什么时候用哪一种if语句。
第一种格式在判断条件为一种情况下使用。
第二种格式在判断条件为两种情况下使用。
第三种格式在判断条件为多种情况下使用。
b:每一种if语句其实都是一个整体,如果有地方执行了,
其他的就不执行了。
c:如果if或者else里面控制的语句体是一条语句,是可以省略大括号的,
但是,如果是控制多条语句,就必须写上大括号。
建议:永远写上大括号。
d:大括号和分号一般不同时出现。
作用域
所有变量的定义只在它所属的大括号内有效。
选择结构
switch语句
用于做选择使用的。一般用于几个常量的判断。
switch会把几个常量值直接加载到内存,在判断的时候,效率要比if高。
所以,针对几个常量的判断,一般选择switch语句。
格式:
switch(表达式)
{
case 取值1:
执行语句;
break;
case 取值 2:
执行语句;
break;
default:
执行语句;
break;
}
针对格式的解释
switch:表示这里使用的是switch语句,后面跟的是选项。
表达式:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
case:表示这里就是选项的值,它后面的值将来和表达式的值进行匹配。
case后面的值是不能够重复的。
break:
switch语句执行到这里,就结束了。
default:
当所有的case和表达式都不匹配的时候,就走default的内容。
它相当于if语句的else。一般不建议省略。
执行流程
进入switch语句后,就会根据表达式的值去找对应的case值。
如果最终没有找到,那么,就执行default的内容。
注意事项:
a:default整体可以省略吗?
可以,但是不建议。
b:default的位置可以放到前面吗?
可以,但是不建议。
c:break可以省略吗?
可以,但是不建议。
default在最后,break是可以省略的。
case后面的break可以省略,但是结果可能有问题。
d:switch语句什么时候结束呢?
就是遇到break或者执行到程序的末尾。
if和switch的应用:
if:
1,对具体的值进行判断。
2,对区间判断。
3,对运算结果是boolean类型的表达式进行判断。
switch:
1,对具体的值进行判断。
2,值的个数通常是固定的。
对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存。效率相对高一点。
循环结构
代表语句:while, do while , for
如果我们发现有很多重复的内容的时候,就该考虑使用循环改进代码。
让我们代码看起来简洁了。
while语句格式:
while(条件表达式)
{
执行语句;
}
do while 语句格式:
do
{
执行语句;
}while(条件表达式);
do while特点:条件无论是否满足,循环体至少执行一次。
for语句格式:
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;(循环体)
}
注:
1, for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。
2, while和for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。
3, 最简单无限循环格式:while(true),for(;;)无限循环在在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。
其它流程控制语句
有些时候,我们需要对循环进行一些控制终止,这个时候,就出现了两个关键字:
break和continue
break(跳出), continue(继续)
break语句:应用范围:选择结构和循环结构。
continue语句:应用于循环结构。
注:
1, 这两个语句离开应用范围,存在是没有意义的。
2, 这两个语句单独存在下面都不只可以有语句,因为执行不到。
3, continue语句是结束本次循环继续下次循环。
4, 标号的出现,可以让这两个语句作用于指定的范围。
函数
函数的定义:
什么是函数?
函数就是定义在类中的具有特定功能的一段独立小程序。
函数也称为方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,……)
{
执行语句;
return 返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该函数运算后的结果,该结果会返回给调用者。
特殊情况:
功能没有具体的返回值。
这时return的后面直接用分号结束。
返回值类型怎么体现呢?因为没有具体值,所以不可以写具体的数据类型。
在java中只能用一个关键字来表示这种情况。关键字是:void.
总结:没有具体返回值时,返回值类型用void来表示。
注意:如果返回值类型是void,那么函数中的return语句可以省略不写。
函数的特点:
定义函数可以将功能代码进行封装
便于对该功能进行复用
函数只有被调用才会被执行
函数的出现提高了代码的复用性
对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数中只能调用函数,不可以在函数内部定义函数。
定义函数时,函数的结果应该返回给调用者,交由调用者处理。
函数的应用
如何定义一个函数呢?
通过两个明确来完成。
明确一:这个功能的结果是什么?
是和。是功能的结果,所以该功能的返回值类型是int 。
其实就是在明确函数的返回值类型。
明确二:这个功能实现过程中是否需要未知内容参与运算?
有,加数和被加数。这就是函数的参数列表(参数的个数,参数的类型)
其实就是在明确参数列表。
注意:返回值类型和参数类型没有直接关系。
函数内存加载过程:
函数的重载(overload)
重载的概念:
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
重载的特点:
与返回值类型无关,呆看参数列表。
重载的好处:
方便于阅读,优化了程序设计。
注java是严谨性语言,如果函数出现的调用不确定性,会编译失败。
重载的示例:
//返回两个整数的和
int add(int x,int y )
{
return x+y;
}
//返回三个整数的和
int add(int x,int y,int z )
{
return x+y+z;
}
//返回两个小数的和
double add(double x,double y )
{
return x+y;
}
数组
数组的定义
概念:
同一种类型数据集合。其实数组就是一个容器。
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素。
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例: int [] arr= new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
如:
int[] arr = new int []{3,5,1,7};
int[] arr = {3,5,1,7};
数组的内存分配及特点
内存的划分:
1,寄存器。
2,本地方法区。
3,方法区。
4,栈内存。
存储的都是局部变量。
而且变量所属的作用域一旦结束,该变量就自动释放。
5,堆内存。
存储是数组和对象(其实数组就是对象) 凡是new建立在堆中。
特点:
1,每一个实体都有首地址值。
2,堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数是0,小数0.0或者0.0f,boolean false char '\u0000'
4, 垃圾回收机制。
数组操作常见问题
int[] arr = new int[3];
System.out.println(arr[3]);//ArrayIndexOutOfBoundsException:
当访问到数组中不存在的角标时,就会发生该异常。
arr = null;
System.out.println(arr[0]);//NullPointerException
当引用型变量没有任何实体指向时,还在用其操作实体。就会发生该异常。
数组常见操作
对数组操作最基本的动作就是存和取。
核心思想:就是对角标的操作。
获取最值(最大值,最小值)
获取数组中的最大值。
/* 思路:
1,需要进行比较。并定义变量记录住每次比较后较大的值。
2,对数组中的元素进行遍历取出,和变量中记录的元素进行比较。
如果遍历到的元素大于变量中记录的元素,就用变量记录住该大的值。
3,遍历结果,该变量记录就是最大值。
定义一个功能来是实现。
明确一,结果。
是数组中的元素。int .
明确二,未知内容。
数组.
*/
publicstatic int getMax(int[] arr)
{
//定义变量记录较大的值。
intmaxElement = arr[0];//初始化为数组中的任意一个元素。
for(intx=1; xmaxElement)
maxElement= arr[x];
}
returnmaxElement;
}
publicstatic int getMax_2(int[] arr)
{
//定义变量记录较大的值。
intmaxIndex = 0;//初始化为数组中任意一个角标。
for(intx=1; xarr[maxIndex])
maxIndex= x;
}
returnarr[maxIndex];
}
/*排序(选择排序,冒泡排序)*/
public static void swap(int[] arr,int a,intb)
{
inttemp = arr[a];
arr[a]= arr[b];
arr[b]= temp;
}
/*
冒泡排序。
*/
publicstatic void bubbleSort(int[] arr)
{
for(intx=0; xarr[y+1])
{
swap(arr,y,y+1);
/*
inttemp = arr[y];
arr[y]= arr[y+1];
arr[y+1]= temp;
*/
}
}
}
}
/*
选择排序。
*/
publicstatic void selectSort(int[] arr)
{
for(intx=0; xarr[y])
{
swap(arr,x,y);
/*
inttemp = arr[x];
arr[x]= arr[y];
arr[y]= temp;
*/
}
}
}
}
/*折半查找(二分查找)
数组常见功能:查找。
*/
publicstatic int getIndex(int[] arr,int key)
{
for(intx=0; xarr[mid])
min= mid + 1;
elseif(key>1;
if(key>arr[mid])
min= mid + 1;
elseif(key
面试题:
给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,
那么个元素的存储的角标为如何获取。
/*
利用二分查找法确定插入位置,返回要插入的位置。
*/
public static int halfSearch(int[] arr,int key)
{
int max,min,mid;
min = 0;
max = arr.length-1;
mid = (max+min)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min = mid + 1;
else if(key>1;
if(key>arr[mid])
min = mid + 1;
else if(key
java中的方法,要导包
import java.util.*;
int index1 = Arrays.binarySearch(arr,5);
//如果存在返回的具体的角标位置,不存在返回的是 -插入点-1
System.out.println("index1="+index1);
数组中的数组
二维数组[][]
格式1:int[][] arr= new int[3][2];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0],arr[1],arr[2]
给第一个一维数组1脚标位赋值为78写法是:arr[0][1]=78;
格式2:int[][] arr=new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int [2];
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------