一,程序流程控制
也称为语句,主要有:判断结构、选择结构和循环结构。
1, 判断结构
1.1 三元运算符
格式:条件表达式?为真返回结果:为假返回结果
例如:c=(a>b)?a:b;//比较a与b的大小,并把当中较大的赋值给c。
注意:三元运算符可以简化代码,但是必须要有返还值。
1.2 if语句
if语句的三种结构
a, if(条件表达式){
执行语句;
}
b,if(条件表达式){
执行语句;
}else{
执行语句
}
c,if(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句
}
……
else
{
执行语句;
}
由上面的例子可以看出if语句特点:
a,每一种格式都是单条语句。
b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以简化if else代码。
c,条件表达式无论写成什么样子,最终的结果不是true就是 false。
注意:如果if()或者else下执行语句只有一行,{}可以省略。
1.3 switch语句
switch语句格式:
switch(表达式)
{
case取值1:
执行语句;
break;
case取值2:
执行语句;
break;
…...
default:
执行语句;
break;
}
switch语句特点:
a,switch语句选择的类型只有四种:byte,short,int, char。
b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
c,结束switch语句的两种情况:
1,执行到break结束;
2,执行到switch结尾结束。
d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
注意:JDK1.5以后可以接收枚举类型,JDK1.7以后可以接收字符串。
if和switch语句什么时候使用?
如果判断的具体数值不多,而且符合byte 、short 、int 、char这四种类型。虽然两个语句都可以使用,建议使用switch语句,因为效率稍高。其他情况:如对区间判断,对结果为boolean类型判断,使用if语句,if的使用范围更广。
2, 循环结构
循环结构有三种:while、do while、for
1, while循环格式:
while(条件表达式)
{
执行语句;
}
2,do while循环格式:
do
{
执行语句;
}
while(条件表达式);
3, for循环格式
for(初始化表达式;条件表达式;操作表达式)
{
执行语句;
}
For循环执行顺序:
a, 执行初始化表达式
b, 对条件表达式进行判断(为true执行c,为false跳出循环)
c, 执行执行语句
d, 执行操作表达式
e, 对条件表达式进行判断(为true执行c,为false执行d)
f, ……………..
注意:观察执行顺序可以看出,初始化表达式只执行一次。
如果条件不满足,循环会一直执行。所以for(;true;){}这种形式谨慎使用。
4, while和do while循环语句的区别
while:先判断条件,条件满足执行循环体。
do while:先执行一次循环体,再判断条件,若条件满足,再执行一次循环体。
也就是说while循环可能不执行循环体,do while循环至少执行一次循环体。
注意:for循环中定义的变量在循环结束时清除,while、do while循环的一直存在。
5, break和continue语句
break:跳出,使用场景:选择结构和循环结构。
continue:继续,使用场景:循环结构。
注意:
break和continue语句离开它们的应用范围是没有意义的;
break语句是结束循环,continue是结束本次循环,进入下一次循环;
break和continue语句单独存在时,它们下面的语句是执行不到的。
可以在循环结构前加标号表示作用的指定循环,如:
a :for(;;){
b:for(;;){
break a;//同样适用于continue语句
}
}
注意:标号只用于循环结构。
6, 最简单的无限循环形式
格式:While(true){ }、do{ }while(true)、for(;true;){}
7, 循环结构的使用
a) 什么时候使用循环语句?
当要对某些语句执行很多次时使用,但是要注意哪些语句需要参与循环,哪些不需要。
b) 循环结构的选择
在实际开发过程中,for循环是使用最多的,但不是在任何情况下都可以使用for循环。
一般在知道循环次数的情况下使用for循环,比如根据数组的长度取出数组中的元素,这时候需要使用下标。
在使用迭代器时一般用while循环,用i.hasNext()作为判断条件,为true就用
i. next()取出。这样看上去比for循环更简洁。
二,函数
1, 定义:定义在类中的具有特定功能的一段独立小程序。也称方法。
2, 为什么出现函数?
为了提高代码的复用性,可以将这些代码其定义成一个单独的功能,该功能的体现就是java中的函数。函数就是体现之一。
3,函数的定义格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){
执行语句;
return返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。
注意:当函数没有具体的返回值时,返回的返回值类型用void关键字表示。
return的作用:结束函数。结束功能。返回函数执行结果。
如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。
4,函数的作用:
1)、用于定义功能。
2)、用于封装代码提高代码的复用性。
3)、函数只有被调用才会被执行。
注意:函数中只能调用函数,不能定义函数。
主函数:
1)、保证该类的独立运行。
2)、因为它是程序的入口。
3)、因为它在被jvm调用。
5,如何定义一个函数?
函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:
1)、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。
2)、在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。
3)、因为它在被jvm调用。
6,重载
重载是函数的一个重要特性。
概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数列表的个数或者参数类型不同即可。
特点:与返回值类型无关,只看参数列表。
好处:方便于阅读,优化了程序设计。
代码示例:
//返回两个整数的和
int add(intx,int y){return x+y;}
//返回三个整数的和
int add(int x,inty,int z){returnx+y+z;}
//返回两个小数的和
doubleadd(double x,double y){return x+y;}
什么时候使用重载?
当定义的功能相同,但参与运算的未知内容不同。那么,这时就定义一个函数名称以表示起功能,方便阅读,而通过参数列表的不同来区分多个同名函数。
三,流程控制与函数练习
1,循环的使用
/**
*写程序计算12+22+32+....+1002的和
*
*/
public class Test3 {
public static final int maxVal = 1002;
public static void main(String[] args) {
// TODO Auto-generated method stub
int val = 12;
int result = 0;
while(val<=maxVal){
result+=val;
val+=10;
}
System.out.println("1结果为:"+result);
//或者
int result2 = 0;
for(int i=12;i<=maxVal;i+=10){
result2+=i;
}
System.out.println("2结果为:"+result2);
//又或者
int val2 = 12;
int result3=0;
do{
result3 += val2;
val2+=10;
}while(val2<=maxVal);
System.out.println("3结果为:"+result3);
}
}
2, 流程控制和函数结合使用示例
import java.util.Scanner;
/**
*编写程序,从键盘接收一个字符串,对字符串中的字母进行大小写互转(大写字母转成小写,小写字母转成大写)
*
*思路:
*1,接受键盘录入的数字
*2,截取字符
*3,利用正则表达式或ascii码区分字符大小写和非字母
*4,拼接字符串,打印出来
*/
public class Test5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入字符,按回车确定");
//获取键盘输入的字符串
Scanner s = new Scanner(System.in);
String str = s.nextLine();
//利用ascii码处理
String result = asciiConvert(str);
//利用正则表达式处理
String result2= regexConvert(str);
System.out.println(result);
System.out.println(result2);
}
public static String asciiConvert(String str){
String result = "";
for(int i=0;i<str.length();i++){
int ascii = (int)str.charAt(i);//得到字母对应的ascii码
if(ascii>=97 && ascii<=122){//小写
result += (char)(ascii-32);
}else if(ascii>=65 && ascii<=90){//大写
result += (char)(ascii+32);
}else{
result +=(char)ascii;
}
}
return String.valueOf(result);
}
public static String regexConvert(String str){
String regx1="[a-z]";
String regx2="[A-Z]";
String result = "";
for(int i=0;i<str.length();i++){
String sub=str.substring(i,i+1);
//判断是否是小写字母,是则转换为大写
if(sub.matches(regx1)){
sub=sub.toUpperCase();
result+=sub;
}
//判断是否是小写字母,是则转换为小写
else if(sub.matches(regx2)){
sub=sub.toLowerCase();
result+=sub;
}
//其他类型则直接输出
else{
result+=sub;
}
}
return result;
}
}