Java流程控制
用户交互Scanner
Scanner类
-
Scanner对象可以用来实现与用户的交互
-
在java.util类中,Java5的新特性
-
用来获取用户输入
next()方法与nextLine()方法区别
-
这两个方法都是Scannner类的方法
-
我们从两个小例子上来辨析这两者的区别
小例子(一)
public static void main(String[] args) {
//创建一个扫描器对象,用于将接受键盘输入
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方法接收用户输入:");
if (scanner.hasNext())
{
//使用Next方式接收
//next方法会等待用户输入
String str = scanner.next();
System.out.println("这里输出刚才输入的字符串:"+str);
}
//属于IO流的对象使用之后需要关闭
scanner.close();
}
输出结果
这里我的输入为hello world,但是输出的值是hello,并不是我们预期的hello world
小例子(二)
public static void main(String[] args) {
//创建一个扫描器对象,用于将接受键盘输入
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLLine方法接收用户输入:");
if (scanner.hasNextLine())
{
//使用nextLine方式接收
//nextLine方法会等待用户输入
String str = scanner.nextLine();
System.out.println("这里输出刚才输入的字符串:"+str);
}
//属于IO流的对象使用之后需要关闭
scanner.close();
}
输出结果
这里我的输入为hello world,输出值确实为预期的hello world
区别
next()
- 不但enter是结束符,也会将空格当成结束符,也就是说如果用户输入的字符串中有空格,next()只会将空格之前的字符读取,例如输入hello world,但是实际上只读取了hello
- 一定要读取到合法字符才会结束输入
nextLine()
- 以enter为结束符,读取的是回车之前的所有字符
- 可以读取带空格的字符串
顺序结构
顺序结构,最简单最基本的结构,从上而下一条一条语句执行
代码
public static void main(String[] args) {
//顺序结构演示
System.out.println("第一句");
System.out.println("第二句");
System.out.println("第三句");
}
输出结果
选择结构
if单选择结构
- 满足条件执行指定的代码,不满足条件则跳过该段代码的执行
if(布尔表达式)
{
//如果布尔表达式为真才执行的语句
}
小例子
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s = scanner.nextLine();
if(s.equals("Hello"))
{
System.out.println(s);
}
scanner.close();
}
执行结果
输入Hello,输出Hello
输入其他,则不输出
if双选择结构
- 满足条件执行指定的代码,不满足条件则执行另一段代码
if(布尔表达式)
{
//如果布尔表达式的值为真,则执行这个花括号中的代码
}else{
//如果布尔表达式的值为假,则执行这个花括号中的代码
}
小例子
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要执行的代码:");
String s = scanner.nextLine();
if(s.equals("A"))
{
System.out.println("这里使用的是A代码");
}else{
System.out.println("这里使用的是其他代码");
}
scanner.close();
}
执行结果
若输入A,则输出如下图
若输入非A,则输出如下图
if多选择结构
- 对于成绩的等级的划分,明显if双选择结构不够使了
- 对于一个问题,现在要对学生成绩进行划分等级
- 实际上,分数大于90,等级为A
- 分数大于80,等级为B
- 分数大于70,等级为C
- 分数大于60,等级为D
if(布尔表达式 1)
{
//如果布尔表达式 1的值为真执行代码
}else if(布尔表达式 2)
{
//如果布尔表达式 2的值为真执行代码
}
else if(布尔表达式 3)
{
//如果布尔表达式 3的值为真执行代码
}else
{
//如果以上的布尔表达式的值都不为真则执行此处的代码
}
小例子
成绩等级划分
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生成绩:");
int s = scanner.nextInt();
if( s>=90 ) {
System.out.println("学生成绩等级为\"A\"");
}else if(s>=80){
System.out.println("学生成绩等级为\"B\"");
}else if(s>=70){
System.out.println("学生成绩等级为\"C\"");
}else{
System.out.println("学生成绩等级为\"D\"");
}
scanner.close();
}
执行结果
输入为90-100,输出如下图
输入为66,输出如下图
嵌套选择结构
使用嵌套的if…else语句也是合法的。
就是说可以在if的花括号中再次使用if…else语句
if(布尔表达式 1)
{
//如果布尔表达式 1的值为真执行代码
if(布尔表达式 2)
{
//如果布尔表达式 2的值为真执行代码
}
}
switch多选择结构
- 判断一个变量与一系列值中的某一个值是否相等,进而选择要执行的分支
- switch 语句中的变量类型可以为:
- byte、short、int、char
- Java SE 7开始,支持String类型
switch(expression){
case value1 :
//语句
break;//可选,直接跳出switch语句
case value2 :
//语句
break;//可选,直接跳出switch语句
//可以有任意数量的case分支
default ://可选,若case分支都不满足,则执行default分支
//语句
}
小例子
依据输入的学生成绩等级,来输出学生成绩的评价
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生成绩等级:");
String s = scanner.next();
switch (s){
case "A":
System.out.println("你的成绩优秀");
break;
//缺少这个break语句会出现case穿透现象,即如果输入的为A,那么也会执行第二个case
case "B":
System.out.println("你的成绩良好");
break;
case "C":
System.out.println("你的成绩不错");
break;
case "D":
System.out.println("你的成绩合格");
break;
default:
System.out.println("你的成绩不能看");
}
scanner.close();
}
执行结果
输入为A,输出为下图
输入为非ABCD时,输出结果如下
循环结构
while循环
- 布尔表达式为真,便会一直执行其中的内容
- 我们要避免死循环,要人为控制循环跳出
- 有些循环是一直执行的,如服务器的请求响应监听
while(布尔表达式)
{
//循环内容
}
小例子
输出1-5
public static void main(String[] args) {
int i=1;
while (i <= 5)
{
System.out.println(i);
i++;
}
//-----方法二
// i = 0;
// while (i < 5)
// {
// i++;
// System.out.println(i);
// }
//-----方法三,使用了break
// i = 1;
// while (true)
// {
// System.out.println(i);
// i++;
// if(i == 6)
// break;
// }
}
执行结果
do…while循环
- do…while循环先执行再循环,至少执行一次
- 先执行一次语句,若满足布尔表达式,则继续循环
do{
//语句
}while(布尔表达式)
for循环
- for循环语句是支持迭代的一种通用结构,最有效、最灵活的循环结构
- for循环执行的次数是在执行前就确定的
for(初始值;布尔表达式;更新)
{
//语句
}
练习一
计算0-100之间的奇数与偶数的和
public static void main(String[] args) {
//计算0-100之间的奇数与偶数的和
int sum = 0;
int sum1 = 0;
for(int i=0;i<=100;i++)
{
//计算偶数的和
//若一个数对2求模得0,则其为偶数
if(i%2==0)
{
sum+=i;
}
//计算奇数的和
//若一个数对对2求模不得0,则其为奇数
if(i%2!=0)
{
sum1+=i;
}
}
System.out.println("0-100之间偶数之和为:"+sum);
System.out.println("0-100之间奇数之和为:"+sum1);
}
练习二
用for循环输出1-1000之间能被5整除的数,并且每行输出20个
public static void main(String[] args) {
//用for循环输出1-1000之间能被5整除的数,并且每行输出20个
int count =0;
for(int i=1;i<=1000;i++)
{
//若对5求模得0则该数可以被5整除
if(i%5==0)
{
count++;
System.out.print(i+" ");
}
//用来控制换行,够20个数就输出换行
if(count==20)
{
//System.out.println();
System.out.print('\n');
count=0;
}
}
}
练习三
打印九九乘法表
public static void main(String[] args) {
//打印九九乘法表
for(int i=1;i<=9;i++)
{
for (int j=1;j<=i;j++)
{
System.out.print(j+"*"+i+"="+i*j+'\t');
}
System.out.println();
}
}
增强型for循环(foreach)
- Java5中引入
- 用于数组或者集合
for(声明语句:表达式)
{
//代码语句
}
- 声明语句:声明新的局部变量,该变量的类型必须与数组元素的类型匹配。其作用域限定在循环语句块,其值与此时的数组元素的值相等
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法
小例子
public static void main(String[] args) {
int [] nums={10,20,30,40,50};
for (int x :nums) {
System.out.println(x);
}
}
输出结果
break&continue
- break在任何循环语句的主体部分,可以用来控制循环流程。强制退出循环,不执行后面的语句
- continue语句用在循环语句中可以用来跳过当前这次循环,即跳过continue后面未执行的语句,之后继续执行循环语句
练习
打印三角形
要求:打印如下图形
*
* * *
* * * * *
* * * * * * *
代码
public static void main(String[] args) {
for(int i=1;i<=4;i++)
{
//输出空格
for(int bc=(4-i)*2;bc>0;bc--)
{
System.out.print(" ");
}
//三角形主体
for (int c=1;c<i*2-1;c++)
{
System.out.print("*"+" ");
}
System.out.print("*");
System.out.println();
}
}