J2EE | 基础篇 | D03 判断、选择、循环、控制语句详解以及课后作业分析与改进

if else判断语句

第一种结构:
            if(boolean表达式){
                java语句;
            }
 解释:如果if后面的boolean表达式是true就执行大括号里面的java语句
             如果是false就不执行大括号中的java语句                
第二种结构:
        if(boolean表达式){
            java语句;
        }else{
            java语句;
        }

    解释:如果if后面的boolean表达式是true,就执行if大括号中的java语句,
         不执行else大括号中的java语句。
         如果if后面的boolean表达式是false,就不执行if大括号中的java语句,
         会执行else大括号中的java语句。
第三种结构:
        if(boolean表达式){
            java语句;
        }else if(boolean表达式){
            java语句;
        }else if(boolean表达式){
            java语句;
        }else if(boolean表达式){
            java语句;
        }else{
            java语句;
        }

    解释:当if后面的boolean表达式是true时,才会执行当前if大括号中的java语句,
         如果if后面的boolean表达式都不是true的话,会执行else中的语句。
         注意:如果有两个以上(包括两个)的if后面boolean表达式是true时,会按照从上到下的顺序只执行最上面if大括号中的语句,最多只会执行一个大括号中的语句。

switch选择语句

switch(表达式){

case 值1:
    java语句;
    break;

case 值2:
    java语句;
    break;

case 值3:
    java语句;
    break;

default:
    java语句;
}

执行流程:

  • 先计算表达式的值
  • 然后和case后面的匹配,如果有就执行对应的语句,否则执行default控制的语句

注意:
– 程序遇到break语句结束了,可以不写break,如果不写,则会发生case穿透现象
– defalut语句也可以没有。
– switch后面的括号中可以填写byte、short、char、int、enum(枚举)类型,即能够自动转换为int类型的都可以,在jdk7版本之后可以填写String类型。
– case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的


for循环语句

语法

for(初始化表达式;条件表达式;循环后的操作表达式(步进语句)) {
    循环体;
}

执行流程

  1. 执行初始化语句,并且在整个循环过程里面只执行一次
  2. 执行判断条件语句,看其返回值是true还是false
  • 如果是true,就继续执行
  • 如果是false,就结束循环,整个流程结束
  1. 执行循环体语句
  2. 执行循环后的操作表达式
  3. 程序回到步骤2继续。
for循环中的变量

在for循环中定义的变量只能在循环内部访问和使用,循环外是无法访问和使用的。

小练习

1.计算1-100所有的奇数求和
2.在屏幕中打印九九乘法表
3.时钟打印,输出格式:
00时00分
00时01分

23时59分

4.打印杨辉三角

1.计算1-100所有的奇数求和

int sum = 0;

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

    if(i%2 != 0){
        //奇数
        //追加
        sum += i;
    }

}

System.out.println(sum);

2.在屏幕中打印九九乘法表

//外层for循环控制换行,变量i是行号
for (int i = 1; i <= 9; i++) {
    //System.out.println(i);

    // 输出规律:
    // 第1行,输出1个
    // 第2行,输出2个
    // 第3行,输出3个
    // ...
    // 第9行,输出9个
    // 第i行,输出i个

    for (int j = 1; j <= i; j++) {
        // 这里不要换行
        System.out.print(i + "*" + j + "=" + i * j + " ");
    }

    // 注意:上面的for循环结束之后表示一行输出结束了,换行
    System.out.println();

}

3.时钟打印

		for (int i = 0;i <= 23;i++){
			for (int j = 0;j <= 59;j++){
				
				if (i <= 9){
					if (j <= 9){
						System.out.println("0"+i+"时"+"0"+j+"分");
					}else{
						System.out.println("0"+i+"时"+j+"分");
					}
				}else{
					if (j <= 9){
						System.out.println(i+"时"+"0"+j+"分");
					}else{
						System.out.println(i+"时"+j+"分");
					}
				}
		}
		}

4.打印杨辉三角

