Java控制语句

在这里插入图片描述

Java选择语句if

选择语句又称为分支语句,它通过对给定的条件进行判断,从而决定执行两个或多个分支中的哪一支。因此,在编写选择语句之前,应该首先明确判断条件是什么,并确定当判断结果为“真”或“假”时应分别执行什么样的操作/算法。在Java语言中选择语句主要提供了两个,一个是if语句,另一个则是switch语句。
在这里插入图片描述
上图中第一种写法对应的原理图:在这里插入图片描述
上图中第二种写法对应的原理图:
在这里插入图片描述
上图中第三种写法对应的原理图:
在这里插入图片描述
上图中第四种写法对应的原理图:
在这里插入图片描述
if语句的任何一种形式在执行的时候只要有一个分支执行,则所对应的整个if语句就全部结束了,换句话说,对于一个独立的完整的if语句来说,最多只能有一个分支执行。
当分支中只有一条java语句话,大括号可以省略不写。

boolean sex = true;
if(sex){
	System.out.println("男");
}else{
	System.out.println("女");
}
//也可以这样写
if(sex)
	System.out.println("男");
else
	System.out.println("女");

示例:键盘接收一个学生的成绩,范围在[0-100],根据成绩判断等级,[90-100]等级为“优秀”,[80-90)等级为“良好”,[70-80)等级为“中等”,[60-70)等级为“及格”,[0-60)等级为“大笨蛋”,输入其它数字表示成绩不合法。

//方案一
java.util.Scanner scan = new java.util.Scanner(System.in);
System.out.print("输入考试成绩:");
int score = scan.nextInt();
if(score < 0 || score > 100){
	System.out.println("对不起,您输入的成绩不合法!");
}else if(score >= 90 && score <= 100){
	System.out.println("成绩等级:优秀");
}else if(score < 90 && score >= 80){
	System.out.println("成绩等级:良好");
}else if(score < 80 && score >= 70){
	System.out.println("成绩等级:中等");
}else if(score < 70 && score >= 60){
	System.out.println("成绩等级:及格");
}else if(score < 60 && score >= 0){
	System.out.println("成绩等级:大笨蛋");
}
//方案二
java.util.Scanner scan = new java.util.Scanner(System.in);
System.out.print("输入考试成绩:");
int score = scan.nextInt();
String grade = "大笨蛋";
if(score < 0 || score > 100){
	grade = "对不起,您输入的成绩不合法!";
}else if(score >= 90){
	grade = "优秀";
}else if(score >= 80){
	grade = "良好";
}else if(score >= 70){
	grade = "中等";
}else if(score >= 60){
	grade = "及格";
}
System.out.println("成绩等级:" + grade);

Java switch选择语句

在这里插入图片描述
在这里插入图片描述
switch运行原理文字性描述是这样的(以上图为例):拿着c和表达式1进行比较,如果相等,则执行语句1,如果不相等,继续拿着c和表达式2进行比较,如果相等,则执行语句2,如果不相等,继续…,如果c和所有的分支表达式都不相等,此时default分支“语句n+1”则执行。
使用switch语句的一些注意事项
(1)switch语句后面的小括号“()”当中都可以出现什么,在JDK1.6之前(包括1.6在内)switch只能探测int类型的数据,但是在JDK1.7之后(包括1.7在内),switch语句除了支持int类型之外,还支持String类型。也就是说从Java7开始switch后面小括号中可以出现字符串。
(2) switch虽然只能探测int类型,但是也可以将byte,short,char类型放到小括号当中,因为这些类型会自动转换成int类型(小容量向大容量转换称为自动类型转换)。
(3) switch语句当中case是可以进行合并的。
(4) switch语句当中当某个分支匹配成功,则开始执行此分支当中的java语句,当遇到当前分支中的“break;”语句,switch语句就结束了,但是如果当前分支中没有“break;”语句,则会发生case穿透现象,也就是说下一个分支也不再进行匹配,直接进入下一个分支执行,直到遇到“break;”为止。

示例:键盘接收一个学生的成绩(假设成绩是合法的),范围在[0-100],根据成绩判断等级,[90-100]等级为“优秀”,[80-90)等级为“良好”,[70-80)等级为“中等”,[60-70)等级为“及格”,[0-60)等级为“大笨蛋”。只允许使用switch,不允许使用if语句。

