Java控制语句
- Java选择语句if
-
- Java switch选择语句
-
- Java 循环语句
-
- Java break语句
-
- Java continue语句
-
- Java return语句
文章图片
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);
}
【#+|Java控制语句】
文章图片
文章图片
总之,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 为计算后的结果。
文章图片
推荐阅读
- #+|Java方法
- python|微软的文本转语音服务,已经听不出是机器了
- java|2020最新Java面试题(java,JavaWeb,数据库,框架),常见面试题及答案汇总
- java|KubeCon China 2021 阿里云专场来了!这些首日亮点不容错过
- servlet|新课程教学杂志新课程教学杂志社新课程教学编辑部2022年第11期目录
- java|新闻传播杂志新闻传播杂志社新闻传播编辑部2022年第10期目录
- servlet|新体育杂志新体育杂志社新体育杂志社新体育编辑部2022年第8期目录
- java|亚太教育杂志亚太教育杂志社亚太教育编辑部2022年第8期目录
- java|戏剧之家杂志戏剧之家杂志社戏剧之家编辑部2022年第18期目录