public static int pascalTriangle(int a) {

		int rows = 10;

		for (int i = 0; i < rows; i++) {
			int number = 1;
			// 打印空格字符串 System.out.printf等价于System.out.format
			System.out.printf("%" + (rows - i) * 2 + "s", "");
			for (int j = 0; j <= i; j++) {
				System.out.printf("%4d", number);
				number = number * (i - j) / (j + 1);
			}
			System.out.println();
		}

		return 0;
	}
 
 //第二种方法
 public static int pascalTriangle(int row) {

			int prev = 1;
	        int[] arr = new int[row];
	        for( int i = 0; i < row; i++) {
	            for( int j = 0; j <= i; j++) {
	                // 将上一行当前下标元素的值保存
	                int cur = arr[j];
	                // 当前元素等于上一行当前元素和上一行当前元素前一个元素之和
	                arr[j] = prev+cur;
	                // 对于下一圈循环,prev保存了当前行上一行元素前一个元素,即prev与cur保存的值一前一后
	                prev = cur;
	                System.out.print(arr[j]+" ");
	            }
	            System.out.println();
	        }
		return 0;
	}

while循环语句

语法

    初始化语句;
    while(boolean表达式) {
         循环体语句;
         控制条件语句;
    }

执行过程:

  1. boolean表达式里面的结果是true
  2. 执行while大括号里面的语句,直到boolean表达式的结果变为false,循环结束。
  3. while循环的次数是:0-N次

while循环本质上和for循环是一样的,可以相互替换,作用相同,格式不同,实际工作中建议使用for循环,因为变量会及早的从内存中消失,可以提高内存的使用效率。


do while循环语句

语法

    初始化语句;
    do {
        循环体语句;
        控制条件语句;
    }while(boolean表达式);

执行过程:

  1. 执行do循环体中的语句
  2. 运算while中的boolean表达式,如果是true则继续执行do循环体中的语句,如果是false,则循环执行结束。

do里面的语句至少会执行一次,执行之后根据while里面的条件判断语句来判定是否继续循环执行do里面的语句。
注意: while后面的;不要忘记,否则会报错。

三种循环语句的区别:
  1. do…while循环至少执行一次循环体。
  2. 而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。

工作中常用for循环,因为变量会及早的从内存中消失,可以提高内存的使用效率。


控制语句break和continue

break

break是java语言中的关键字,中文是打断,终止的意思

  1. 可以用在switch语句中,结束分支语句,防止case穿透现象的发生.
  2. 可以出现在循环当中,作用是结束整个循环的执行,默认情况下结束离它最近的一个循环.
for(int i=0;i<10;i++){
    System.out.println(i);
    if(i==5){
        break; //只是结束离它最近的一个循环.
        //return; //返回,结束的是方法.
    }
}

System.out.println("Hello World!");

return的作用是返回,它的作用不是结束循环的,而是结束方法的,例如main方法。

默认情况下break;语句跳出的是离它最近的循环。

for( int j = 0 ; j < 2 ; j ++ ){

        System.out.println( "--> " + j );

        for( int i = 0 ; i < 10 ; i ++ ){

            if(i == 5){
                //终止的是最近的这个循环。
                break; //默认情况下break;语句跳出的是离它最近的循环。
            }

            System.out.println("i = " + i); 
        }

    }

break还可以控制结束嵌套循环

outerFor:for(int i=5;i>0;i--){

    innerFor:for(int j=0;j<i;j++){
                if(j==2){
                    break outerFor;
                }
                System.out.print(j);
            }

            System.out.println();
        }
continue

程序执行到continue语句时,直接结束本次循环,进入下一次循环。

    for(int i=0;i<10;i++){

        if(i==5){
            continue;
        }

        System.out.println(i);
    }

continue也可以像break那样加上循环的名字:

outerFor:for(int i=5;i>0;i--){

        innerFor:for(int j=0;j<i;j++){
                    if(j==2){
                        continue outerFor;
                    }
                    System.out.print(j);
        }

        System.out.println();
    }
break和continue的区别?

假设有10个人参加面试,现在进行到第三个人了,突然,面试官有事了,需要走,那么今天剩下这些人就没有办法继续面试了,显然面试整个结束了。(break)

假设有10个人参加面试,现在进行到第三个人了,面试官想要招聘一位女生做秘书,但是这第三个人是一位男士,面试官说:今天咱们就聊到这里吧,下一位。(continue)


课后作业

题目

