程序流程控制

一、顺序

示例

class Test {
	public static void main(String[] args) {
		int num1 = 1;
		int num2 = 2;
		int num3 = num1 + num2;
		System.out.println(num3);
	}

}![在这里插入图片描述](https://img-blog.csdnimg.cn/20201124164922713.png#pic_center

小结

程序从上到下逐行地执行,中间没有任何判断和跳转。

二、分支

1.if-else

示例1:

import java.util.Scanner;

class IfTest 
{
	public static void main(String[] args) 
	{
		Scanner scan = new Scanner(System.in);

		System.out.println("请输入成绩:(0-100)");
		int score = scan.nextInt();

		if(score == 100){
		   System.out.println("奖励一辆BMW");
		}else if(score <= 99 && score > 80){
		   System.out.println("奖励一台iphone");
		}else if(score <= 80 && score > 60){
		   System.out.println("奖励一台ipad");
		}else{
		   System.out.println("什么也没有");
		}
	}
}

示例2:(将输入的三个整数从小到大排列)

import java.util.Scanner;

class IfTest2  
{
	public static void main(String[] args) 
	{
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入第一个整数:");
		int num1 = scan.nextInt();
		System.out.println("请输入第二个整数:");
		int num2 = scan.nextInt();
		System.out.println("请输入第三个整数:");
		int num3 = scan.nextInt();

		if(num1 >= num2){
			if(num3 >= num1){
				System.out.println(num2 + "," + num1 + "," + num3);
			}else if(num3 <= num2){
				System.out.println(num3 + "," + num2 + "," + num1);
			}else{
				System.out.println(num2 + "," + num3 + "," + num1);
			}
		}else{
			if(num3 >= num2){
				System.out.println(num1 + "," + num2 + "," + num3);
			}else if(num3 <= num1){
				System.out.println(num3 + "," + num1 + "," + num2);
			}else{
				System.out.println(num1 + "," + num3 + "," + num2);
			}
		}
	}
}

小结

1.else结构是可选的
2.针对条件表达式:
如果多个表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面没有影响。
如果多个表达式之间有交集的关系,需要根据实际情况排好顺序。
执行一个条件表达式后直接退出,不再执行其他的条件表达式。
3.if-else结构可以互相嵌套,但一般不超过2层
4.当else-if里面只有一条执行语句时,{}可以省略,但不建议。
5.else具有就近原则。

2.switch-case

示例1:

class SwitchCaseTest {
	public static void main(String[] args) 
	{
		int number = 2;
		switch(number){
		case 0:
			System.out.println("zero");
		case 1:
			System.out.println("one");
		case 2:
			System.out.println("two");
		case 3:
			System.out.println("three");
		default:
			System.out.println("other");
		}
	}
}//输出:two three other

小结:

1.根据switch表达式中的值,一次匹配各个case中的常量,一旦匹配成功,则进入相应的case结构中,
当调用完执行语句后,则仍然向下执行其他case结构中的执行语句,知道遇到break关键字或此switch结构末尾结束。
2.break可以用在switch-case结构中,表示跳出。
3.switch结构中的表达式,只能是如下的6种数据类型之一:byte、short、char、int、枚举类型(jdk5.0新增)、string(jdk7.0新增)
4.case之后只能声明变量,不能声明范围。
5.break关键字是可选的。
6.default:
相当于if-else结构中的else
可选的,位置也可以变化,不一定要放在末尾,但一般放在末尾。

示例2:(对学生成绩大于60分的,输出为“合格”,低于60分的,输出“不合格”)

	 switch(score / 60){
	 case 0:
	     System.out.println("不及格");
		 break;
	 case 1;
	     System.out.println("及格");
		 break;
	 }

小结:

对于这种switch-case结构中的多个case的执行语句类似时,则可以考虑合并,例如此题可以将分数除以60.

示例3:(从键盘输 入“year”,“month”和“day”,要求通过程序输出输入的日期为那年的第几天。)

import java.util.Scanner;

class SwitchCaseTest2{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);

		System.out.println("请输入年year:");
		int year = scan.nextInt();
		System.out.println("请输入月:");
		int month = scan.nextInt();
		System.out.println("请输入day:");
		int day = scan.nextInt();
		
		int sumDays = 0;//定义一个变量来保存总天数


		//方式一:if-else
		/*
		if(month == 1){
			sumDays = day
		}else if(month == 2){
			sumDays = 31 + day
		}else if(month == 3){
			sumDays = 31 + 29 + day
		}
		...
		*/舍弃
		//方式二:switch-case和方法一类似
		/*
		switch(month){
			case 1:
				sumDays = day;
			    break;
			case 2:
				sumDays = 31 + day;
			...
		}
		*/舍弃
		//更优的方案:
		switch(month){
			case 12:
				sumDays += 30;
			case 11:
				sumDays += 31;
			case 10:
				sumDays += 30;
			case 9:
				sumDays += 31;
			case 8:
				sumDays += 31;
			case 7:
				sumDays += 30;
			case 6:
				sumDays += 31;
			case 5:
				sumDays += 30;
			case 4:
				sumDays += 31;
			case 3:
				//判断是否为闰年
				if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
				    sumDays += 29;
			    }else{
					sumDays += 28;
				}
			case 2:
				sumDays += 31;
			case 1:
				sumDays += day;
		}
		System.out.println(year + "年" + month + "月" + day + "是那年的第" + sumDays + "天");

	}
}

