java学习笔记(六)

目录

1.switch分支:

那么我们在写switch的时候需要注意的有:

2.for循环

for嵌套

3.while循环

4.do--while循环:

5.特殊流程控制语句

1.break

2.continue

3.return

4.lable


接着上一章,今天来学习:

1.switch分支:

首先来看语法结构:

switch(表达式) {
    case 值1:
			代码块1;
	 break;
	 case 值2:
			代码块2;
	 break;
	 case 值n:
			代码块n;
	 break;
	 default:	
			default代码块;
	 break;
}

其中,表达式的结果可以是byte、short、char、int、字符串、枚举,其中枚举是jdk1.5之后才有的,而字符串是jdk1.8之后才有的。

我们将表达式的结果与case后面的值比较,那个相等就执行那个代码块

break代表跳出整个switch分支

default表示表达式的结果的是case后面的值比对都不相同的时候,就会执行default里面的代码块,default代码块可根据需求可写可不写。

我们来看一个案例:

int t = 20;
switch(t){
    case 10:
        System.out.println("10");
        break;
    case 20:
        System.out.println("20");
        break;
    case 100:
        System.out.println("100");
        break;
    default:
        System.out.println("default代码块");
        break;
}
		
System.out.println("switch以外的代码");

此时输出为:

20

switch以外的代码

我们看一下程序运行时步骤,首先判断t是多少,程序运行到case 10:的时候,但是t并不等于10,所以往下走,这时t = 20,所以进入case里面的代码块,输出20后,跳出整个switch循环,接着输出switch外的代码。

分析完步骤后,来看一下底层,在程序运行的时候,底层都是将byte、short、char、字符串(JDK1.7)、枚举(JDK1.5)转换为int类型,再做比较。

那么我们在写switch的时候需要注意的有:

  • case的值不可以相同,如果相同,会语法报错
  • default可以省略,可以类比if--else中的else
  • break也可以省略,省略后,则不会跳出switch,而是顺序执行下面的代码
  • default的位置可以不在最后,但是可读性不好,影响美观
  • case后面的值的类型可以不一样,但是必须要兼容,比如int型和字符型,因为两者可以通过ascll码表来转换。

我们来做一个题目,我们在控制台输入年和月,我们需要输出这一个月的天数:

import java.util.Scanner;

public class test{

    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
		System.out.println("请输入年:");
		int year = scan.nextInt();
		System.out.println("请输入月:");
		int month = scan.nextInt();
		
		//2.判断
		int day = 0;//当月的天数
		switch(month){
		case 1:case 3:case 5:case 7:case 8:case 10:case 12:
			day = 31;
			break;
		case 4:case 6:case 9:case 11:
			day = 30;
			break;
		case 2:
			if(year%4==0 && year%100!=0 || year%400==0){//闰年
				day = 29;
			}else{//平年
				day = 28;
			}
			break;
		}
				
		//3.输出
		System.out.println(year + "年" + month + "月当月的天数为:" + day + "天");
    }
}

合理利用switch的规则,可以很好解决这种问题。

2.for循环

语法结构:

for(表达式1;表达式2;表达式3){
	...代码块/循环体...
}

其中,表达式1是初始化变量,表达式2是判断条件,表达式3是更新变量,程序执行时,首先会初始化变量,接下来判断条件,如果是true,那就执行里面的代码块,再更新变量,接下来重复原来的步骤,直到条件为false,就跳出循环。

我们来做一些题:

1.输出10遍Hello World!

for(int i = 0;i<10;i++){
	System.out.println("Hello World!");
}

2.输出0到10

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

3.输出1到10

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

4.输出1到10的奇数

for(int i = 1;i<=10;i+=2){
	System.out.println(i);
}

从以上题目可以看出来,初始化变量不一定是从0开始,而且其中更新变量也可以自己定义

我们在写for循环的时候也要注意可能会写成死循环,比如

for(;;){
	System.out.println("死循环");
}

for(int i = 1;i>0;i++){
	System.out.println("伪死循环");
}