练习题1:定义一个方法,拥有一个int变量 month,实现:判断是春夏秋冬的哪个月份。
练习题2:定义一个方法,拥有三个int变量,实现:按照从大到小的顺序输出。
练习题3:定义一个方法,拥有int变量year和month,实现:判断对应的年份是否为闰年并计算当月天数。
练习题4:计算1000以内所有不能被7整除的整数之和。
练习题5:任意定义一个正整数,计算该数的阶乘。例如赋值为5,阶乘为 54321。

参考代码:

练习题1:定义一个方法,拥有一个int变量 month,实现:判断是春夏秋冬的哪个月份。

public class HomeWork {
	
	public static void main(String[] args) {
		Month(5);
	}
	
	public static void Month(int month) {
		
		switch(month){
		case 12 :
		case 1 :
		case 2 :
			System.out.println("冬季");
			break;
		case 3 :
		case 4 :
		case 5 :
			System.out.println("春季");
			break;
		case 6 :
		case 7 :
		case 8 :
			System.out.println("夏季");
			break;
		case 9 :
		case 10 :
		case 11 :
			System.out.println("秋季");
			break;
		default:
			System.out.println("输入月份有误!");
		}
	}

练习题2:定义一个方法,拥有三个int变量,实现:按照从大到小的顺序输出。

public static void Sort(int a,int b,int c) {
		int tmp;
		if (a < b)//首先判断a与b的大小,将较大的数放在a中
		{
			tmp = a;
			a = b;
			b = tmp;
		}
		if (a < c)//再判断a与c的大小,仍然将较大的数放在a中
		{
			tmp = a;
			a = c;
			c = tmp;
		}
		if (b < c)//最后判断b和c,将b和c之间较大的数储存在b中
		{
			tmp = b;
			b = c;
			c = tmp;
		}
		System.out.println(a+","+b+","+c);
	}

另一种方法:

int max = a > b ? (a > c ? a : c) : (b > c ? b : c);
int min = a < b ? (a < c ? a : c) : (b < c ? b : c);
int mid = a + b + c - max - min;
System.out.println(max+","+mid+","+min);

练习题3:定义一个方法,拥有int变量year和month,实现:判断对应的年份是否为闰年并计算当月天数。

public static void LeapYear(int year,int month) {
		if ((year % 4 ==0 && year % 100 != 0) || year % 400 == 0 ) {
			System.out.println(year+"年是闰年");
			if (month == 2) {
				System.out.println(month+"月的天数为29天");
			}else {
				switch(month){
					case 1:
					case 3:
					case 5:
					case 7:
					case 8:
					case 10:
					case 12:
						System.out.println(month+"月的天数为31天");
						break;
					case 2:
					case 4:
					case 6:
					case 9:
					case 11:
						System.out.println(month+"月的天数为30天");
						break;
				}
			}
		}else {
			System.out.println(year+"年是平年");
			if (month == 2) {
				System.out.println(month+"月的天数为28天");
			}else {
				switch(month){
					case 1:
					case 3:
					case 5:
					case 7:
					case 8:
					case 10:
					case 12:
						System.out.println(month+"月的天数为31天");
						break;
					case 2:
					case 4:
					case 6:
					case 9:
					case 11:
						System.out.println(month+"月的天数为30天");
						break;
				}
			}
		}
	}

另一种方法:

boolean a = false;
if ((year % 4 ==0 && year % 100 != 0) || year % 400 == 0 ){
    System.out.println(year+"年是闰年");
    a = true;
}else{
    System.out.println(year+"年是平年");
}
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
    System.out.println(month+"月的天数为31天");
}else if(month == 2 && b == true){
    System.out.println(month+"月的天数为29天");
}else if(month == 2 && b == false){
    System.out.println(month+"月的天数为28天");
}else if(0 < month && month < 13){
    System.out.println(month+"月的天数为30天");
}else{
    System.out.println("月份格式有误");
}

练习题4:计算1000以内所有不能被7整除的整数之和。

public static void Sum() {
		int sum = 0;
		for (int i = 1;i <= 1000;i++) {
			if (i % 7 != 0) {
				sum += i;
			}
		}
		System.out.println("1000以内所有不能被7整除的整数之和为:"+sum);
	}

练习题5:任意定义一个正整数,计算该数的阶乘。例如赋值为5,阶乘为 54321。

public static void Factorial(int a) {
		int s=1;
		for (int i = a;i >= 1;i--) {
			s *= i;
		}
		System.out.println(a+"的阶乘结果为:"+s);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值