------- android培训、java培训、期待与您交流! ----------
if语句
(1)if语句第一种格式
if(条件表达式)
{
执行语句;
}
A:无论条件表达式是简单还是复杂,结果是一个boolean类型的数据
如果条件表达式结果不是boolean类型的,那么就报错
B:当条件表达式的结果为true,就执行if所控制的语句。
否则,就不执行
注意的问题:
C:大括号可以不写吗?
可以。但是是有条件的。如果if控制的只是单条语句,可以不加大括号。
如果if控制的是多条语句,那么必须加大括号。
建议:都加上大括号。
D:不要再if(条件表达式)加分号
(2)if语句第二种格式
if(条件表达式)
{
执行语句1;
}
else
{
执行语句2;
}
A:比第一种多了else,否则,如果,那么的意思
B:如果条件表达式为true,执行语句1;否则,执行语句2
C:发现if语句和条件(三元)运算符有些相似。那么有没有区别呢?
**条件运算符是if语句的简写格式。
**条件运算符都可以用if语句改写。反之,不行。
**如果这个if语句是有赋值操作的,那么建议使用条件运算符改写。
(3)if语句第三种格式
if(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句;
}
……
else
{
执行语句;
}
A:最后一个else可以省略吗?
可以?但是一般建议写上。
**else是第三种if语句的组成部分,为了避免出现编译问题,建议加上
**我们不可能把所有的判断情况都想的特别清楚,所有建议加上
B:其实这个语句是一个整体,它是一条语句。当其中的某一种情况满足,
那么执行语句并结束语句。
C:else后面有if的时候,一定要有条件表达式。单独else的时候,不能有条件表达式
D:什么情况下用哪种if语句
**if的第一种格式只做一种判断
**if的第二种格式只做二种判断
**if的第三种格式只做多种判断
(4)if语句嵌套
A:if语句里面的执行语句是if语句。
(5)if语句的应用
A:给出一个数字1-7之间的,请输出对应的星期几?
B:需求如下:
一年有4季,每季有三个月
春 3,4,5
夏 6,7,8
秋 9,10,11
冬 12,1,2
请输入月份,打印季节。
(6)if语句的应用场景
A:判断几个值的时候。
B:对结果是布尔类型的表达式进行判断的时候。
C:对范围进行判断。
注意事项:
Switch(表达示)必须和常量的数值
保持一致
Switch表达示接收,byte short int char;
JDK6 :byte short int char
JDK7 :byte short int char String
在进行选 择语句switch时当case 中没有出现在break的时候
程序会一直运行到遇到break才会停下来。
Switch和if的区别?
对于几个值的判断,可以用
对于区间的判断,可以用
对于运算结果是boolean类型,也可以用
对于几个固定的值进行判断,可以使用if也可以使有Switch,建议使用 switch,因为效率稍高
在JDK7.0版本时,switch可以对字符串进行选择
在JDK5.0版本时,switch 可以对新的数据类型enum进行选 择
If和switch在接收的数据类型不一样 。
If对于范围的判断比较好用
If 可以使用引用数据类型。
Switch最好使用在比较简单数据的判断。
循行语句
,变量有自己的作用域。
对于for来讲:如果将用于控制循环的增量定义在for语句中。那么该变量 只在for语句内有效。
for语句执行完毕。该变量在内存中被释放。
2,for和while可以进行互换。
如果需要定义循环增量。用for更为合适。
什么时候使用循环结构?
当要对某些语句执行很多次时,就使用循环结构。
While(条件表达示)
{
//执行语句,
//迭代
}
条件的运算结果是true,重复执行这个在括号之间的程序
Do
{
//执行语句 条件的运算结果是true,重复执行这个在括号之间的程序
//迭代
}while(条件表达示);
特点: 不管条件判断语句是否成立都 会运行一次
For(初始化值;条件表达示;迭代)
{
//执行语句
//只要变量符合条件,就会一直重复for 的大括号中的程序
}
双重循环
For()
{
For()
{
}
}
总循环的次数=外圈次数*内圈次数
语句的总结:
什么情况,使用哪个语句
1、当对某几个值进行判断的时候 ,可以使用IF语句,或者switch语句建议
Switch
但是,使用switch要注意,它只能操作四种类型的值:byte short int char
如果是四种类型以外的值,需要使用if
2、如果对数据区间进行判断,或者对运算结果是boolean类型的进行凑数
使用if语句
3、当需要某些语句执行很多次的时候,使用循环结构
如果定义变量只为循环增量存在时,可以使用for语句
如果对一个条件进行判断使用if,如果对该条件进行多次判断,使用 while
4、如果要结束循环,可以控制循环条件,或者通过break语句完成
如果要控制循环的流程,是否继续执行,可以通过continue或者break 来完成
Break 和continue关键字
Break(终止循环):只能用在switch 语句和循环语句中。用于跳出,或成为 结束 。
Java中不允许写费话。
Break;语句单独存在时,下面不能写语句
Continue: 只能用在循环中。 (终止本次循环,开始下次循环)
Continue:单独存在时,下面不可以定义其他语句。因为执行不到
Continue:结束本次循环,继续下次循环
While for 在什么时候 使用合适??
选择的循环的时候,需要根据循环的次数来选择
知道次数的,可以选 用for
不知道循环次数的时候 可以选择while.
在双循环中如果想跳出外循环时,可以使用标记(标记名:)例如:w:
转义字符:通过\ 来转变后面字母或者符号的含义。
\n:换行。
\b:退格。相当于backspace。
\r:按下回车键。window系统,回车符是由两个字符来表示\r\n.
\t:制表符。相当于tab键。
第四天课程
函数
定义:函数就是定义在类中的具有特定功能的一段独立小程序
用于将代码进行封装。提高了代码的复用性
记住,要定义功能时,就用函数来体现
函数只有被调用才执行
函数中可以调用其它函数,但是不能定义函数
定义格式:
修饰符 返回值类型 函数名(参数列表.......)
{
函数中执行的代码
可以有循环
判断
运算
Return;
}
修饰符: public static
返回值类型:这个函数计算数据,计算后得到的结果的数据类型
函数名: 标识符,自定义的。 规范:函数名首字母小写,后面的 第一个单词首字母大写
Return 就是将计算后的结果进行返回,从哪来的回哪里去。
如何实现一个功能,用函数体现呢?
1、明确该功能的运算结果
其实就是在明确函数的返回值类型
2、明确该 功能实现过程 中是否需要未知内容参与运算
其实就是在明确函数的参数列表
定义函数,使用函数中的注意事项!
1. 函数是根据实际的功能需要而定义出来
2.一个函数不能定义在另一个函数中
3.调用函数的时候 ,你传递的实际参数,要和函数中的形式参数保持一致。 ( 包 括:顺序、个数、数据类型)
4.函数上定义的返回值类型,必须和return中返回的类型一致
5.当函数有返回值的时候,调用者可以使用sop进行打印
6.当函数没有返回值得时候,不能使用sop进行打印
重载:
概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数 个数或参数类型用顺序不同即可。
特点:与返回值类型无关,只看参数列表(参数类型以及参数个数)
好处; 方便于阅读,优化了程序设计。
什么时候用重载?
当实现某些功能时,发现功能的主体是一致的,但是功能的实现细节有所区别,这个时候我们就可以考虑使用重载的特性
当定义的功能相同,但参与运算的未知内容不同
那么,这时就定义一个函数名称以表示起功能,方便阅读,而通过参数
列表的不同来区分多个同名函数
例:
Public static int function(){}
Public static void function(int x){}
数组(1)同一种类型数据的集合。其实数组就是一个容器。
A:只要是容器,就得重点掌握。
(2)数组的好处
A:可以自动给数组中的元素从0开始编号,方便操作这些元素。
(3)数组的定义格式
A:当不明确数组中的元素时
**举例 int[] arr = new int[3];
B:当明确数组中的元素时
**举例 int[] arr = new int[]{1,2,3,4,5};
(4)什么时候使用数组?
A:当要操作的数据是多个的时候,你就得想着先把这些数据用数组进行存储。
(5)内存图
A:栈
**存储的是局部变量(在函数中定义的变量)。
**变量被使用完后,立即自动释放。
B:堆
**存储的是实体(数组和对象)。
**实体:new出来的东西,可以存放很多数据的东西。
***class定义一个类。
**堆内存数据的特点
***每个实体都有内存地址
***堆内存中的变量都有默认初始化值
****int --> 0
****double --> 0.0
****boolean --> false
****char --> '\u0000' 空字符,unicode编码。
***当实体不在被使用的时候,会在jvm空闲的时候,
通过java垃圾回收机制使其自动释放。
C:方法区 后面讲。
D:本地方法区 调用是Windows系统底层资源,我们也不用考虑。
E:寄存器 和CPU相关。我们不用考虑。
(6)操作数组最常见的问题
A:当你访问到数组中的最后一个元素时,还想继续访问,这个时候,会发生角标越界异常。
**ArrayIndexOutOfBoundsException
**举例 int[] arr = new int[3];
System.out.println(arr[3]);
B:当数组不在指向某个实体时,你还继续访问,就会发生空指针异常。
**NullPointerException
**举例 int[] arr = new int[3];
arr = null;
System.out.println(arr[1]);
(7)常见的数组的操作
记住:对数组的操作,一定要从角标下手。
A:遍历操作
**数组的属性:length 数组的长度。
**格式:数组名.length
public static void printArray(int[] arr)
{
System.out.print("[");
for(int i=0; i<arr.length; i++)
{
if(i!=arr.length-1)
{
System.out.print(arr[i]+",");
}
else
{
System.out.print(arr[i]);
}
}
System.out.print("]");
}
B:获取最值
**获取最大值
public static int getMax(int[] arr)
{
int max = arr[0];
//i从1开始,因为第一个数不用跟自己比
for(int i=1; i<arr.length; i++)
{
if(arr[i]>max)
{
max = arr[i];
}
}
return max;
}
**获取最小值
public static int getMin(int[] arr)
{
int min = arr[0];
//i从1开始,因为第一个数不用跟自己比
for(int i=1; i<arr.length; i++)
{
if(arr[i]<min)
{
min = arr[i];
}
}
return min;
}
C:排序
**选择排序
原理:如果拿0角标上的元素依次和后面的元素进行比较,
第一次内循环结束后,最小值出现在了0角标位置。
你就想想我们是如何打星星
****
***
**
*
public static void selectSort(int[] arr)
{
//i<arr.length-1 n个数两两比,n-1次就能获得最值。
for(int i=0; i<arr.length-1; i++)
{
//0角标元素没必要和自己比,所以j从1开始。
//发现j为了不重复比较,总是要比i大1,所以j从i+1开始
for(int j=i+1; j<arr.length; j++)
{
if(arr[j]<arr[i])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
**冒泡排序
原理:两个相邻元素进行比较,第一次比较完以后,最大值出现在了最大角标处。
public static void bubbleSort(int[] arr)
{
//i<arr.length-1 n个数两两比,n-1次就能获得最值。
for(int i=0; i<arr.length-1; i++)
{
//为了防止角标越界,j<arr.length-1
//为了减少比较次数,j<arr.length-1-i
for(int j=0; j<arr.length-1-i; j++)
{
if(arr[j]>arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
D:传递参数
**调用的时候,传递是基本类型的值的时候,形参改变对实参没有任何影响。
**调用的时候,传递是引用类型的地址值的时候,形参改变对实参有直接影响。
------- android培训、java培训、期待与您交流! ----------