目录
3.1程序结构
顺序结构、选择结构和循环结构是结构化程序设计的3种基本结构,是各种复杂程序的基却单元。图3.1 展示了这3种程序结构的基本理念,其中,第幅图 是顺序结构的流程图, 它就书写顺序执行的语句构成的程序段;第二幅图是选择结构的流程图,它主要根据输入数据和中国的不同选择执行不同的语句,选择结构主要由条件语句(也叫判断语句或者分支语句)组成:而第三幅图是循环结构的流程图,它是在一定条件下反复执行某段程序的流程结构,其中,-组被重复执行的语句称为循环体,而决定循环是否终止的判断条件是循环条件,循环结构主要由循环语句组成。
顺序结构的流程图
3.2条件语句
if条件语句主要用于告诉程序在某个条件成立的情况下执行某段语句,而在另一种情况下执行另外的语句。
使用 if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字 if之后是作为条件的“布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句;若为false,则不执行if条件之后的语句。if条件语句可分为简单的 if条件语句、if...else 语句和 if...else if多分支语句。
3.2.1 if 条件语句
例3.1
代码
结果
例3.2
代码
package css; //创建一个css包
import java.util.Scanner; //导入输出函数需要用到的包
public class sss2 { //创建一个css类
public static void main(String[] args) {//主函数
Scanner in =new Scanner(System.in);//创建System对象,用于进行输入
System.out.println("请输入要拨打的电话号码:");//输入号码
int phoneNumber = in.nextInt();//创建变量,保存电话号码
if (phoneNumber != 84972266);//判断此电话号码是否是84972266
//如果不是84972266号码,则提示号码不存在
System.out.println("对不起,你拨打的号码不存在!");//输出号码不存在的提示
}
}
结果
if..else语句
例3.3
if条件语句主要用于告诉程序在某个条件成立的情况下执行某段语句,而在另一一种情况下执行另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。“布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句:件之后的语句。if条件语句可分为简单的if条件语句、if....else语句和让若为else,则不执行证条....else if多分支语句。
代码
public static void main(String[] args) {//主方法
int math = 95; //声明int型局部变量,并赋给初值95
int english = 56; //声明int型局部变量,并赋给初值56
if(math>60) {//使用if语句判断math是否大于60
System.out.println("数学及格了");//条件成立时输出的信息
}else {
System.out.println("数学没有及格");//条件不成立时输出的信息
}
if(english>60) {//使用if语句判断english是否大于60
System.out.println("英语及格了");//条件成立时输出的信息
}else {
System.out.println("英语没有及格");//条件不成立时输出的信息
}
}
}
结果
if..else if多分支语句
if.. else语句是条件语句中最常用的一种形式, 它会针对某种条件有选择地做出公为“如果满足某种条件,就进行某种处理,否则就进行另种处理”。
例3.4
代码
import java.util.Scanner;//导入输出函数需要用到的包
public class SSS5 { //创建主类
public static void main(String[] args) {//主方法
int iyear; //创建整形变量,保存输入的年份
Scanner sc=new Scanner(System.in);//创建扫描器
System.out.println("please 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"); //不是闰年
}
}
结果
if语句的嵌套
前面讲过三种形式的条件语句,这三种形式的条件语句都可以嵌套条件语句。
例3.5
import java.util.Scanner;//导入输出函数需要用到的包
public class SSS5 { //创建主类
public static void main(String[] args) {//主方法
int iyear; //创建整形变量,保存输入的年份
Scanner sc=new Scanner(System.in);//创建扫描器
System.out.println("please 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
代码
import java.util.Scanner; 导入输出函数需要用到的包
public class SSS6 {//创建类
public static void main(String[] args) { //主函数
// TODO Auto-generated method stub
int iyear; //创建整形变量,保存输入的年份
Scanner sc=new Scanner(System.in); //创建扫描器
System.out.println("please input number");//输出please input number
iyear = sc.nextInt();//控制台输入一个数字
if(iyear%4 ==0&&iyear % 100 != 0||iyear%400 == 0)//如果iyear可以被4整除并且不能被100整除,或者iyear可以被400整除
System.out.println("It is a leap year");//是闰年
else System.out.println("It is not a leap year"); //不是闰年
}
}
结果
3.2.2switch多分支语句
Switch语句中参数必须是整型、字符型、枚举类型或字符串类型,常量值1~n必须是与参数兼容的数据类型,switch语句首先计算参数的值,如果参数的值和某个case后面的常量表达式相同,则执行该case语句后的若干个语句,直到遇到break语句为止。此时如果该case语句中没有break语句,将继续执行后面case中的若干个语句,直到遇到break语句为止。若没有任何一一个常量表达式与参数的值相同,则执行default后面的语句。
break的作用是跳出整个switch语句。
defult语句是可以不写的,如果它不存在,而且swich语句中表达式的值不与任何ca的常量值相同,switch则不做任何处理。
例3.7
代码
public static void main(String[] args) {//主函数
int week = 2; //定义int型变量week
switch (week){//指定switch语句的表达式为变量week
case 1: //定义case语句中的常量为1
System.out.println("Monday");// 输出信息 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("Thursday"); break;//输出结果,跳出循环
case 5://定义case语句中的常量为5
System.out.println("Friday");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
代码
import java.util.Scanner;//导入输出函数需要用到的包
public class SSS8 {//创建类
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);//创建System对象,用于进行输入
System.out.println("请输入成绩");// 输出信息 break;
int grade=sc.nextInt();//获取键盘的输入
switch(grade) { //switch语句
case 10: // 定义case语句中的常量为10
case 9: System.out.println("成绩为优"); break;// 定义case9.10语句中的常量为优
case 8: System.out.println("成绩为良"); break;// 定义case8语句中的常量为良
case 7:// 定义case5语句中的常量
case 6:System.out.println("成绩为中"); break;// 定义case6语句中的常量为中
case 5:// 定义case5语句中的常量
case 4:// 定义case4语句中的常量
case 3:// 定义case3语句中的常量
case 2:// 定义case2语句中的常量
case 1:// 定义case1语句中的常量
case 0:System.out.println("成绩为差"); break;// 定义case0语句中的常量为差
default:System.out.println("成绩无效"); break;//反之成绩无效
}
}
}
结果
例3.9
代码
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
String str="明日科技"; //定义case语句中的常量明日科技
switch(str){ //switch 语句
case "明日": //定义case语句中的常量1
System.out.println("明日图书网www.mingribook.com");//输出信息 break;
case"明日科技": //定义case语句中的常量明日科技
System.out.println("吉林省明日科技有限公司"); //输出信息
break; //break 语句
default: //default 语句
System.out.println("以上条件都不是。"); //输出信息
}
}
}
结果
3.3循环语句
3.3.1 while循环语句
例3.10
代码
结果
3.3.2do...while循环语句
do...while循环语句与while循环语句类似,它们之间的区别是while语句为先判断条件是否成立再执行循环体,而do... while循环语句则先执行一次循环后,再判断条件是否成立。也就是说d...while循环语句中“{}”中的程序段至少要被执行一次。
do.while语句与while语句的一个明显区别是d..whil语句在结尾处多了一一个分号 (;)。根据d..whie循环语句的语法特点总结出的d... while循环语句的执行流程
例3.11
代码
public class CYcle { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
int a=100;//声明Int型变量a并赋初值100
while (a==60)//指定进入循环体条件
{
System.out.println("ok1");//while语句循环体
a--; //算法递减
}
int b=100;//声明int型变量b并赋初值100
do {//do...while语句循环体
System.out.println("ok2");//条件不成立时输出的信息
b--; //算法递减
} while(b==60);//指定循环结束条件
}
}
结果
3.3.3while与do...while比较
例3.12
代码
public static void main(String[] args) { //主函数
int i=0,j=0; //定义i,j的初值
System.out.println("before do_while j="+ j); //输出外循环值
do{ //执行do while 内循环
j++; //执行j++
}while (i > 1); //内循环判断i条件大于1
System.out.println("after do_while j=" + j);//输出外循环值计算的值
}
}
结果
例3.13
代码
public static void main(String[] args) { //主函数
int i=0,j=0; //定义i,j的初值
System.out.println("before while j=" + j); //输出外循环值
while (i > 1) { //执行 while 内循环
j++; //执行j++
System.out.println("after while j=" + j);//输出外循环值计算的值
}
}
}
结果
3.3.4 for 循环 语句
for循环是Java程序设计中最有用的循环语句之一。 一个 for循环可以用来重复执行某条语句,直到某个条件得到满足。
表达式1:该表达式通常是-个赋值表达式,负责设置循环的起始值,也就是给控制循环的变量赋初值。
表达式2:该表达式通常是一个关系表达式,用控制循环的变量和循环变量允许的范围值进行比较。
表达式3:该表达式通常是一一个赋值表达式,对控制循环的变量进行增大或减小。
例3.14
代码
public static void main(String[] args) {//主函数
int sum = 0; int i; //定义i,sum的初值
for (i = 1; i <= 100; i++){ // for循环语句
sum += i; //执行sum+=i
}
System.out.println("the result :"+ sum);//输出+sum的值
}
}
结果
3.3.5 foreach语句
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而任何foreach语句都可以改写为for语句版本。foreach 并不是一个关键字, 习惯上将这种特殊的 for语句格式称之为foreach语句。foreach语向在遍历数组等方面为程序员提供了很大的方便。
例3.15
代码
结果
3.3.6循环语句的嵌套
例3.16 嵌套
代码
结果
3.4 跳转语句
3.4.1break跳出循环语句
跳转语句包含两方面的内容,一方面是控制循环变量的变化方式,也就是让循环判断中的逻辑关系表达式变成false,从而达到终止循环的效果;一方面 是控制循环的跳转。控制循环的跳转需要用到break和contiue两个关键字,这两条跳转语句的跳转效果不同,break 是中断循环,continue是直接执行下一次循环。
例3.17
代码
结果
例3.18
代码
结果
例3.19
代码
public static void main(String[] args) {//主函数
// TODO Auto-generated method stub
Loop: for (int i=0; i<3;i++){//在for循环前用标签标记
for (int j =0; j<6;j++) {//定义j的初值,判断条件
if (j== 4) {// 如果j等于4的时候就结束外层循环
break Loop;// 跳出 Loop 标签标记的循环体
}
System.out.println("i="+i+"j="+ j);//输出结果
}
}
}
结果
3.4.2 continue语句
continue语句是针对break语句的补充。continue 不是立即跳出循环体,而是跳过本次循环结束前的语句,回到循环的条件测试部分,重新开始执行循环。在for循环语句中遇到continue语句后,首先执行循环的增量部分,然后进行条件测试。在while和do.. .while循环中,continue 语句使控制直接回到条件测试部分。
例3.20
使用continue语句跳出循环
代码
结果
流程图