小结:

1.break是可选的。
2. if-else 可以嵌套在switch-case中。
3.if-else 和switch-case的区别:
凡是可以使用switch-case的结构,都可以转换为if-else。反之不成立
当两者都可以使用,同时case的情况不多时,优先选择switch-case(执行效率略高)

三、循环

1.for

示例1:(遍历100以内的偶数,记录个数,并输出所有偶数的和)

class ForTest{
	public static void main(String[] args) {
		int count = 0;
		int sum = 0;
		for(int i = 1;i <= 100;i++){
			if(i % 2 == 0){
				System.out.println(i);
				sum += i;
				count ++;
			}
		}
		System.out.println("个数为:" + count);
		System.out.println("总和为:" + sum);
	}
}
/*输出:50
       2050
*/

小结:

1.for循环结构的4要素:@1初始化条件
@2循环条件—boolean类型
@3循环体
@4迭代条件
2.for循环结构
for(@1;@2;@4){
@3
}
执行过程:@1-@2-@3-@4-@2-@3-@4-@2-@3-@4----@2-结束

实例2:(从1-150,在每行打印一个值,在每个3的倍数行上打印“foo”,在每个5的倍数行打印“biz”,在每个7的倍数行上打印“baz”)

class ForTest1 {
	public static void main(String[] args) {

		for(int i = 1;i <= 150;i++){

			System.out.print(i + " ");
			if(i % 3 == 0){
				System.out.print("foo ");
			}
			if(i % 5 == 0){
				System.out.print("biz ");
			}
			if(i % 7 == 0){
				System.out.print("baz");
			}
			System.out.println();
		}
	}
}

示例3:(求两个正整数的最大公约数和最小公倍数)

import java.util.Scanner;

class ForTest2 {
	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);

		System.out.println("请输入第一个正整数:");
		int m =  scan.nextInt();

		System.out.println("请输入第二个正整数:");
		int n = scan.nextInt();

		//获取两个数中的较小值
		int min = (m <= n)?m : n;
		for(int i = min;i >= 1;i--){
			if(m % i == 0 && n % i == 0){
				System.out.println("最大公约数为:"+ i);
				break;
				}
			}
		//获取两个数中的最大值
		int max = (m >= n)?m : n;
		for(int i = max;i <= m * n;i++){
			if( i % m ==0 && i % n == 0){
				System.out.println("最小公倍数为:"+ i);
				break;
				}
			}
		}
}

在这里插入图片描述

示例3:(输出所有的水仙花数,指一位3位数,各个位上的数字立方和等于其本身)

class ForTest3{
	public static void main(String[] args) 
	{
		Scanner scan = new Scanner(System.in);

		for(int num = 100;num < 1000;num++){
			if(num == ((num / 100) * (num / 100) * (num / 100)) + ((num % 100 / 10) * (num % 100 / 10) * ( num % 100 / 10))
				+ ((num % 10) * (num % 10) * (num % 10)))
				System.out.println(num);
		}
	}
}

在这里插入图片描述

2.while

示例:

class WhileTest {
	public static void main(Stri  ng[] args){

		int i = 0;
		while(i <= 100){
			if(i % 2 == 0){
				System.out.println(i);
			}
			i++;
		}
	}
}

小结:

1.while循环的结构
@1
while(@2){
@3;
@4;
}
2.执行过程:@1-@2-@3-@4-@2-@3-@4-@2-@3-@4-…@2
3.如果不写迭代条件@4,可能会导致死循环。
4.for循环和while循环是可以相互转换的。
5.区别:初始化条件部分(@1)的作用域不同.

3.do-while:

示例:(遍历100以内的偶数,并计算所有偶数的个数和偶数的和)

class DoWhileTest {
	public static void main(String[] args) {

		int num = 0;
		int sum = 0;
		int count = 0;
		do{
			if(num % 2 == 0){
			System.out.println(num);
			sum += num;
			count++;
			}
			num++;
		}while(num <= 100);
		System.out.println("总和为:" + sum);
		System.out.println("个数为:" + count);
	}
}

小结:

1.do-while循环结构:
@1
do{
@3;
@4;
}while(@2);
2.执行过程:@1-@3-@4-@2-@3-@4-@2-…@2
3.do-while至少执行一次循环体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值