Java控制语句
控制语句即用来实现对程序流程的选择、循环、转向和返回等进行控制。
1 选择语句
1.1 Java选择语句if
//第一种
if(布尔表达式){
Java语句;
}
//第二种
if(布尔表达式){
Java语句;
}else{
}
//第三种
if(布尔表达式){
Java语句;
}else if(布尔表达式){
Java语句;
}else if(布尔表达式){
Java语句;
}
//第四种
if(布尔表达式){
Java语句;
}else if(布尔表达式){
Java语句;
}else if(布尔表达式){
Java语句;
}else{
}
示例1:
/**
* @author wcs
* @date 2021/7/29 17:30
*/
public class IfTest01 {
public static void main(String[] args) {
boolean sex = true;
if (sex) {
System.out.println("男");
}
//当分支中只有一条java语句话,大括号也可以省略不写
if (sex)
System.out.println("男");
}
}
示例2:
/**
* @author wcs
* @date 2021/7/29 21:18
*/
public class IfTest02 {
public static void main(String[] args) {
boolean sex = true;
if(sex){
System.out.println("男");
}else{
System.out.println("女");
}
}
}
示例3:
import java.util.Scanner;
/**
* @author wcs
* @date 2021/7/29 21:19
*/
public class IfTest03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入考试成绩");
int x = sc.nextInt();
if (x < 0 || x > 100) {
System.out.println("输入不合法");
} else if (x >= 90) {
System.out.println("优秀");
} else if (x >= 80) {
System.out.println("良好");
} else if (x >= 70) {
System.out.println("中等");
} else if (x >= 60) {
System.out.println("及格");
}
}
}
示例4:
import java.util.Scanner;
/**
* @author wcs
* @date 2021/7/29 21:29
*/
public class IfTest04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入性别(1表示男,0表示女):");
int x = sc.nextInt();
if (x == 1) {
System.out.println("男");
} else if (x == 0) {
System.out.println("女");
} else {
System.out.println("出错了");
}
}
}
1.2 Java switch选择语句
switch (x) {
case x = 表达式1:
Java语句1;
break;
case x = 表达式2:
Java语句2;
break;
case x = 表达式3:
Java语句3;
break;
. . .
default:
Java语句;
}
运行原理是这样的:拿着c和表达式进行比较,如果相等,则执行Java语句1,如果不相等,继续拿着c和表达式2进行比较,如果相等,则执行语句2,如果不相等,继续……,如果c和所有的表达式都不想等,此时default分支语句执行。
注意事项:
-
switch语句后面的小括号“()”当中都可以出现什么,在JDK1.6之前(包括1.6在内)switch只能探测int类型的数据,但是在JDK1.7之后(包括1.7在内),switch语句除了支持int类型之外,还支持String类型。也就是说从Java7开始switch后面小括号中可以出现字符串。
-
switch虽然只能探测int类型,但是也可以将byte,short,char类型放到小括号当中,因为这些类型会自动转换成int类型(小容量向大容量转换称为自动类型转换)。
-
switch语句当中case是可以进行合并的,例如以下代码:
/** * @author wcs * @date 2021/7/29 17:31 */ public class SwitchTest01 { public static void main(String[] args) { switch (90){ case 80: case 90: case 100: System.out.println("优秀"); break; case 70: case 60: System.out.println("还行"); break; default: System.out.println("继续努力"); } } }
-
switch语句当中当某个分支匹配成功,则开始执行此分支当中的Java语句,当遇到当前分支中的“break;”语句,switch语句就结束了,但是如果当前分支中没有“break;”语句,则会发生case穿透现象,也就是说下一个分支也不再进行匹配,直接进入下一个分支执行,直到遇到“break;”为止。例如以下代码:
/** * @author wcs * @date 2021/7/30 9:16 */ public class SwitchTest02 { public static void main(String[] args) { char c = 'A'; switch (c) { case 'A': System.out.println(1); case 'B': System.out.println(2); break; default: System.out.println(3); } } }
运行结果:
1.2.1 判断今天是周几?
import java.util.Calendar;
/**
* @author wcs
* @date 2021/7/30 10:42
*/
public class SwitchTest03 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
int wk = c.get(Calendar.DAY_OF_WEEK);
switch (wk) {
case 0:
System.out.println("周六");
break;
case 1:
System.out.println("周日");
break;
case 2:
System.out.println("周一");
break;
case 3:
System.out.println("周二");
break;
case 4:
System.out.println("周三");
break;
case 5:
System.out.println("周四");
break;
case 6:
System.out.println("周五");
break;
}
}
}
2 循环语句
Java循环语句共包括三个,分别是:for循环、while循环、do…while循环。
2.1 for循环
for循环的语法格式
for(初始表达式;布尔表达式;更新表达式){
循环体;
}
/*
初始化表达式最先执行,并且在整个循环当中初始化表达式只执行一次,布尔表达式结果是true或者false,true表示循环可以继续执行,false表示循环结束,循环体当中的代码就是需要反复执行的代码,更新表达式一般是用来更新某个变量的值,更新操作之后可能布尔表达式的结果就不再是true了。
*/
对于for循环来说,初始表达式、布尔表达式、更新表达式都不是必须的,当布尔表达式确实的时候,没有条件控制的前提下,会形成死循环。
for(;;){
//死循环
}
在for循环当中初始化变量的作用域只在for循环中有效,当循环结束之后,初始化变量的内存就释放了,所以在for循环之外是无法访问该变量的。
for (int i = 1; i <10 ; i++) {
System.out.println(i);
}
//error:i变量不存在
System.out.println(i);
}
修改代码:
/**
* @author wcs
* @date 2021/7/30 10:56
*/
public class ForTest01 {
public static void main(String[] args) {
//把变量的声明位置放到了for循环外
int i = 1;
for (; i < 10; i++) {
System.out.println(i);
}
//此时可以访问
System.out.println(i);
}
}
示例:用for循环实现1~100所有数字的求和
/**
* @author wcs
* @date 2021/7/30 11:14
*/
public class ForTest02 {
public static void main(String[] args) {
//声明变量sum,总和
int sum = 0;
for (int i = 1; i <= 100; i++) {
//每次循环累加(sum=sum+i)
sum += i;
}
System.out.println(sum);
}
}
示例:
/**
* @author wcs
* @date 2021/7/30 11:20
*/
public class ForTest03 {
public static void main(String[] args) {
//输出10以内所有的奇数
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
System.out.println(i);
}
}
//也可以这样写
for (int i = 1; i <= 10; i += 2) {
System.out.println(i);
}
}
}
2.1.1 嵌套循环
/**
* @author wcs
* @date 2021/7/30 11:27
*/
public class ForTest04 {
public static void main(String[] args) {
for (int i = 1; i < 2; i++) {
for (int j = 0; j < 5; j++) {
System.out.println("我是嵌套循环");
}
}
}
}
运行结果:
![image-20210730113000735](https://i-blog.csdnimg.cn/blog_migrate/568073cbadf785cb6f4f9b6619c4c2d7.png)
示例:九九乘法表
/**
* @author wcs
* @date 2021/7/30 11:27
*/
public class ForTest04 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "x" + i + "=" + i * j + " ");
}
System.out.println();
}
}
}
运行结果:
![image-20210730113557293](https://i-blog.csdnimg.cn/blog_migrate/2991b3db6aee579102c9094bcbd1e389.png)
2.1.2 for in
/**
* @author wcs
* @date 2021/7/30 15:59
*/
public class ForInTest01 {
public static void main(String[] args) {
//for in 循环集合、数组
int[] nums = {10, 20, 30};
for (int num : nums) {
System.out.println(num);
}
for (String s : new String[]{"java", "php", "css"}) {
System.out.println(s);
}
for (char c : "javascript".toCharArray()) {
System.out.println(c);
}
}
}
示例:
import java.util.Random;
/**
* @author wcs
* @date 2021/7/30 16:08
*/
public class ForInTest02 {
public static void main(String[] args) {
//用","分割,再读取出来
String str = "张三,李四,王二,麻子";
for (String s : str.split(",")) {
System.out.println(s);
}
System.out.println("--------------");
//放进集合中随机抽取
String[] sss = str.split(",");
Random rand = new Random();
System.out.println(sss[rand.nextInt(sss.length)]);
}
}
2.2 while循环
2.2.1 while循环语法结构
while(布尔表达式){
循环体;
}
先判断布尔表达式的结果,如果是true,则执行循环体,循环体结束之后,再次判断布尔表达式的结果,如果是true,再执行循环体。直到布尔表达式的结果为false,while循环结束。如果第一次判断布尔表达式结果就是false,那循环体执行次数为0。
循环体执行次数可以为0次,也可以是N次,也就是死循环。
while(true){
//死循环
}
2.2.2 用while输出1~10
/**
* @author wcs
* @date 2021/7/30 16:25
*/
public class WhileTest01 {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
i++;
System.out.println(i);
}
}
}
2.2.3 猜数字游戏
import java.util.Random;
import java.util.Scanner;
/**
* @author wcs
* @date 2021/7/30 16:41
*/
public class WhileTest02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random rand = new Random();
int num = rand.nextInt(10);
while (true) {
System.out.println("请输入数字(1~10):");
int x = sc.nextInt();
if (x > num) {
System.out.println("猜大了");
} else if (x < num) {
System.out.println("猜小了");
} else if (x == num) {
System.out.println("猜对了");
break;
}
}
}
}
2.2.4 猜数字(进阶)
import java.util.Random;
import java.util.Scanner;
/**
* @author wcs
* @date 2021/7/30 16:52
*/
public class WhileTest03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random rand = new Random();
System.out.println("1、初级 2、中级 3、高级 0、退出游戏");
System.out.println("请选择难易程度:");
int x = sc.nextInt();
switch (x) {
case 1:
System.out.println("您选择的是初级");
System.out.println("请输入数字(1~10),共有3次机会:");
int count1 = 3;
int num1 = rand.nextInt(10);
while (true) {
--count1;
int n = sc.nextInt();
if (n > num1) {
System.out.println("猜大了," + "还有" + count1 + "次机会!");
} else if (n < num1) {
System.out.println("猜小了," + "还有" + count1 + "次机会!");
} else if (n == num1) {
System.out.println("猜对了");
break;
}
if (count1 == 0) {
System.out.println("GAME OVER");
break;
}
}
break;
case 2:
System.out.println("您选择的是中级");
System.out.println("请输入数字(1~100),共有7次机会:");
int count2 = 7;
int num2 = rand.nextInt(100);
while (true) {
--count2;
int n = sc.nextInt();
if (n > num2) {
System.out.println("猜大了," + "还有" + count2 + "次机会!");
} else if (n < num2) {
System.out.println("猜小了," + "还有" + count2 + "次机会!");
} else if (n == num2) {
System.out.println("猜对了");
break;
}
if (count2 == 0) {
System.out.println("GAME OVER");
break;
}
}
break;
case 3:
System.out.println("您选择的是高级");
System.out.println("请输入数字(1~500),共有10次机会:");
int count3 = 10;
int num3 = rand.nextInt(500);
while (true) {
--count3;
int n = sc.nextInt();
if (n > num3) {
System.out.println("猜大了," + "还有" + count3 + "次机会!");
} else if (n < num3) {
System.out.println("猜小了," + "还有" + count3 + "次机会!");
} else if (n == num3) {
System.out.println("猜对了");
break;
}
if (count3 == 0) {
System.out.println("GAME OVER");
break;
}
}
break;
case 0:
System.out.println("游戏已退出");
break;
default:
System.out.println("输入不合法");
}
}
}
2.3 do…while循环
do…while循环语法结构:
do{
//循环体
}while(布尔表达式); //
执行顺序:先执行循环体,再判断布尔表达式,如果为true,再执行循环体…直到布尔表达式为false,循环结束。
图解:
![image-20210730191600373](https://i-blog.csdnimg.cn/blog_migrate/88d250bfb3c4e362f8cdd464d490e1db.png)
示例:do…while输出1~5
/**
* @author wcs
* @date 2021/7/30 19:18
*/
public class DoWhileTest01 {
public static void main(String[] args) {
int i=0;
do{
i++;
System.out.println(i);
}while (i<5);
}
}
3 转向语句
3.1 break语句
break;语句,一个单词成一条Java语句,continue也是一样
break语句只能用在两个地方:
第一个位置:switch语句当中,防止case穿透现象,用来终止switch。
第二个位置:用在循环语句当中,用来终止循环执行。
for while do…while
/**
* @author wcs
* @date 2021/7/30 19:49
*/
public class BreakTest01 {
public static void main(String[] args) {
/*
如果循环体中没有if语句,输出0-9;
加了if判断,则会在i=5的时候终止循环
*/
for (int i = 0; i < 10; i++) {
if (i == 5) {
//break;语句会让离他最近的循环终止结束掉。
break;//不会终止if,因为if是选择语句。
}
System.out.println(i);
}
}
}
运行结果:
![image-20210730195314142](https://i-blog.csdnimg.cn/blog_migrate/516dfb0a766482e4f40e7f166f8bc4b6.png)
break;语句只会终止离他最近的循环:
for (int j = 0; j < 2; j++) {//外循环不受影响
for (int i = 0; i < 10; i++) {//内循环 终止
if (i == 5) {
break;
}
System.out.println(i+" ");
}
}
运行结果:
![image-20210730195846979](https://i-blog.csdnimg.cn/blog_migrate/6f23e57cebc2af9148676f96fa4db6c2.png)
break;语句也可以指定终止循环:
a: for (int j = 0; j < 2; j++) {
b: for (int i = 0; i < 10; i++) {
if (i == 5) {
break a; //指定外层循环终止
}
System.out.print(i+" ");
}
}
3.2 continue语句
continue;语句:终止当前”本次“循环,直接进入下一次循环继续执行。
/**
* @author wcs
* @date 2021/7/30 20:13
*/
public class ContinueTest01 {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue;//跳过本次循环,进入下一次循环。
}
System.out.print(i + " ");
}
}
}