程序3种基本结构流程图
3.2 条件语句
在Java中,条件语句主要包括if语句和switch语句两种
3.2.1 if条件语句 if条件语句主要用于告诉程序在某个条件成立的情况下执行某段语句,而在另一种情况下执行
另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句;若为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if...else 语句和 if...else if多分支语句。
例3.1 如下所示的两种情况都是正确的。
public class TFTest1 { //创建主类
public static void main(String[] args) { //主方法
if(true) // 让判断条件永远为真
System.out.println("我没有使用大括号");//没有大括号,直接跟在if语句之
if(true){// 让判断条件永远为真
System.out.println("我使用大括号");//输出语句在大括号之内
}
}
}
结果:
例3.2 拨打电话,如果输入的电话号码不是84972266,则提示拨打的号码不存在。
import java.util.Scanner;
public class TakePhone2 { //创建主类
public static void main(String[] args) { //主方法
Scanner in = new Scanner(System.in); //创建scanner对象,用于进行输入
System.out.println("请输入要拨打的电话号码:"); //输出电话号码
int phoneNumber = in.nextInt(); //创建变量,保存电话号码
if (phoneNumber !=84972266) //判断此电话号码是否是84972266
//如果不是84972266号码,则提示号码不存在
System.out.println("对不起,您拨打的号码不存在!"); //输出结果
}
}
结果:
例3.3 在项目中创建类Getifelse,在主方法中定义变量,并通过使用if...else语句判断变量的值来决定输出结果。
public class Getifelse3 { //创建主类
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) { // 判断英语成绩是否大于60
System.out.println("英语及格了"); //条件成立输出的信息
} else{
System.out.println("英语没有及格");// 条件不成立输出的信息
}
}
}
结果
例3.4 在项目中创建类GetTerm,在主方法中定义变量x,使用if...else if多分支语句通过判断x的值决定输出结果。
public class GetTerm4 {//创建主类
public static void main(String args[]){//主方法
int x=20;//声明int型局部变量
if (x > 30) { // 判断变量x是否大于30
System.out.println("a的值大于30");//条件成立的输出信息
} else if (x > 10) { // 判断变量x是否大于10
System.out.println("a的值大于10,但小于30");//条件成立的输出信息"
} else if (x > 0) { // 判断变量x是否大于0
System.out.println("a的值大于0,但小于10");//条件成立的输出信息"
} else { // 当以上条件都不成立时,执行的语句块
System.out.println("a的值小于0");//输出信息
}
}
}
结果
例3.5 判断是否是闰年。
import java.util.Scanner;
public class JudgeLeapYear5 { //创建主类
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 % 40 == 0) //如果能被40整除
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 JudgeLeapYear6 { //创建主类
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");//输出年份
iYear = sc.nextInt(); //控制台输入一个数字
//如果 iYear 可以被4整除并且不能被100整除,或者iYear 可以被 400 整除
if (iYear % 4==0 && iYear % 100 !=0 || iYear % 400 == 0)//判断条件
System.out.println("It is a leap year"); // 是闰年
else
System.out.println("It is not a leap year");// 不是闰年
}
}
结果
3.2.2 switch多分支语句switch语句中参数必须是整型,字符型,枚举类型和字符串类型,常量值1~n必须是与参数兼容的数据类型.
switch 语句首先计算参数的值,如果参数的值和某个case 后面的常量表达式相同,则执行该 case吾句后的若干个语句,直到遇到 break 语句为止。此时如果该 case 语句中没有 break 语句,将继续执行后面 case 中的若干个语句,直到遇到 break 语句为止。若没有任何一个常量表达式与参数的值相同,则执行 default 后面的语句。
break 的作用是跳出整个 switch 语句。
default 语句是可以不写的,如果它不存在,而且 switch 语句中表达式的值不与任何 case 的常量值相同,switch 则不做任何处理。
例3.7 使用swith语句判断星期,并打印出对应的英文。
public class GetSwitch7 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
int week =2; //定义int型变量week
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("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 创建成绩类,使用Scanner 类在控制台输入分数,然后用switch 语句判断输入的分数属于哪类成绩。10分、9分属于优,8分属于良,7分、6分属于及格,5分、4分、3分、2分、1分、0分均为不及格。
public class Grade8 { //创建主类
public static void main(String[] args) {//主方法
Scanner sc=new Scanner(System.in); //创建扫描器
System.out.print("请输入成绩:"); //输出成绩
int grade = sc.nextInt();//控制台输入一个整型变量
switch (grade){ //指定switch语句的表达式为变量grade
case 10:
case 9: System.out.println("成绩为优");break; //定义case语句中常量为10和9的输出“成绩为优”的结果
case 8: System.out.println("成绩为良");break; //定义case语句中常量为8的输出“成绩为良”的结果
case 7:
case 6: System.out.println("成绩为中");break; //定义case语句中常量为6和7的输出“成绩为及格”的结果
case 5:
case 4:
case 3:
case 2:
case 1:
case 0: System.out.println("成绩为差");break; //输出结果
default: System.out.println("成绩无效"); //输出结果
}
}
}
结果
例3.9 通过switch 语句根据字符串str的值,输出不同的提示信息。
public class SwitchInsString9 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
String str="明日科技";
switch(str) { //指定switch语句的表达式为变量str
case"明日": //定义case语句中的常量1
System.out.println("明日图书馆www.mingribook.com");//输出信息
break;
case"明日科技": //定义case语句中的常量2
System.out.println("吉林省明日科技有限公司"); //输出信息
break;
default: //default语句
System.out.println("以上条件都不是。"); //输出信息
}
}
}
结果
3.3 循环语句循环语句就是在满足一定条件的情况下反复执行某一个操作。在Java中提供了4种常用的循环语句,分别是while语句、do...while 语句、for 语句和 foreach 语句,其中,foreach 语句是 for 语句的特殊简化版本。
3.3.1 while循环语句While语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句
例3.10 在项目中创建类GetSum,在主方法中通过while 循环将整数1~10相加,并将结果输出。
public class GetSum10 { //创建主类
public static void main(String[] args) { //主方法
int x= 1; //定义int型变量x,并赋给初值
int sum = 0; //定义变量用于保存相加后的结果
while (x <= 10) {
sum = sum + x; // while循环语句,当变量满足条件表达式时执行循环体语包
x++;
}
System.out.println("sum="+sum);//将变量sum输出
}
}
结果
3.3.2 do...while循环语句do...while 循环语句与 while 循环语句类似,它们之间的区别是 while 语句为先判断条件是否成立再执行循环体,而 do...while 循环语句则先执行一次循环后,再判断条件是否成立。也就是说 do...while 循环语句中“{}”中的程序段至少要被执行一次。
例3.11 在项目中创建类Cycle,在主方法中编写如下代码。通过本实例可看出 while 语句与do...while的区别。
public class Cycle11 { //创建主类
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{
System.out.println("ok2"); //do..while 语句环体
b--;
}while (b == 60); //指定循环结束条件
}
}
结果
3.3.3 while 与 do...while 比较可以通过设置起始循环条件不成立的循环语句来观察 while 和 do...while 的不同。将变量i初值设置为0,然后循环表达式设置为i>1,显然循环条件不成立。循环体执行的是对变量j的加1这算,通过输出变量j在循环前的值和循环后的值进行比较。
例3.12 使用do...while循环输出j的值。
public class DoWhileTest12 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
int i = 0,j = 0; //定义整数型变量i和j的值
System.out.println("before do_while j="+ j); //输出结果
do { //循环
j++; //等价与j=j+1
} while (i > 1); //循环
System.out.println("after do_while j =" + j); //输出结果
}
}
结果
例3.13 使用while循环输出j的值。
public class WhileTest13 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
int i = 0,j = 0; //定义整数型变量i和j的值
System.out.println("before while j="+ j); //输出结果
while (i > 1) { //循环条件
j++; //等价与j=j+1
}
System.out.println("after while j =" + j); //输出结果
}
}
结果
3.3.4 for 循环语句for循环是Java设计中最有用的循环语句之一,一个for循环可以用来重复执行某条语句,直到某个条件得到满足。
for 循环语句的执行流程如下
(1)先执行表达式1.
(2)判断表达式 2,若其值为真,则执行for 语句中指定的内嵌语句,然后执行
(3)若表达式2值为假,则结束循环,转到(5)。
(3)执行表达式3。
(4)返回(2)继续执行。
(5)循环结束,执行 for 语句下面的一个语句。
例3.14 使用for循环完成1~100的相加运算。
public class AdditiveFor14 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
int sum = 0; //给sum赋值
int i; //定义整数型变量i
for (i = 1; i <= 100; i++){ // for循环语句
sum += i; //等价与sum=sum+i
}
System.out.println("the result :"+sum); //输出结果
}
}
结果
3.3.5 foreach语句 foreach 语句是 for 语句的特殊简化版本,但是 foreach 语句并不能完全取代 for 语句,然而任何
foreach 语句都可以改写为 for 语句版本。foreach 并不是一个关键字,习惯上将这种特殊的 for 语句格式称之为foreach语句。foreach 语句在遍历数组等方面为程序员提供了很大的方便。
例3.15 在项目中创建类Repetition,在主方法中定义一堆数组,并使用foreach语句遍历该数组。
public class Repetition15 {//创建类 Repetition15
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
int arr[]={7,10,1 }; //声明一维数组
System.out.println("一维数组中的元素分别为:"); //输出信息
for (int x:arr){ //foreach语句,int x引用的变量,arr指定要循环遍历的数组,最后将x输出
System.out.println(x); //输出结果
}
}
}
结果
3.3.6 循环语句的嵌套循环有for、while、do...while3 种方式,这3种循环可以相互嵌套。
例3.16 使用嵌套的for循环输出乘法口诀表。
public class Multiplication16 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
int i, j; //创建两个整型变量
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.4 跳转语句跳转语句包含两方面的内容,一方面是控制循环变量的变化方式,也就是让循环判断中的逻辑关系表达式变成false,从而达到终止循环的效果;一方面是控制循环的跳转。控制循环的跳转需要用到 break 和 continue 两个关键字,这两条跳转语句的跳转效果不同,break 是中断循环,continue是直接执行下一次循环。
3.4.1 break语句使用break 语句可以跳出 switch 结构。在循环结构中,同样也可用 break 语句跳出当前循环体从而中断当前循环。
例3.17 输出1~20(不包含20)的第一个偶数,使用break跳出循环。
public class BreakTest17 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
for (int i = 1;i < 20;i++){ //循环条件
if(i % 2 == 0) {// 如果i是偶数
System.out.println(i);// 输出i的值
break;// 跳到下一循环
}
}
System.out.println("---end---"); //输出结果
}
}
结果
例3.18 在嵌套的循环中使用break,跳出内层循环。
public class BreakInsideNested18 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
for (int i = 0; i < 3; i++) { 在for循环前用标签标记
for (int j = 0; j < 6; j++) { 在for循环前用标签标记
if(j == 4) { //如果j等于4的时候就结束
break;//跳出循环
}
System.out.println("i=" + i + " j=" + j); //输出i和j的结果
}
}
}
}
结果
例3.19 使用带有标签的break跳出外层循环。
public class BreakOutsideNested19 { //创建主类
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++) { //循环条件
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 输出1~20(不包含20)的第一个偶数,使用continue跳出循环。
public class ContinueTest20 { //创建主类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
for (int i = 1; i< 20; i++) { //循环条件
if (i % 2 != 0) { // 如果i不是偶数
continue; // 跳到下一循环
}
System.out.println(i); // 输出i的值
}
}
}
结果



