程序流程控制
顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构
根据条件,选择性地执行某段代码。
有if…else和switch两种分支语句。
ps:
· switch的注意事项:
- switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int,枚举,String;
- case子句中的值必须是常量,且所有case子句中的值应是不同的;
- default子句是可任选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
· if和switch语句对比:
- 如果判断的具体数值不多,而且符合byte、 short 、int、 char这四种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
练习1:使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”。
public class test1
{
public static void main(String[] args)
{
char le;
le='m';
switch (le)
{
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("d");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("other");
break;
}
}
}
练习2:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
public class test1
{
public static void main(String[] args)
{
int score=90;
if (score>60)
{
System.out.println("合格");
}
else
{
System.out.println("不合格");
}
}
}
练习3:根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
public class test1
{
public static void main(String[] args)
{
int season=11;
if(season>3&&season<5)
{
System.out.println("春季");
}
else if(season>6&&season<8)
{
System.out.println("夏季");
}
else if(season>9&&season<11)
{
System.out.println("秋季");
}
else
{
System.out.println("冬季");
}
}
}
循环结构
根据循环条件,重复性的执行某段代码。
有while、do…while、for三种循环语句。
注:JDK1.5之后提供了foreach循环,方便的遍历集合、数组元素。
for循环
for (初始化表达式①; 布尔值测试表达式②; 更改表达式)
{
语句或语句块③;
}
例1:编写程序从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。
public class test1
{
public static void main(String[] args)
{
for(int i=1;i<=150;i++)
{
String str=""; //赋一个空字符串
str+=i;
if(i%3==0)
{
str+="foo";
}
if(i%5==0)
{
str+="biz";
}
if(i%7==0)
{
str+="baz";
}
System.out.println(str);
}
}
}
1
2
3foo
4
5biz
6foo
7baz
8
9foo
10biz
11
12foo
13
14baz
15foobiz
16
17
18foo
……
例2.打印1~100之间所有奇数的和
public class test1
{
public static void main(String[] args)
{
int sum=0;
for(int i=1;i<=100;i++)
{
if(i%2==0)
{ }
else
{
sum+=i;
}
}
System.out.println(sum);
}
}
结果:2500
例3.打印1~100之间所有是7的倍数的整数的个数及总和(体会设置计数器的思想)
public class test1
{
public static void main(String[] args)
{
int n=0;
int sum=0;
for(int i=1;i<=100;i++)
{
if(i%7==0)
{
n++;
sum+=i;
}
}
System.out.println(n);
System.out.println(sum);
}
}
结果:
14
735
例.输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
例如: 153 = 111 + 333 + 555
public class test1
{
public static void main(String[] args)
{
int num=0;
for(int a=1;a<10;a++)
{
for(int b=0;b<10;b++)
{
for(int c=0;c<10;c++)
{
num=a*100+b*10+c;
if(num==a*a*a+b*b*b+c*c*c)
{
System.out.println(num);
}
}
}
}
}
}
结果:153
371
407
while语句
[初始化语句]
while( 布尔值测试表达式)
{
语句或语句块;
[更改语句;]
}
do-while语句
[初始化语句]
do{
语句或语句块;
[更改语句;]
}while(布尔值测试表达式);
例1:1~100内的质数
public class test1
{
public static void main(String[] args)
{
int m=2;
for(int i=1;i<100;i+=2)
{
for(m=2;m<Math.sqrt(i);m++)
{
if(i%m==0)
{
break;
}
}
if(m>Math.sqrt(i))
{
System.out.println(i);
}
}
}
}
特殊流程控制语句
1.break 语句
break语句用于终止某个语句块的执行,break终止当前所在的循环
{ ……
break;
……
}
2.continue 语句
continue语句用于跳过某个循环语句块的一次执行
continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
ps:与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内
3.return
并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。