目录
例3.4在项目中创建类Getifese,在主方法中定义变量,使用if..else if多分支语句通过断x的值决定输出结果。
例3.9 通过switch语句根据字符串str的值,输出不同的提示信息。
例3.10在项目中创建类Cycle,在主方法中通过while循环将整数1—100相加
例3.15在项目中创建类Repetition,在主方法中定义一维数组,并使用foreach语句遍历
例3.20输出1—20的偶数使用continue语句跳出循环
3.1 程序结构
顺序结构、选择结构和循环结构是结构化程序设计的3种基本结构,是各种复杂程序的基本构造单元。图3.1展示了这3种程序结构的基本理念,其中,第一幅图是顺序结构的流程图,它就是按照书写顺序执行的语句构成的程序段;第二幅图是选择结构的流程图,它主要根据输入数据和中间结果
3.2条件语句
在Java中,条件语句主要包括if语句和switch语句两种
3.2.1 if条件语句
if条件语句主要用于告诉程序在某个条件成立的情况下执行某段语句,而在另一种情况下执行
另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句;若为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if...else 语句和 if...else if多分支语句。
例3.2两种情况都是正确的
public class IFTest {
public static void main(String[] args) {
if (true) // 让判断条件永远为真
System.out.println("我没有使用大括号");//没有大括号,直接跟在if语句之后if(true) (//让判断条件永远为真
System.out.println("我使用大括号");//输出语句在大括号之内
}
}
例3.2 拨打电话
import java.util.Scanner;
public class TakePhone {
public static void main(String[] args) {
Scanner in= new Scanner(System.in);//创建Scanner对象,用于进行输入
System.out.println("请输入要拨打的电话号码");
int phoneNumber =in.nextInt();//创建变量,保存电话号码
if(phoneNumber!=84972266);//判断此电话号码是否是8497226
//如果不是8497226好吗,则提示号码不存在
System.out.println("对不起,您拨打的号码不存在!");
}
}
3. if...else if多分支语句
if...else if多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件,就进行某种处理;如果满足另一种条件,则进行另一种处理”
例3.3使用if...else语句判断变量的值来定输出结果
public class Getifelse {
public static void main(String[] args) {
// TODO Auto-generated method stub
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在项目中创建类Getifese,在主方法中定义变量,使用if..else if多分支语句通过断x的值决定输出结果。
public class GetTerm {
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,但小于30");//条件成立的输出信息
}else {当以上条件都不成立时,执行的语句块
System.out.println("a的值小于0");//输出信息
}
}
}
4. if语句的嵌套
前面讲过三种形式的条件语句,这三种形式的条件语句都可以嵌套条件语句。例如,在第一形式的条件语句中嵌套第二种形式的条件语句。形式如下:
if(表达式1){
if(表达式2)
语句1;
else
语句2;}
在第二种形式的条件语句中嵌套第二种形式的条件语句。形式如下:
if(表达式1){
if(表达式2)
语句1;
else
语句2;}
else{
if(表达式2)
语句1;
else
语句2;}
条件语句可以有多种嵌套方式,可以根据具体需要进行设计,但一定要注意逻辑关系
例3.5判断是否是闰年
import java.util.Scanner;
public class JudgeL {
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 Judel2 {
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 &&iYear %100!=0||iYear%400==0)
System.out.println("It is a leap year"); //是闰年
else
System.out.println("It is not a leap year"); // 不是闰年
}
}
switch语句
switch语句中参数必须是整型,字符型,枚举类型和字符串类型,常量值1~n必须是与参数兼容的数据类型.
switch 语句首先计算参数的值,如果参数的值和某个case 后面的常量表达式相同,则执行该 case吾句后的若干个语句,直到遇到 break 语句为止。此时如果该 case 语句中没有 break 语句,将继续执行后面 case 中的若干个语句,直到遇到 break 语句为止。若没有任何一个常量表达式与参数的值相同,则执行 default 后面的语句。
break 的作用是跳出整个 switch 语句。
default 语句是可以不写的,如果它不存在,而且 switch 语句中表达式的值不与任何 case 的常量值相同,switch 则不做任何处理。
以一个较简单明了的方式来实现“多选一”的选择。 语法如下
switch(用于判断的参数){
case 常量表达式1:语句1;[break;]
case 常量表达式2:语句2;[break;]......
case 常量表达式n:语句n;[break;]
default:语句n+1;[break;]}
switch语句首先计算参数的值,如果参数的值和某个case后面的常量表达式相同,则执行该case语句后的若干个语句,直到遇到break语句为止。此时如果该case语句中没有break语句,将继续执行后面case中的若干个语句,直到遇到break语句为止。若没有任何一个常量表达式与参数的值相同,则执行default后面的语句。
break的作用是跳出整个switch语句。
default语句是可以不写的,如果它不存在,而且switch语句中表达式的值不与任何case的常量值相同,switch则不做任何处理。switch语句的执行流程如图3.11所示。
例3.7使用switch语句判断星期,并打印对应的英文
public class GetSwitch {
public static void main(String[] args) {
int week=2;//定义int型变量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:
System.out.println("Sorry,I don't Know");
}
}
}
例3.8创建成绩类,使用Scanner类在控制台输入分数, 图3.12判断星期并打印出脸 例3.publ
然后用switch语句判断输入的分数属于哪类成绩。10分、9分
属于优,8分属于良,7分、6分属于及格,5分、4分、3分、2分、1分、0分均为不及格。
import java.util.Scanner;
public class Grade {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入成绩:");
int grade=sc.nextInt();
switch(grade) {
case 10:
case 9:System.out.println("成绩为优");break;
case 8:System.out.println("成绩为良");break;
case 7:
case 6:System.out.println("成绩为中");break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:System.out.println("成绩为差");break;
default:System.out.println("成绩为中");break;
}
}
}
例3.9 通过switch语句根据字符串str的值,输出不同的提示信息。
public class SwitchInSring {
public static void main(String[] args) {
String str="明日科技";
switch(str) {
case "明日":
System.out.println("明日图书网ww.mingribook.com");
break;
case "明日科技":
System.out.println("吉林省明日科技有限公司");
break;
default:
System.out.println("以上条件都不是。");
}
}
}
3.3循环语句
循环语句就是在满足一定条件的情况下反复执行某一个操作。在Java中提供了4种常用的循环语句,分别是while语句、do...while 语句、for 语句和 foreach 语句,其中,foreach 语句是 for 语句的特殊简化版本。
3.3.1 while循环语句
While语句的循环方式为利用一个条件来控制是否要继续反复执行这个语句
例3.10在项目中创建类Cycle,在主方法中通过while循环将整数1—100相加
public class GetSum {
public static void main(String[] args) {//主方法
int x=1;
int sum=0;//定义变量用于保存想加后的结果
while(x<=10) {
sum=sum+x;//while循环语句
x++;
}
System.out.println("sum="+sum);//将变量sum输出
}
}
3.2 do...while循环语句
do...while 循环语句与 while 循环语句类似,它们之间的区别是 while 语句为先判断条件是否成立再执行循环体,而 do...while 循环语句则先执行一次循环后,再判断条件是否成立。也就是说 do...while 循环语句中“{}”中的程序段至少要被执行一次。
例3.11 在项目中创建类Cycle
public class Cycle {
public static void main(String[] args) {
int a=100; //声明int型变量a并赋初值100
while(a==60) { //指定进入循环条件
System.out.println("ok1");//while语句循环体
a--;
}
int b=100; //声明int型变量a并赋初值100
do {
System.out.println("ok2");//do while语句循环体
b--;
}while(b==60); //指定循环结束条件
}
}
3.3 while 与 do...while 比较
可以通过设置起始循环条件不成立的循环语句来观察 while 和 do...while 的不同。将变量i初值设置为0,然后循环表达式设置为i>1,显然循环条件不成立。循环体执行的是对变量j的加1这算,通过输出变量j在循环前的值和循环后的值进行比较。
例3.12使用do..while循环输出J的值
public class Dowhile {
public static void main(String[] args) {
int i=0,j=0;
System.out.println("before do_whlie j="+j);
do {
j++;
}while (i>1);
System.out.println("atter do_while j="+j);
}
}
例3.13使用while循环输出J的值
public class WhileTest {
public static void main(String[] args) {
int i=0,j=0;
System.out.println("before do_whlie j="+j);
while (i>1);{
j++;}
System.out.println("atter do_while j="+j);
}
}
例3.14 使用for循环完成1—100的相加运算
public class AdditiveFor {
public static void main(String[] args) {
int sum=0;
int i;
for(i=1;i<=100;i++) {
sum+=i;
}
System.out.println("the result :"+sum);
}
}
3.5 foreach语句
foreach 语句是 for 语句的特殊简化版本,但是 foreach 语句并不能完全取代 for 语句,然而任何
foreach 语句都可以改写为 for 语句版本。foreach 并不是一个关键字,习惯上将这种特殊的 for 语句格式称之为foreach语句。foreach 语句在遍历数组等方面为程序员提供了很大的方便。
例3.15在项目中创建类Repetition,在主方法中定义一维数组,并使用foreach语句遍历
public class Repetition {
public static void main(String[] args) {
int arr[]= {7,10,1};//声明一维数组
System.out.println("一维数组中的元素分别为");//输出信息
for(int x :arr) {
System.out.println(x);
}
}
}
例3.16使用嵌套的for循环输出乘法口诀
public class Multip {
public static void main(String[] args) {
int i, j;//创建两个整数变量
for(i=1; i<10;i++) {//输出九行
for(j=1;j<i+1;j++) {//输出行数相等的列
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();//换行
}
}
}
3.4跳转语句
跳转语句包含两方面的内容,一方面是控制循环变量的变化方式,也就是让循环判断中的逻关系表达式变成false,从而达到终止循环的效果;一方面是控制循环的跳转。控制循环的跳转满用到break和coninue 两个关键字,这两条跳转语句的跳转效果不同,break是中断循环,conting是直接执行下一次循环。
3.4.1 break 语句
营一视,近视频 使用break语句可以跳出switch结构。在循环结构中,同样也可用break语句跳出当前循环体
从而中断当前循环。
例3.17输出1—20的第一个偶数,使用break跳出循环
public class BreakTest {
public static void main(String[] args) {
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 BreakInside {
public static void main(String[] args) {
for(int i=0;i<3;i++) {
for(int j=0;j<6;j++) {
if(j==4) {//如果J等于4的时候就结束内循环
break;
}
System.out.println("i="+i+" j="+j);
}
}
}
}
例3.19使用带有标签的break跳出外层循环
public class BreakOutside {
public static void main(String[] args) {
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种循环语句中使用continue语句的形式如图3.31所示。
例3.20输出1—20的偶数使用continue语句跳出循环
public class Continue {
public static void main(String[] args) {
for(int i=1;i<20;i++) {
if(i%2!=0) {//如果i不是偶数
continue;//跳入下一循环
}
System.out.println(i);
}
}
}
本章小结
本章介绍了流程控制语句(条件语句、循环语句和跳转语句);通过使用if与switch语句,可以基于布尔类型的测试,将一个程序分成不同的部分:通过 while、do..while 循环语句和for循环语句,可以让程序的一部分重复执行,直到满足某个终止循环的条件;for和while一样是先判断再执行,for就是来拯救大家的,for用更加简单的语句解决了while的问题for(初始化;条件1;条件2){循环体};使用跳转语句可以使条件语句和循环语句变得更加灵活。
“顺序结构”代表“先执行a,再执行b”的逻辑。
“条件判断结构”代表“如果…,则…”的逻辑。
“循环结构”代表“如果…,则重复执行…”的逻辑。