Java流程控制+带标签的循环与嵌套+题目练习

在之前的js学习中,我们同学也接触到了关于流程控制的内容,事实上流程控制就是我们日常生活中的实际应用,比如我们有时候做一件事会从头到尾的给做下去,有时候会根据实际情况选择做某件事情,有时候会不断重复的做某件事情。
那么,在我们的编程中也会存在类似的情况,本节课程我们就来学习如何去应用编程语法完成对流程的控制。

流程控制分类

  • 顺序结构
  • 判断(分支选择)结构
  • 循环结构

顺序结构

程序是一个自上而下运行的过程。

分支选择结构

Java 中的分支选择结构有 if 结构、switch 结构

if 结构

具备三种类型的结构表现形式

  • 形式一:
if (logic expression) {
    statement;
}

示例:

int age = 20;
if (age > 18) {
    String name = "Tom";
    System.out.println("我叫" + name + ",已经" + age + "岁了,我成年了!");
}

  • 形式二:
if (logic expression) {
    statement;
} else {
    statement;
}

示例:

int age = 16;
if (age > 18) {
    String name = "Tom";
    System.out.println("我叫" + name + ",已经" + age + "岁了,我成年了!");
} else {
    System.out.println("我还未成年!");
}

 

int score = 87;
		if(score>90) {
			System.out.println("优");
		}
		else if (score>80 && score<=90) {
			System.out.println("良好");
		}
		else if (score >60 && score <=80) {
			System.out.println("及格");
		}
		else {
			System.out.println("不及格");
		}
  • 形式三:
if (logic expression) {
    statement;
} else if (logic expression) {
    statement;
} else {
    statement;
}

示例:

if (age >= 0 && age <= 10) {
    System.out.println("少年");
} else if (age <= 18) {
    System.out.println("青少年");
} else if (age <= 30) {
    System.out.println("青年");
} else if (age <= 50) {
    System.out.println("中年");
} else {
    System.out.println("老年");
}

switch 结构

swtich 语句是有控制表达式和多个 case 标签块组成。

在控制表达式中,只允许出现 byte、short、int、char四种基础数据类型,在JDK1.7以后,支持 String 类型的控制表达式。

switch (expression) {
    case condition1 : {
        statement;
        break;
    }
    case condition2 : {
        statement;
        break;
    }
    default : {
        statement;
        break;
    }

}

示例:

String color = "red";
switch (color) {
    case "red": {
        System.out.println("红色");
        break;
    }
    case "blue": {
        System.out.println("蓝色");
        break;
    }
    case "green": {
        System.out.println("绿色");
        break;
    }
    default: {
        System.out.println("没有找到");
        break;
    }
}

 

int score = 8;
	switch (score) {
	case 9:System.out.println("优秀!");
                break;
	case 8:System.out.println("良好!");
            break;
	case 6:System.out.println("及格!");
            break;
	case 5:System.out.println("待拯救!");
            break;
	case 4:System.out.println("不及格!");
           break;
	case 3:System.out.println("不及格!");
            break;
	case 2:System.out.println("不及格!");
            break;
	case 1:System.out.println("不及格!");
            break;
	case 0:System.out.println("不及格!");
            break;
	default:System.out.println("无效");
            break;
	}

在 case 中要加入 break 关键字跳出;
在实际的开发中,我们一般使用 if - else 结构替代 switch。swtich 结构应用的较少。

循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码。
被重复执行的代码叫做循环体
循环语句可能包含的部分有:

  • 初始化语句(init_statement):一条或多条语句,这些语句用于完成一些初始化的工作。
  • 循环条件(test_expression):是一个 boolean 类型的表达式,这个表达式决定是否继续执行循环体。
  • 循环体(body_statement):如果条件允许,循环体会被反复执行。
  • 迭代语句(iteration_statement):在一次循环体执行结束后,对循环体条件进行求值,通常用于控制循环条件中的变量,使得循环在合适的时候结束。

while 结构

(init_statement);
while (test_expression) {
    body_statement;
    [iteration_statement];
}

示例:

int sum = 0;
int i = 1;

while (i <= 10) {
    sum = sum + i;
    i++;
}
System.out.println(sum); // 55

do-while 结构

