5-Java中的语句结构
Java中我们执行main方法中的代码的时候是有先后顺序的,之前所写的代码都从上往下一行行执行了,没有遗落,除非报错,这种执行顺序我们叫顺序结构
,最简单的结构。
1 顺序结构
程序从上到下一行一行的执行代码,没有判断和中转,写在前面的代码先执行,写在后面的代码后执行
2 分支结构
分支结构又称为选择结构,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程,在这个结构中代码有可能执行一次,也有可能一次也不执行,在Java中分支结构的具体实现有if语句
和switch语句
if语句
switch语句
2.1 if语句
语法结构
if ( 关系表达式 ) {
// 语句体
}else{
//语法体
}
案例:
package com.bobo.ifdemo;
import java.util.Scanner;
public class IfDemo01 {
/**
* if语句
* 需求:如果小明考试成绩大于90分,周末去海底世界游玩,
* 这样的场景我们应该怎么来实现?
* @param args
*/
public static void main(String[] args) {
// 获取一个Scanner对象
Scanner in = new Scanner(System.in);
System.out.println("请输入小明的考试成绩: " );
int score = in.nextInt();
if (score > 90) {
System.out.println("周末去海底世界游玩....");
}
System.out.println("-------------------");
}
}
面试题:
int i = 99;
if ( i > 100); {
System.out.println("HelloWorld");
}
这段程序有没有问题?如果有问题什么原因?如果没有问题那么输出的结果是什么?
public static void main(String[] args) {
int i = 99;
if ( i > 100)
; // 这是一行代码
// 这是一个代码块
{
System.out.println("HelloWorld");
}
}
不会报错,输出的结果是 HelloWorld
2.2 多重if-else语句
有这样一个场景:
老师在批改试卷,成绩在90分以上的为优秀,成绩在80-90分之间为良好,成绩在60-80分之间的为合格,60分以下的为差,这个应该要怎么来实现?
多重if-else语句语法:
if (条件1) {
// 代码1
}else if(条件2){
// 代码2
}else if(条件3){
// 代码3
}...{
}else{
// 代码N
}
执行顺序:
-
判断条件1,结果为true或者false
-
如果为true,直接执行代码1,然后结束
-
如果为false,那么看条件2是否为true
-
如果为true,直接执行代码2
-
否则判断条件3以此类推,如果所有的 else - if语句都返回的是false,那么执行else中的代码
注意:
- else if 可以有0到多个
- else语句最多只能有一个
- 一般超过三个
if-else
推荐使用switch
替换,方便效率
案例:
import java.util.Scanner;
public class IfDemo06 {
/**
* 老师在批改试卷,成绩在90分以上的为优秀,
* 成绩在80-90分之间为良好,
* 成绩在60-80分之间的为合格,
* 60分以下的为差,
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入考试成绩:" );
int score = in.nextInt();
String info = "";
if (score >= 90) {
info = "成绩优秀";
}else if(score >=80 ){
info = "成绩良好,继续加油";
}else if (score >= 60) {
info = "成绩刚好及格,努力加油";
}else {
info = "成绩很差,明天叫家长过来....";
}
System.out.println(info);
}
}
2.3 switch语句
switch语句是根据表示的不同的值做出不同的执行的,针对特定的值来出来
语法格式:
switch(表达式){//表达式的值得类型必须是如下几种(int shor byte char String) String是**jkd7**之后支持的
case 值1:
代码1;
break;
case 值2:
代码2:
break;
....N
default:
默认语句;
break;
}
注意:
-
表达式的值得类型必须是如下几种(int shor byte char String) String是jkd7之后支持的
-
case 后面跟常量(整型常量、字符常量…)
-
default子句是可选的,同时default块顺序可以变动,但要注意执行顺序,通常default块放在末尾,也可以省略
-
break语句的作用是在执行完一个case分支后是程序跳出switch语句块
import java.util.Scanner;
public class SwitchDemo01 {
/**
* 模拟:拨打中国电信客户的案例
* 按1:办理快带业务
* 按2:办理手机业务
* 按3:办理投诉业务
* 按4:转人工服务
* 没有上面的选项: 对不起您的输入有误
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入您服务编号:");
int num = in.nextInt();
switch (num) {//表达式的值得类型必须是如下几种(int shor byte char String) String是**jkd7**之后支持的
case 1://唯一,case 后面跟常量(整型常量、字符常量......)
System.out.println("办理快带业务");
break;
case 2:
System.out.println("办理手机业务");
break;
case 3:
System.out.println("办理投诉业务");
break;
case 4:
System.out.println("转人工服务");
break;
default:
System.out.println("对不起您的输入有误");
break;
}
}
}
2.4 switch和if对比
if语句
- 表达式的结果是boolean类型
- 常用于区间的判断
switch语句
- 表达式的类型不能是boolean类型,可以是 byte,short,int,char和String 枚举类型
- 常用于等值判断
选择语句的选取
- 能switch语句实现的就一定能够有if语句实现,但是反之就不一定了
- 如果是区间范围的采用if语句,如果是等值判断的使用switch语句
2.5 经典题目
-
若a和b均是整型变量并已正确赋值,正确的switch语句是( )。
A) switch(a+b); { … } B) switch( a+b*3.0 ) { … }
C) switch a { … } D) switch ( a%b ) { … } -
设int 型变量 a、b,float 型变量 x、y,char 型变量 ch 均已正确定义并赋值,正确的switch语句是( )。
A) switch (x + y) { … } B) switch ( ch + 1 ) { … }
C) switch ch { … } D) switch ( a + b ); { … } -
下列语句序列执行后,k 的值是( )。
int x = 6, y = 10, k = 5; switch (x % y) { case 0: k = x * y; case 6: k = x / y; case 12: k = x - y; default: k = x * y - x; }
A) 60 B) 5 C) 0 D) 54
-
下列语句序列执行后,k 的值是( )。
int i = 10, j = 18, k = 30; switch (j - i) { case 8: k++; case 9: k += 2; case 10: k += 3; default: k /= j; }
A) 31 B) 32 C) 2 D) 33
-
下列语句序列执行后,r 的值是( )
char ch = '8'; int r = 10; switch (ch + 1) { case '7': r = r + 3; case '8': r = r + 5; case '9': r = r + 6; break; default: r = r + 8; }
A) 13 B) 15 C) 16 D) 18
-
下面语句运行结果为:()
switch (5) { default: System.out.println(5); break; case 0: System.out.println(0); break; case 1: System.out.println(1); break; case 2: System.out.println(2); break; }
A) 0 B) 1 C) 2 D) 5
-
下面语句运行结果为:()
switch (5) { default: System.out.print(5); case 0: System.out.print(0); case 1: System.out.print(1); break; case 2: System.out.print(2); break; }
A) 1 B) 5 C) 0 D) 501
3 循环结构
在满足循环条件的情况下,反复执行特定的代码,特定的代码有可能一次也不执行,也有可能执行了很多遍
for循环
while循环
do while 循环
3.1 for循环
for( 表达式1 ; 表达式2 ; 表达式3 )
{
// 循环体语句
}
语法格式说明:
for( 初始化语句 ; 循环条件语句 ; 控制条件语句 )
{
// 循环体语句
}
表达式 | 说明 |
---|---|
表达式1 | 初始化语句,完成变量的初始化操作 初始化语句只会在第一次执行一次 |
表达式2 | 循环条件语句,boolean类型,返回true进入循环体,返回false结束循环 |
表达式3 | 控制条件语句,在循环体执行完成后执行的代码,负责修正变量,改变循环条件的 |
for循环的执行流程
课堂案例
-
控制台输出数据1-10
-
计算1到100的和,用for语句实现
/**
* 计算1到100的和,用for语句实现
* @param args
*/
public static void main(String[] args) {
// 在for循环之外创建一个变量 来接收我们的数据 相当于一个 容器
int total = 0 ; // 保存计算结果
for ( int i = 1 ; i <= 100 ; i ++) {
total += i; // 将变量的结果累加到到total中
}
System.out.println(total);
}
- 求1~100之间不能被3整除的数的和
package com.bobo.fordemo;
public class ForDemo04 {
/**
* 求1~100之间不能被3整除的数的和
* 1.先找到所有不能被3整除的数
* 2.将找到的数累加即可
* @param args
*/
public static void main(String[] args) {
int total = 0;
for( int i = 1 ; i <= 100 ; i ++){
if (i % 3 != 0) {
// 表示不能被3整除
// System.out.println(i);
total += i;
}
}
System.out.println("1~100之间不能被3整除的数的和:" + total);
}
}
3.2.while循环
while是Java使用频率也比较高的一种循环方式。while语句的语法结构要比for循环简单些
语法格式
while (条件表达式) {
// 循环语句
}
/**
* while循环
* @param args
*/
public static void main(String[] args) {
int i = 0;
while( i < 10){
System.out.println("i = " + i);
i ++ ;
}
System.out.println("循环结束...");
}
while语句的执行顺序
- 首先判断条件表达式结果是为true还是false
- 如果结果是true,执行循环体
- 如果结果是false,退出循环体
课堂案例
1.用while语句去实现1到100的和
package com.bobo.whiledemo;
public class WhileDemo02 {
/**
* 用while语句去实现1到100的和
* @param args
*/
public static void main(String[] args) {
int total = 0; // 记录总和
int i = 1; // 声明的变量
while( i <= 100){
total += i;
// 改变循环条件
i ++; // 不能漏掉,不然会 死循环
}
System.out.println("1到100的和是:" + total);
}
}
2.用while语句实现1到100偶数的和
/**
* 用while语句实现1到100偶数的和
* @param args
*/
public static void main(String[] args) {
int total = 0;
int i = 0;
while( i <= 100){
if( i % 2 == 0){
// 表示循环的数字是偶数
total += i;
}
i++;
}
System.out.println("1到100之间的偶数和是:" + total);
}
public static void main(String[] args) {
int sum = 0;
int i = 2;
while(i <= 100){
sum += i;
i += 2; // 每次自增2
}
System.out.println("sum = " + sum);
}
3.3 do while循环
do while循环的特点:先执行一次循环体,然后在判断条件是否成立
语法结构
do{
循环语句;
}while ( 条件表达式 ) ;
public static void main(String[] args) {
int i = 0 ;
do{
// 循环在循环条件判断之前执行一次
System.out.println("----" + i);
}while(i < 0);
System.out.println("循环执行结束...");
}
执行顺序
- 先执行循环语句一次
- 然后判断条件语句的返回结果是true还是false
- 如果是true再执行一次循环体,然后判断条件语句
- 如果是false,那么直接退出循环
4 break、continue、return关键字
4.1break关键字
在循环过程中我们要跳出循环的时候那么可以通过break
关键字来实现,改变程序控制流。
4.2continue关键字
作用:continue关键字用于跳过某个循环语句的一次执行,下一次循环还会继续
4.3return关键字
return关键字的作用是从当前方法中退出。返回到调用该方法的语句处,并且从该语句的下一条语句处开始执行。还没有讲方法,我们会在下节课中给大家详细介绍