伪死循环的意思就是在这里面,int型是有范围的,如果一直加到超出int型的范围,自然循环也就停了,不算真的死循环。

for嵌套

我们在遇到许多问题的时候,我们可能需要不止一个for来解决问题,比如

1.打印图形:

*****

*****

*****

public class test{
    
    public static void main(String[] args){
        for(int i = 0;i<3;i++){//控制行数
	        for(int j = 0;j<4;j++){//控制列数
		        System.out.print("*");
	        }
	    System.out.println();//换行
        }
    }

}

2.打印图形:

*

**

***

****

public class test{
    
    public static void main(String[] args){
        for(int i = 0;i<5;i++){
			for(int j = 0;j<=i;j++){
				System.out.print("*");
			}
			System.out.println();//换行
		}
    }

}

3.打印图形

   *

  ***

 *****

*******

public class test{
    
    public static void main(String[] args){
        for(int i = 0;i<4;i++){
			for(int k = 0;k<3-i;k++){
				System.out.print(" ");
			}
			for(int j = 0;j<i*2+1;j++){
				System.out.print("*");
			}
			System.out.println();
		}
    }

}

4.打印图形

   *

  * *

 *    *

*******

public class test{
    
    public static void main(String[] args){
        for(int i = 0;i<4;i++){
			for(int k = 0;k<3-i;k++){
				System.out.print(" ");
			}
			for(int j = 0;j<i*2+1;j++){
			//第一行 || 最后一行 || 第一列 || 最后一列
				if(i==0 || i==3 || j==0 || j==i*2){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
						
			}
			System.out.println();
		}
    }

}

3.while循环

语法结构:

while(表达式){
	...代码块/循环体...
}

其中表达式的结果必须是boolean类型,如果 true - 循环,如果 false- 跳出循环

我们可以仿造for循环输出10遍Hello World!

int i = 0;
while(i<5){
	System.out.println("Hello World!");
	i++;
}

4.do--while循环:

语法结构:

do{
    ...代码块/循环体...
}while(表达式);

程序执行时的步骤:一开始先执行一遍代码块,再去判断表达式

表达式的结果必须是boolean类型,如果true - 循环,如果false- 跳出循环

5.特殊流程控制语句

1.break

作用:作用在循环中,表示跳出整个循环语句

比如:循环录入学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示

import java.util.Scanner;

public class test{
    
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
		
		double sum = 0;
					
		boolean flag = true;//true-正常录入 false-非正常录入
		for(int i = 1;i<=5;i++){
			System.out.println("请输入第" + i + "门成绩:");
			double score = scan.nextDouble();
			if(score < 0){//分数录入为负
				flag = false;
				break;
			}
			sum += score;
		}
					
		if(flag){
			double avg = sum/5;
			System.out.println("平均分为:" + avg);
		}else{
			System.out.println("分数录入为负,停止录入");
		}
    }

}

2.continue

作用:作用在循环中,表示跳过剩余循环体

比如:循环录入5名学生的成绩,统计分数大于等于80分的学生比例

import java.util.Scanner;

public class test{
    
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
		
		int num = 0;//记录分数大于等于80分的学生人数
		for(int i = 1;i<=5;i++){
			System.out.println("请输入第" + i + "名学生的成绩:");
			double score = scan.nextDouble();
			if(score < 80){
				continue;
			}
			num++;
		}
		System.out.println("大于等于80分学生的比例为:" + (num/5.0*100) + "%");
    }

}

3.return

作用:表示结束当前方法

比如:

System.out.println("111");
System.out.println("222");
if(true){
	return;
}
System.out.println("333");
System.out.println("444");

4.lable

作用:给循环做标记

语法:

a:for(int i = 1;i<=5;i++){
	for(int j = 1;j<=3;j++){
		System.out.println(i + " -- " + j);
		if(i == 3){
			break a;
		}
	}
}

这样就是当外层循环到第3次时,在内层循环中结束掉外层循环。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyyiwy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值