第3节 流程控制
一、接收用户输入
使用Scanner
类来接收用户的输入。
新建一个Scanner
对象:Scanner input = new Scanner(System.in);
input
可以接收各种数据类型的输入:比如nextInt
、nextByte
等,但是这样不太安全,因为如果输入了别的类型的数据,代码就会直接报错;
所以比较常用的是next()
和nextLine()
,它们都返回的是String
类型;
-
其中
next
会从第一个不为空格的字符开始接收,然后遇到空格或换行符结束接收; -
nextLine
会接收一整行内容,直到遇到换行符结束接收; -
注意不要同时使用
next
和nextLine
,会得不到想要的结果。
import java.util.Scanner;public class input {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入next接收的内容:");String str1 = input.next();System.out.println(str1);}
}
结果如下:
请输入next接收的内容:24dg 78tyu
24dg
import java.util.Scanner;public class input {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入nextLine接收的内容:");String str2 = input.nextLine();System.out.println(str2);}
}
结果如下:
请输入nextLine接收的内容:ud78 56dgy__@#$ !~ud78 56dgy__@#$ !~
二、执行结构
1996 年, 计算机科学家 Bohm 和 Jacopini 证明了: 任何简单或复杂的算法都可以由顺序结构、 分支结构和循环结构这三种基本结构组合而成。它们的共同点是都包含一个入口和一个出口, 它们的每个代码都有机会被执行, 不会出现死循环。
-
顺序结构 :一种基本的控制结构,按照语句出现的顺序执行操作;
-
分支结构 :又称为选择结构,根据条件成立与否来执行操作;
-
循环结构 :一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。
三、分支结构
3.1 if条件语句
if 条件结构是根据条件判断之后再做处理
-
if(条件语句){…}
-
if (条件语句){…}else{…}
-
if (条件语句){…}else if(条件语句){…}
-
if (条件语句){…}else if(条件语句){…}else{…}
例子: 用户输入学生成绩, 判断成绩是否及格, 判断条件为 优良: > 90、 良好: 81-90、 中: 60-80、 不及格: <60
import java.util.Scanner;public class ifelse {public static void main(String[] args) {System.out.println("请输入考试成绩:");Scanner input = new Scanner(System.in);int s = input.nextInt();if(s >= 120 || s < 0) {System.out.println("输入成绩有误!");}else if(s >= 90) {System.out.println("成绩优秀!");}else if(s >= 80) {System.out.println("成绩良好!");}else if(s >= 70) {System.out.println("成绩合格!");}else {System.out.println("成绩不合格!");}}
}
3.2 switch语句
switch(表达式){ case 取值 1: 语句块 1;break; case 取值 n: 语句块 n;break; default: 语句块 n+1;break; }
switch 语句有关规则
-
表达式的返回值必须是下述几种类型之一: int, byte, char, short,String;
-
case 子句中的取值必须是常量, 且所有 case 子句中的取值应是不同的;
-
default 子句是可选的;
-
break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块; 如果 case 后面没有写 break 则直接往下面执行!
-
case 后面的执行体可写{ }也可以不写{ }
例题: 多分支月份输出天数(充分利用语句特性)
import java.util.Scanner;public class switchcase {public static void main(String[] args) {System.out.println("请输入一个月份(1-12):");Scanner input = new Scanner(System.in);String text = input.next();switch (text) {case "1":case "2":case "3":System.out.println("春季");break;case "4":case "5":case "6":System.out.println("夏季");break;case "7":case "8":case "9":System.out.println("秋季");break;case "10":case "11":case "12":System.out.println("冬季");break;default:System.out.println("输入月份有误!");break;}}
}
四、循环结构
**循环语句功能 **
在循环条件满足的情况下, 反复执行特定代码
**循环语句分类 **
-
for 循环
-
while 循环
-
do/while 循环
4.1 while循环语句
符合条件, 循环继续执行; 否则, 循环退出
特点: 先判断, 再执行
语法:
while(条件表达式){ //语句块; }
使用 while 循环的步骤
1、 分析循环条件和循环操作
2、 套用 while 语法写出代码
3、 检查循环是否能够退出
实现示例:
录入班级人数和学员成绩, 计算班级学员的平均成绩
import java.util.Scanner;public class whiledemo {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入班级总人数");//使用变量studentNum记录班级总人数int studentNum = input.nextInt();//用于记录循环的次数,以及控制循环何时结束int i = 0;//定义变量sum,用于统计总分数int sum = 0;while(i < studentNum) {i++;System.out.println("请输入第"+i+"个学生的成绩:");int s = input.nextInt();sum += s;}System.out.println("学生的平均成绩为:"+sum/studentNum);}
}
4.2 do-while循环语句
先执行一遍循环操作, 符合条件, 循环继续执行; 否则, 循环退出
特点: 先执行, 再判断
语法:
do { //循环操作 }while ( 条件表达式 );
**while 循环和 do-while 循环的区别? **
-
while:先判断条件, 如果条件满足, 再执行循环操作
-
do while:先执行一遍循环操作, 然后再判读条件, 如果条件满足, 继续执行循环操作。
4.3 for循环语句
语法:
for(初始化参数; 判断条件; 更新循环变量){ //循环体; }
4.4 break与continue
break是用于终止本轮所有次循环,即不执行本次循环中break后面的语句,直接退出循环;
continue是用于终止本轮本次循环,即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
4.5 如何退出多重循环
在要退出到的地方起个别名,然后break XXX;
public class exit_many_xunhuan {public static void main(String[] args) {haha:for(int i=0;i<10;i++) {for(int j=0;j<10;j++) {System.out.println("i="+i+" , j="+j);if (i==5 && j==5) {break haha;}}}}
}
补充:如何判断用户输入类型
import java.util.Scanner;public class panduan_input_leixing {public static void main(String[] args) {System.out.println("请输入一个数字:");Scanner input = new Scanner(System.in);//在接收输入之前判断输入的类型是否为intif(input.hasNextInt()) {int num = input.nextInt();System.out.println("你输入的是:"+num);}else {System.out.println("你输入的类型不是int");}}
}