java.util.Scanner scan = new java.util.Scanner(System.in);
System.out.print("请输入考试成绩[0-100]:");
double score = scan.nextDouble();
String grade = "大笨蛋";
switch((int)(score / 10)){
case 10: case 9:
	grade = "优秀";
	break;
case 8:
	grade = "良好";
	break;
case 7:
	grade = "中等";
	break;
case 6:
	grade = "及格";
	break;
}
System.out.println("成绩等级为:" + grade);

Java 循环语句

for循环语句
for循环的语法格式:
在这里插入图片描述
for循环的执行顺序以及原理如下:
在这里插入图片描述
对于for循环来说,初始化表达式、布尔表达式、更新表达式都不是必须的,当布尔表达式缺失的时候,没有条件控制的前提下,会形成死循环。
关于for循环的使用我们还需要注意初始化变量的作用域,在for循环当中声明的变量只在for循环中有效,当for循环结束之后,初始化变量的内存就释放了/消失了,所以在for循环之外是无法访问该变量的,例如以下代码在编译的时候就会报错了:

//在for循环内部声明的变量i只在for循环中可见/有效
for(int i = 1; i <= 10; i++){
	System.out.println("i = " + i);
}
//这行编译报错,i变量不存在
System.out.println("i = " + i);

修改后:

public static void test(){
	//变量的声明位置放到了for循环之外
	int i = 1;
	for(; i <= 10; i++){
		System.out.println("i = " + i);
	}
	//这里就可以访问变量i了
	System.out.println("i = " + i);
}

因为i变量的作用域已经被扩大了,不再只是for循环中可以使用,for循环之外也可以使用,换句话说,以上的for循环结束之后i变量的内存并不会被释放。后续的程序可以继续使用。i变量的作用域是在整个test()方法中都有效,直到test()方法执行结束的时候才会释放i变量的内存空间。
示例1:求和就是将1~100的每一个整数累加

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

示例2:实现1~100所有奇数的和

//第一种
int sum = 0;
for(int i = 1; i <= 100; i++){
	if(i % 2 != 0){
		sum += i;
	}
}
System.out.println("sum = " + sum);
//第二种
int sum = 0;
for(int i = 1; i < 100; i += 2){
	sum += i;
}
System.out.println("sum = " + sum)

循环当中可以嵌套循环吗?
当然可以,之前我们就说过所有控制语句都是可以嵌套使用的,当循环A中嵌套循环B的时候就等于在A循环体中的代码是B循环。其实大家在学习循环嵌套的时候完全没必要特殊化对待,完全可以把A循环体当中的B循环看做是一段普通的java代码。

//循环5次(B循环)
for(int i = 1;i <= 5; i++){
	System.out.print("i = " + i + ",");
}

System.out.println();

//循环2次(A循环)
for(int j = 1;j <= 2; j++){
	System.out.print("j = " + j + ",");
}

System.out.println();