(init_statement);
do {
    body_statement;
    [iteration_statement];
} while (test_expression)

无论如何都会执行一次循环体内容
示例:

int i = 1;
int sum = 0;

do {
    sum += i++;
//  sum = sum + i;
//  i = i + 1;
} while (i <= 10);

System.out.println(sum); // 11

do {
	System.out.println("请输入密码:");
	pwd1 = sc.nextLine();
	System.out.println("请再次输入密码:");
	pwd2 = sc.nextLine();
	if (!pwd1.equals(pwd2)) {
	System.out.println("输入的密码不一致,重新输入!");
	}
}while(!pwd1.equals(pwd2));

 

for 循环

语法:

for ([init_statement]; test_expression; [iteration_statement]) {
    body_statement;
}

示例:

int sum = 0;
for (int i = 1; i <= 28; i++) {
    sum = sum + i;
}
System.out.println(sum);

int arr[] = {7,10,1};
	for(int x:arr) {
	System.out.println("foreach语句遍历arr并赋给x的值为:"+x);
    }

 

在实际的开发中,对于已知循环次数的遍历,一般使用 for 循环。而且 for 循环的应用场景要比 while 循环多。

控制循环结构

break:在循环体中,使用 break 关键字跳出整个循环

int flag = 6;
int sum = 0;
for (int i = 1; i <= 10; i++) {
    sum = sum + i;
    if (i == flag) {
        break;
    }
}
System.out.println(sum); // 21

continue:在循环体中,使用 continue 跳出本次循环,循环还会继续执行。

int sum = 0;
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
        continue;
    }
    sum = sum + i;
}
System.out.println(sum); // 25

带标签的循环与嵌套

out:for(int x=0;x<=3;x++) {
	System.out.println("x="+x);
	for(int y=0;y<=6;y++) {
		System.out.println("y="+y);
		if(y == 4) {
			break out; //采用标签标记的方式使外层循环在y = 4时暂停
		}
//		if(y == 4) {
//			break;//这里break控制的是内层循环
//		}
	}
}

 

程序调试-debug

开发人员经常会在开发程序的时候出现错误。那么,如何快速的找出错误,就成为开发人员重要的一项技能。
我们把错误通常称为bug,而把找错误叫做debug。
对于找错误,我们通常会采用调试这一方法,它的作用在于能让程序员看清楚程序每一步的效果,在需要查看结果的时候,使用debug查看实际结果是否与预期结果一致。

注意:编译的错误,开发工具一般会自动的报错,我们一般对程序进行调试是为了找出逻辑上的错误。

我们以这段代码为例,进行调试
public static void main(String[] args) {
    int sum = 0;
    for(int n = 1; n <= 5; n++) {
        sum = sum + n;
        //输出sum的值
        System.out.println("sum=" + sum);
    }
    System.out.println("sum=" + sum);
}

步骤:

  1. 设置断点(断点是指程序运行到点的位置就终止了,断点可以设置多个)

    比如想要查看sum的值,就可以在蓝色区域双击,就会出现一个小点,这就是断点。双击和鼠标右键选择也可以取消断点。
  2. 选择调试运行

    鼠标右键选择调试运行,或选择如图所示的调试运行的运行按钮。
  3. 打开debug视图
  4. 视图作用
  5. 快捷键调试
    F5进入函数,单步调试
    F6不进入函数,单步调试
    F7由函数内部,返回调用处
    F8一直执行到下个断点处,知道终止调试

 

 

 

 

练习

