3.1程序流程控制
顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构
根据条件,选择性地执行某段代码。
有if…else和switch两种分支语句。
循环结构
根据循环条件,重复性的执行某段代码。
有while、do.while、for三种循环语句。
注:JDK1.5之后提供了foreach循环,方便的遍历集合、数组元素。
顺序结构
Java中定义成员变量时采用合法的前向引用。如:
public class Test{
int num1=12;
int num2=num1+2;
错误形式:
public class Test{
int num2=num1+2;
int num1=12;
分支结构1:if-else语句
应用举例
public class TestAge{
public static void main(String args[]){
int age=75;
if(age< 0){
System.out.println("不可能!");
}else if(age>250){
System.out.println("是个妖怪!");
}else{
System.out.println("人家芳龄"+age+",马马乎乎啦!");
}
}
}
//对下列代码,若有输出,指出输出结果。
int x=4;
int y=1;
if(x>2){
if(y>2){
System.out.println(x+y);
System.out.println("atguigu");
}
}else{
System.out.printin("x is"+x);
}
分支结构2:switch语句
switch(变量){
case常量1:
语句1;
break;
case常量2:
语句2;
break;
... ...
case常量N:
语句N;
break;
default:
语句;
break;
}
代码举例
//如果是数字1,输出星期一,数字二输出星期二
int i = 1;
switch(i){
case 1: //if(i == 1 )
System.out.print1n("星期一");
break;
case 2: //else if(i == 2)
System.out.print1n("星期二");
break;
default: //else
System.out.print1n("不知道星期几");
break;
}
public class Test{
public static void main(String args[]){
String season="summer";
switch(season){
case"spring":
System.out.println("春暖花开");
break;
case"summer":
System.out.println("夏日炎炎");
break;
case"autumn":
System.out.println("秋高气爽");
break;
case"winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
}
}
switch语句相关规则
- switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int,枚举,String;
- case子句中的值必须是常量,且所有case子句中的值应是不同的;
- default子句是可任选的,当没有匹配的case时,执行default;
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾。
例题
1.使用switch把小写类型的char型转为大写。只转换a,b,c,d,e.其它的输出"other"。
2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
3.根据用于指定月份,打印该月份所属的季节。3,4,5春季6,7,8夏季9,10,11秋季12,1,2冬季
练习
//使用switch语句改写下列if语句:
int a=3;
int x=100;
if(a==1)
x +=5;
else if(a==2)
x +=10;
else if(a==3)
x +=16;
else
x +=34;
//解答
int a=3;
int x=100;
switch(a){
case 1:
x +=5;
break;
case 2:
x +=10;
break;
case 3:
x +=16;
break;
default:
x +=34;
break;
}
switch和if语句的对比
if和switch语句很像,具体什么场景下,应用哪个语句呢?
- 如果判断的具体数值不多,而且符合byte、short、int、char这四种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
- 当你不知道应该使用if还是switch,都使用if就可以,主要使用if
循环结构
循环语句功能
- 在某些条件满足的情况下,反复执行特定代码的功能
循环语句的四个组成部分
- 初始化部分(init_statement)
- 循环条件部分(test exp)
- 循环体部分(body_statement)
- 迭代部分(alter_statement)
循环语句分类
- for循环
- while循环
- do/while循环
for循环语句
代码举例
public class Test{
public static void main(String[] args){
for(int i = 0;i < 5;i++){ //初始化表达式o;布尔值测试表达式o;更改表达式
System.out.println("hello world");
}
}
}
public class Forloop{
public static void main(String args[]){
int result=0;
for(int i=1;i<=100;i++){
result +=i;
}
System.out.println("result="+result);
}
}
for语句例题
- 编写程序FooBizBaz.java,从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。
1
2
3 foo
4
5 biz
6 foo
7 baz
…
15 foo biz
105 foo biz baz
…
for(int i=1;i<=150;i++){
String str="";
str +=i;
if(i*3==o){
str+="foo";
}
if(i%5==0){
str+="biz";
}
if(i%7==0){
str+="baz";
}
System. out. println(str);
}
for语句练习
- 打印~100之间所有奇数的和
- 打印1~100之间所有是7的倍数的整数的个数及总和(体会设置计数器的思想)
- 输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
例如:153=1* 1* 1+3* 3* 3+5* 5* 5
//第三题
for(int i=100;i<=999;i++){
//145,145/100=1,(145-1*100)/10=4,145-1*100-4-10=5
int m=i/100;//得到百位数
int n=(i-m*l00)/10;//得到十位数
int k=i-m*100-n*10;//得到各位数字
int res=m*m*m+ n*n*n+k*k*k;//各个位上数字立方和
if (res ==1){ //判断是不是水仙花数
System.out.println(i);
}
}
while循环语句
语法格式
[初始化语句]
while(布尔值测试表达式){
语句或语句块;
[更改语句;]
}
应用举例
public class Whileloop{
public static void main(String args[]){
int result=0;
int i=1;
while(i<=100){
result+=i;
i++;
}
System.out.println("result="+result);
}
}
do-while循环语句
语法格式
[初始化语句]
do{
语句或语句块;
[更改语句;]
}while(布尔值测试表达式);
应用举例
public class WhileLoop{
public static void main(String args[]){
int result=0,i=1;
do{
result+=i;
i++;
}while(i<=100);
System.out.println("result="+ result);
}
}
循环语句练习
求1到100之间所有偶数的和。用for和while语句分别完成
int res =0;
for(int i=1;i<101;i++){
if(i*2==0){
res +=i;
}
}
System.out.println(res);//要在tox循环之外输出最后的结果,因为只有全部循环技术完毕才有1到100之间所有偶数的和
int res0=0;
int k=1;
while(k<=100){
if(k%2==0){
res0 +=k;
}
k++;
}
System. out. println(res0);
嵌套循环
- 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for,while,do…while均可以作为外层循环和内层循环。
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
- 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n=mn次。
九九乘法表
输出1到100之间的所有质数
特殊流程控制语句
举例
break终止当前所在的循环
举例
特殊流程控制语句说明
数组
一位数组初始化
数组元素的引用
数组元素对的默认初始化
使用动态初始化的时候,数组的元素会有默认值,数字类型的默认值是o,对象的默认类型是null
多维数组
维数组中每一个元素都是一个数组,这样数组就是二维数组
例题:
或者
练习
数组中涉及的常见算法
求最大值
求总和,平均数
复制
反转
冒泡排序
数组操作常见问题