//将B循环放到A循环体当中
for(int j = 1;j <= 2; j++){ //A循环(2次)
	
	for(int i = 1;i <= 5; i++){ //B循环(5次)
		
		System.out.print("i = " + i + ",");
		
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例3:打印九九乘法表

for (int i = 1; i <= 9; i++) {
	for (int j = 1; j <= i; j++) {
		System.out.print(i + "*" + j + "=" + i * j + " ");
	}
	System.out.println();
}

在这里插入图片描述
Java while语句
在这里插入图片描述在这里插入图片描述
while循环的执行原理可以得出while循环的循环体执行次数可能是0次,也可能是N次。
示例:计算1~100所有偶数的和

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

sum = 0;
int j = 0;
while(j <= 100){
	sum += j;
	j += 2;
}
System.out.println("sum = " + sum);

在这里插入图片描述
Java do while语句
在这里插入图片描述
在这里插入图片描述
示例:使用的一个系统的时候需要登录,假设用户名或者密码记不清楚了,你是不是需要不断的“反复的”输入用户名和密码。

java.util.Scanner scanner = new java.util.Scanner(System.in);
String username;
String password;
do{
	System.out.print("用户名:");
	username = scanner.next();
	System.out.print("密码:");
	password = scanner.next();
}while(!username.equals("admin") || !password.equals("123"));
System.out.println("登录成功,欢迎" + username + "回来!");

在这里插入图片描述
解释以上程序:先提示用户输入用户名和密码,然后判断用户名和密码,当用户名不是admin或者密码不是123的时候继续提示用户输入用户名和密码,直到用户输入的用户名是admin并且密码是123的时候循环结束,循环结束之后输出登录成功的信息,只要循环没有结束就表示用户名和密码还是不对,当然,在现实的系统当中我们不可能允许用户无限制的输入用户名和密码,通常会给几次输入机会,当机会用完之后还是没有登录成功,通常该账户就被锁定了。
总之while和do…while循环的区别就在于do…while会先执行一次循环体,然后再判断条件,这样do…while的循环体至少执行一次。而while循环则是先判断条件是否合法,如果不合法,则循环体就没有任何执行的机会。while循环体执行次数是0N次,但是do…while循环体执行次数则是1N次。

Java break语句

使用break这一个单词就可以在java语言中自成一条java语句,break语句的编写很简单,例如“break;”,那么它可以用在哪里呢?首先它可以使用在switch语句当中,用来终止switch语句的执行。
break语句重点是使用在循环语句当中,用来终止/跳出循环

for(int j = 1; j <= 2; j++){
	for(int i = 1; i <= 10 ; i++){
		if(i == 5){
			break;
		}
		System.out.println("i = " + i);
	}
}

在这里插入图片描述

first:for(int j = 1; j <= 2; j++){
	for(int i = 1; i <= 10 ; i++){
		if(i == 5){
			break first;
		}
		System.out.println("i = " + i);
	}
}

在这里插入图片描述
当多层循环嵌套的时候,可以给每个循环设置标识,例如:first:for…、second:for…,当某个条件成立时,想终止指定循环的话,可以这样做:break first;或者break second;,这样指定的循环就结束了

Java continue语句

continue语句也是单个单词自成一条java语句,例如“continue;”,它和break语句都是用来控制循环的,break语句是用来终止循环的执行,而continue语句则是用来终止当前本次循环,直接进入下一次循环继续执行。

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

System.out.println("----------------------");

for(int i = 1; i <= 10; i++){
	if(i == 5){
		continue;
	}
	System.out.println("continue : i = " + i);
}

在这里插入图片描述
在这里插入图片描述
总之,break用来终止循环,continue用来中断当前本次循环,直接进入下一次循环继续执行。

Java return语句

return关键字并不是专门用于结束循环的,return语句用于终止函数的执行或退出类的方法,并把控制权返回该方法的调用者。如果这个方法带有返回类型,return语句就必须返回这个类型的值;如果这个方法没有返回值,可以使用没有表达式的 return语句。
return语句的一般语法格式如下:return 与方法相同类型的变量;
示例:当用户输入两个 double 类型的数值后需要计算这两个数值之和,而这两个操作数是可以变动的,但是求和的功能是不变的,这时就需要定义一个方法,只要在需要求和时调用该方法即可,该方法将计算之后的结果返回。

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入操作数1:");
        double num1 = input.nextDouble(); // 获取用户输入的操作数1
        System.out.println("请输入操作数2:");
        double num2 = input.nextDouble(); // 获取用户输入的操作数2
        double d = sum(num1, num2);
        System.out.println(num1 + "+" + num2 + "=" + d);
    }
    /**
     * 创建sum() 方法,返回double 类型的数值
     *
     * @param i 操作数1
     * @param j 操作数2
     * @return 两个操作数之和
     */
    public static double sum(double i, double j) {
        double sum = i + j;
        return sum;
    }
}

当用户输入两个 double 类型的数值后,程序调用 sum() 方法。该方法有两个参数,分别表示用户输入的操作数 1 和操作数 2。在调用该方法时,只需要将用户输入的两个数值传递过去即可,然后程序会执行 sum() 方法,对这两个数求和,并使用 return 语句将计算得出的结果返回。
在 main() 方法中,同样需要使用 double 类型的变量来接收 sum() 方法返回的值,即变量 d 为计算后的结果。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

            

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

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

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

打赏作者

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

抵扣说明:

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

余额充值