一、选择

  1. 请看下面的程序代码,运行结果为:    D
    A. 2  B. 3 C. 4 D. 编译出错,无结果
    
  2. 当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是()    B
    A. 1  B. 2  C. 3  D. 6
    
  3. 关于switch结构,以下说法正确的是?   D
    A. default语句在switch结构中是必需的   //并不是必须的
    B. break语句在switch结构中是必需的    //不会产生报错
    C. default语句后的语句总是会被执行
    D. switch()小括号中的表达式可以是字符串类型
    
  4. 关于选择结构下列哪个说法是正确的?   B
    A. if语句和else语句必须成对出现
    B. if语句可以没有else语句对应
    C. switch结构中每个case语句中必须用break语句
    D. switch结构中必须有default语句
    
  5. 下面代码的运行结果为()     C
    A. 3  B. 7  C. 3 7  D. 7 3
    
  6. 下列语句序列执行后,k 的值是?     C
    A. 0  B. 1  C. 2  D. 3
    
  7. 下面关于这段程序的描述正确的是( )      C
    A. while循环执行10次
    B. 循环是无限循环
    C. 循环体语句一次也不执行
    D. 循环体语句值执行一次
    
  8. 下面这段代码循环体执行()次    B
    A. 1  B. 5  C. 6  D. 无限次
    
  9. 下列语句序列执行后,j 的值是?    D
    A. 3 B. 4  C. 5  D. 6
    
  10. 以下正确的描述是   B
    A. continue语句的作用是结束整个循环的执行   //只结束当前一次循环
    B. 只能在循环体内和switch语句体内使用break语句
    C. 在循环体内使用break语句或continue语句的作用相同
    D. break语句是结束当前循环,但是继续进行下一次循环
    

二、编程

  1. 根据下面数学函数,编写程序根据x的值,计算y的值,最后输出x和y的值。(使用多重if-else结构完成)

    效果图:
public class IfElseDemo {
    public static void main(String[] args) {
		//定义整型变量x并初始化为-5
        int x = -5;

        //定义整型变量y并初始化0
        int y = 0;

        //根据所给条件,使用多重if-else结构求y的值
        if(x<0){
            y=-1;
        } else if(x==0){
            y=0;
        } else if(x>0){
            y=1;
        }

        //输出x和y的值
		System.out.println(x);  //  -5
		System.out.println(y);  //  -1
    }
}
  1. 给定一个字符变量,判断该变量是否为元音字母并输出。
    任务:
    1. 定义一个字符变量ch并初始化
    2. 使用switch结构判断是否为元音字母,如果是元音字母则输出如效果图所示的内容,如果不是元音字母则输出:不是元音字母
      提示:
      元音字母为a、e、i、o、u
    public class CharDemo {
        public static void main(String[] args) {
    		//定义一个字符变量并初始化
            char ch;
            ch = 'i';
    		
    		//使用switch结构判断是否为元音字母,并输出对应的信息
            switch(ch){
                case 'a':{
    		    System.out.println(ch+"是元音字母");
                    break;
                }
                case 'e':{
    		    System.out.println(ch+"是元音字母");
                    break;
                }
                case 'i':{
    		    System.out.println(ch+"是元音字母");
                    break;
                }
                case 'o':{
    		    System.out.println(ch+"是元音字母");
                    break;
                }
                case 'u':{
    		    System.out.println(ch+"是元音字母");
                    break;
                }
                default: {
    		    System.out.println(ch+"不是元音字母");
                    break;
                }
            }
        }
    }
    
  2. 使用while循环求1到5的平方和。
    public class LoopDemo {
        public static void main(String[] args) {
    		//定义整型变量n作为循环变量,并初始化
            int n = 1;
    
            //定义整型变量sum存放和,并初始化
            int sum = 0;
    
            //使用while循环求1到5的平方和
            while( n<=5 ){
                sum +=n*n;
                n++;
            }
    
            //输出平方和
    		System.out.println(sum);   //  55
                
            
    	}
    }
    
  3. 编写一个程序,求出200到300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12。
    任务:
    1. 循环遍历200到300之间的整数
    2. 分别取出个位、十位和百位上的数
    3. 求三个数字的和与积
    4. 判断三个数字的积是否为42,三个数字的和是否为12,如果满足条件则输出该数
    public class LoopDemo {
        public static void main(String[] args) {
    		//定义变量ge、shi、bai,用于存放个位、十位、百位上的数字
            int ge, shi, bai;
    
    		//使用for循环
            for(int i = 200; i <= 300; i++){
    			//取出百位数
    		    bai = i/100;
    
    			//取出十位数
                shi = (i-200)/10;
    			
    			//取出个位数
                ge = ((i-200)-(shi*10));
    		
    			//计算三个数字之积
                int ji = bai * shi * ge;
                
    			//计算三个数字之和
                int he = bai + shi + ge;
    			
                //如果积等于42并且和为12,则将满足条件的数输出
                if(ji == 42 && he == 12){
                    System.out.println(i); //  237   273
    }
    }
    }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值