3.1程序结构
JAVA的流程控制结构
java程序的结构包括三种:顺序结构、选择结构、循环结构。
三种结构的执行原理
1.顺序结构的执行原理
顺序结构是一组按照书写顺序执行的语句结构,这种语句结构的执行流程是有顺序的从一个过程转向下一个处理过程。
2.选择结构的执行原理
选择结构又称为分支结构。当程序执行到分支判断的语句时,首先判断条件,然后根据条件达式的结果选择相应的语句执行。分支结构包括单支、双支和多支三种形式。
3.循环结构的执行原理
对重复执行的语句采用循环结构处理。当程序执行到循环控制语句时,根据循环判断条件的结果决定重复执行多次循环体操作,
其中条件结构的一些基本语法为:
1)单分支if结构
if(条件){
//语句
}
2)双分支if结构
if(条件表达式){
语句块1;
}else{
语句块2;
}
3)多重if结构
if(条件表达式1){
代码块1;
}else if(条件表达式2){
代码块2;
}else {
代码块2;
}
4)嵌套if结构
if(条件表达式1){
if(条件表达式2){
语句1;
}else{
语句2;
}
}else{
if(条件表达式3){
语句3;
}else{
语句4;
}
}
条件语句
Java 条件语句
一个 if 语句包含一个布尔表达式和一条或多条语句
if语句
if(布尔表达式)
{
//如果布尔表达式为true将执行的语句
}
如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码。
if…else语句
if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
if…else if…else 语句
if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况。
使用 if,else if,else 语句的时候,需要注意下面几点:
if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。
if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
嵌套的 if…else 语句
**使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。 **
if(布尔表达式 1){
如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
如果布尔表达式 2的值为true执行代码
}
}
Java 循环语句
while 循环
while是最基本的循环
只要布尔表达式为 true,循环就会一直执行下去。
while( 布尔表达式 ) {
//循环内容
}
do…while 循环
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
do {
//代码语句
}while(布尔表达式);
for 循环
虽然所有循环结构都可以用 while 或者 do…while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。
for循环执行的次数是在执行前就确定的。
最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
执行一次循环后,更新循环控制变量。
再次检测布尔表达式。循环执行上面的过程。
for(初始化; 布尔表达式; 更新) {
//代码语句
}
Java 增强 for 循环
Java5 引入了一种主要用于数组的增强型 for 循环。
声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式是要访问的数组名,或者是返回值为数组的方法。
for(声明语句 : 表达式)
{
//代码句子
}
关键字
break 关键字
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
break;
//break 的用法很简单,就是循环结构中的一条语句:
continue 关键字
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
continue;
//continue 就是循环体中一条简单的语句
Java do while循环语句用法
do-while循环,先执行一次,然后在判断,如果条件成立,在循环执行,如果不成立,继续往下执行
语法
do {undefined
statement(s)
} while (expression);
布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false。
与while区别
while循环语句只有循环条件满足时,才执行循环体;不满足,则跳过循环体!do while 循环语句至少执行一次循环,实例如下:
public class Test{undefined
public static void main(String[] args){undefined
int i = 1;
do{undefined
System.out.println(i);
i++;
}
while(i<30); //do-while循环,先执行一次,然后在判断,如果条件成立,在循环执行,如果不成立,继续往下执行
}
}
总结
do...while循环特点是先执行一次,执行完一次后再判断条件,满足条件了再执行,不满足条件就结束,换句话说,do...while和while的区别是,while先判断后执行,而do...while至少要执行一次。
do...while适合至少执行一次且循环次数不固定的时候,当循环次数固定的时候推荐使用for循环。
do while while区别
1、while循环:
表示如果条件满足,程序一直循环执行,直到条件不满足为止。
所以while循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环。
int i =1;
while(i <5){
//业务逻辑
if(i%2>0){
System.out.print(“i是偶数”)
}else{
System.out.print(“i是奇数”)
return i
}
i++
}
2、do while循环
在检查条件是否为真之前,这种循环会执行一次代码块,然后只要条件为真就会重复循环。(就是说不管条件成立不成立先执行一次逻辑)
do {
要执行的代码块
}
while (条件) ;
注意这里分号不能少
例题3.1以下两种情况都是对的。
package three.one;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
if (true)//让判断条件永远为真
System.out.println("我没有使用大括号");//没有大括号,直接跟在if语句之后
if (true)//让判断条件永远为真
System.out.println("我有使用大括号");//输出语句在大括号之内
}
}
例题3.2 输入号码看是否正确
package three.two;
import java.util.Scanner;//定义Scanner
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);//创建Scanner对象,用于进行输入
System.out.println("请输入要拨打的电话号码:");//输出语句
int phoneNumbe=in.nextInt();//创建变量,保存电话号码
if (phoneNumbe!=84972266)//判断号码是否是正确的,如果不是则输出号码不存在
System.out.println("对不起,您拨打的号码不存在!");//输出语句
}
}
例题3.3 判断if else执行结果
package three.three;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
int math=95;//声明math的值为95
int english=56;//声明english的值为56
if(math>60) {//判断math是否大于60
System.out.println("数学及格了");//大于输出及格
}else {
System.out.println("数学没有及格");//小于输出不及格
}
if(english>60) {//判断english是否大于60
System.out.println("英语及格了");//大于输出及格
}
else {
System.out.println("英语没有及格");//小于输出不及格
}
}
}
例题3.4 if else if 多分支结果
package three.four;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
int x=20;//定义x int的值
if(x>30) {//判断变量是否大于30
System.out.println("a的值大于30");}//条件成立输出信息
else if(x>10) {//判断变量是否大于10
System.out.println("a的值大于10但小于等于30");}//条件成立输出信息
else if(x>0) {//判断变量是否大于0
System.out.println("a的值大于0但小于等于10");//条件成立输出信息
}
else//当以上条件都不成立,则执行这条语句
{System.out.println("a的值小于0");}
}
}
例题3.5 判断是否为闰年
package three.five;
import java.util.Scanner;//定义Scanner
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub//创建变量,存储年份
int iYear;//创建变量,存储年份
Scanner sc=new Scanner(System.in);//创建扫描器
System.out.println("pleaase input number");
iYear=sc.nextInt();//控制台输入一个数字
if(iYear%4==0) {//如果能被4整除
if(iYear%100==0) {//如果能被100整除
if(iYear%400==0)//如果能被400整除
System.out.println("It is a leap year");//是闰年
else
System.out.println("It is not a leap year");}//不是闰年
else
System.out.println("It is a leap year");}//是闰年
else
System.out.println("It is not a leap year");//不是闰年
}
}
例题3.6用逻辑语句判断是否闰年
package three.six;
import java.util.Scanner;//定义Scanner
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub//创建变量,存储年份
int iYear;//创建变量,存储年份
Scanner sc=new Scanner(System.in);//创建扫描器
System.out.println("pleaase input number");
iYear=sc.nextInt();//控制台输入一个数字
if (iYear%4==0&&iYear%100!=0||iYear%400==0)//判断是否可以被4整除但不能被100整除或者被400整除
System.out.println("It is a leap year");//是闰年
else
System.out.println("It is not a leap year");}//不是闰年
}
例题3.7使用switch语句星期并打出英文
package three.seven;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
int week=2;//定义week变量为int型
switch (week) {//指定switch语句的表达式为week
case 1://定义case的常量为1
System.out.println("Monday");//输出信息
break;
case 2://定义case的常量为2
System.out.println("Tuesday");//输出信息
break;
case 3://定义case的常量为3
System.out.println("Wednesday");//输出信息
break;
case 4://定义case的常量为4
System.out.println("Tursday");//输出信息
break;
case 5://定义case的常量为5
System.out.println("Firday");//输出信息
break;
case 6://定义case的常量为6
System.out.println("Saturday");//输出信息
break;
case 7://定义case的常量为7
System.out.println("Sunday");//输出信息
break;
default://default语句,如果week不是1-7之间的数字则执行这个语句
System.out.println("Sorry,I don't Know");
}
}
}
例题3.8 判断成绩的等级
package three.eight;
import java.util.Scanner;//定义Scanner
public class three {//定义类
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);//创建一个存储键盘上的数
System.out.println("请输入成绩:");
int grade=sc.nextInt();//数赋值给grade
switch(grade/10) {//开始switch循环
case 10:
case 9: System.out.println("成绩为优");break;//10和9为优
case 8: System.out.println("成绩为良");break;//8为良
case 7:
case 6: System.out.println("成绩为中");break;//7和6为中
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: System.out.println("成绩为差");break;//0到5成绩为差
default: System.out.println("成绩无效");//此外成绩无效
}
}
}
例题3.9通过switch语句根据str的值输出不同提示信息
package three.nine;
public class three {//定义类
public static void main(String[] args) {//定义主函数
// TODO Auto-generated method stub
String str="明日科技";//类定义一个str
switch(str) {
case "明日"://定义case语句中常量
System.out.println("明日图书网www.minggribook.com");//输出信息
break;
case "明日科技"://定义case语句中常量
System.out.println("吉林省明日科技有限公司");//输出信息
break;
default://以上都没有执行这个语句
System.out.println("以上条件都不是。");//输出语句
}
}
}
例题3.10while循环从1加到10
package three.ten;
public class three {//dy1类
public static void main(String[] args) {//定义主函数
// TODO Auto-generated method stub
int x=1;//定义变量x
int sum=0;//定义变量sum等下用于求和
while(x<=10) {
sum=sum+x;//当满足条件就执行语句,相当于一直叠加
x++;
}
System.out.println("sum="+sum);//将变量sum输出
}
}
例题3.11 do while与whlie区别
package three.oneone;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
int a=100;//定义a的int型值为100
while(a==60) {//进入while循环,判断是否等于60
System.out.println("ok1");//真则执行这语句
a--;
}
int b=100;//同上
do {
System.out.println("ok2");//do while语句先执行循环体,即使条件为假也会执行一次
b--;
}while(b==60);//判断是否等于60
}
}
例题3.12 do while输出j的值
package three.onetwo;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
int i=0,j=0;//定义变量值
System.out.println("before do_while j="+j);//输出语句
do {
j++;//j+1
}
while(i>1) ;{//判断i是否>1
}
System.out.println("sfter while j="+j);//输出j
}
}
例题3.13 while输出j的值
package three.onethree;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
int i=0,j=0;//定义变量值
System.out.println("before do_while j="+j);//输出语句
while(i>1) //判断i是否>1
{
j++;//j+1
}
System.out.println("sfter while j="+j);//输出j
}
}
例题3.14用for循环从1加到100
package three.onefour;
public class three {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum=0;//定义sum值,后面好求和
int i;//定义i为整型
for (i=1;i<=100;i++) {//执行循环当i=100跳出循环
sum+=i;//这里是数的叠加 如执行一次=0+1,2次=1+2等等
}
System.out.println("the result:"+sum);//输出最后sum的叠加后的值
}
}
例题3.16使用for循环嵌套输出乘法表
package three.onesix;
public class three {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i,j;//创建2个整型变量
for(i=1;i<10;i++) {//输出9行
for(j=1;j<i+1;j++) {//输出与行数相等的列
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();//换行
}
}
}
例题3.17输出1到20第一个偶数使用break跳出循环
package three.oneseven;
public class three {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=1;i<20;i++) {//for循环当i=20结束
if (i%2==0) {//如果i为偶数
System.out.println(i);//输出i
break;//跳到下一个循环
}
}
System.out.println("---end---");//输出
}
}
例题3.18在嵌套循环中使用break跳出内层循环
package three.oneeight;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
for (int i=0;i<3;i++) {//判断i是否小于3
for (int j=0;j<6;j++) {//判断j是否小于6,
if (j==4) {//如果j等于4结束循环
break;
}
System.out.println("i="+i+"j="+j);//输出语句i= 与j=
}
}
}
}
例题3.19带有标签break跳出循环
package three.onenine;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
huqinwen: for (int i=0;i<3;i++) {//判断i是否小于3,在for循环前标记
for (int j=0;j<6;j++) {//判断j是否小于6,
if (j==4) {//如果j等于4结束循环
break huqinwen;//跳出huqinwen标记的循环体
}
System.out.println("i="+ i + " j=" + j);//输出语句i= 与j=
}
}
}
}
例题3.20输出1到20偶数使用continue
package three.twozero;
public class three {
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
for (int i=1;i<20;i++) {//判断i从1开始加到是否小于20
if(i%2!=0) {//判断是否为偶数
continue;//跳到下一个循环
}
System.out.println(i);//输出i的值
}
}
}