Java流程控制

Java流程控制

1.用户交互 Scanner(扫描器)

java.util.Scanner 是java5 的新特性,我们可以通过 Scanner 类来获取用户输入。

基本语法

Scanner s = new Scanner(System.in);

通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,再读取前,我们一般需要使用 hasNext() 与 hasNextLine() 判断是否还有输入的数据。

(1)next() 与 nextLine()的区别

next()

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //创建扫描器对象
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用next方式接收:");

        //判断用户是否输入字符串
        if(scanner.hasNext()){
            String str = scanner.next();
            System.out.println("输入内容为:"+str);
        }
        scanner.close(); //IO流对象不会自动关闭,需要使用.close()进行手动关闭。
    }
}

输入 hello word! 输出 hello

nextLine()

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //创建扫描器对象
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用nextLine方式接收:");

        //判断用户是否输入字符串
        if(scanner.hasNextLine()){
            String str = scanner.nextLine();
            System.out.println("输入内容为:"+str);
        }
        
        scanner.close(); //IO流对象不会自动关闭,需要使用.close()进行手动关闭。
    }
}

输入 hello word! 输出 ***hello word!***。

next():
	①一定要读取到有效字符串后才可以结束输入,直接输入回车,程序仍然等待用户输入;
	②对输入有效字符前遇到的空白,next()方法会自动将其去掉,如输入"   hello",程序只读取到hello,空格会自动去掉;
	③只有输入有效字符后,才将后面输入的空白作为分隔符或者结束符,因此输入"hello word!"时,程序只读取到 "hello";
	④ next() 不能得到带有空格的字符串;

nextLine():
	①以Enter为结束符,也就是说 nextLine() 可以返回回车前的所有字符。
	②可以通过直接输入回车获得空白字符串。
	③在使用 nextLine() 时,如果之前语句中恰好使用了 next(),需在中间穿插一条 nextLine() 用来吃掉上面的回车。
		例: String str1 = scanner.next();
       	    String str3 = scanner.nextLine();  //用来吃掉上面的回车
            String str2 = scanner.nextLine();

            System.out.println(str1);
            System.out.println(str2);

(2)进阶

输入整数、浮点数等类型

int i = scanner.nextInt();
scanner.hasNextInt(); //判断是否输入了整数

float j = scanner.nextFloat();
scanner.hasNextFloat(); //判断是否输入了小数

2.顺序结构

JAVA的基本结构就是顺序结构,每条语句从上到下依次执行,是任何一种算法都离不开的基本结构

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
       System.out.println("1");
       System.out.println("2");
       System.out.println("3");
    }
}

3.选择结构

(1)if单选择结构

语法

if(布尔表达式){
	//如果布尔表达式为 true,则执行该结构内部语句
}

例子

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        
        //equals()方法用于进行字符串值比较,不可使用 == ,因为 == 是字符串指向内存地址的比较。
        if(s.equals("hello")){
            System.out.println("您输入的 'hello'");
        }
        scanner.close();
    }
}

只有当输入的 s 为 hello 时,才会输出语句。

(2)if双选择语句

语法

if(布尔表达式){
    //如果布尔表达式为 true,则执行该结构内部语句
}else{
    //如果布尔表达式为 false,则执行该结构内部语句
}

例子

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
    	Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
      
        if(i >= 60){
            System.out.println("及格");
        }else{
            System.out.println("不及格");
        }
        scanner.close();
    }
}

当输入数据大于等于60时,输出及格,否则输出不及格。

(3)if多选择结构

语法

if(布尔表达式){
    
}esle if(布尔表达式){
    
}else if(布尔表达式){
    
}
....
else{
    
}

例子

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        
    	Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
      	
        /*
        if 语句最多只有一个 else,并且 else 语句要在所有的 else if 语句之后
        if 语句可以有若干个 else if 语句,他们必须在 else 语句之前
        一旦其中的一条 else if 语句检测为 true,则其他的else if 以及 else 语句都将跳过不被执行
        */
        
        if(i>=90 && i<=100){
            System.out.println("优秀");
        }else if(i>=80 && i<90){
            System.out.println("良好");
        }else if(i>=70 && i<80){
            System.out.println("中等");
        }else if(i>=60 && i<70){
            System.out.println("及格");
        }else if(i>=0 && i<60){
            System.out.println("不及格");
        }else{
        	System.out.println("数据错误");
        }
    
        scanner.close();
    }
}

(4)if嵌套结构

语法

if(布尔表达式){
    if(布尔表达式){
        ...
    }
}

(5)Switch 选择结构

switch case 语句判断一个变量与一系列值中的某个值是否相等,每个值成为一个分支。

语法

//expression 的类型只可以是 byte,short,int 或者 char,不能是 boolean,long,float,double 类型,在 JDK7 后,也支持 String 类型
switch(expression){
    //case 标签必须为字符串常量或者字面量
    case value1:
        //语句
        break;  //若不加 break ,则程序会执行之后的所有语句,而不在意 case 是否匹配,这种现象称为 case 穿透
    case value2:
        //语句
        break;
    case value3:
        //语句
        break;
    default: //当所有标签都不匹配时,执行default
        //语句
}

例子

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //创建扫描器对象
        Scanner scanner = new Scanner(System.in);
        
        //Scanner 类型不能接收单独的字符类型,所以接收字符串类型,再用charAt(0)函数取第一个字符返回
		char x = (char) scanner.next().charAt(0); 
        
        switch(x){
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
            case 'C':
                System.out.println("中等");
            case 'D':
                System.out.println("及格");
            default:
                System.out.println("不及格");
        }
        sacnner.close();
    }
}

结果

①当输入 A 时,输出优秀;
②当输入 B 时,由于 case 穿透现象,输出良好、中等、及格、不及格;
③当输入 A、B、C、D 外其它字符时,输出不及格;

4.循环结构

(1)while 循环

语法

while(布尔表达式){ //只要布尔表达式为真,循环就会一直执行下去
    //循环内容
    //大多数情况会通过布尔表达式的值让循环停下来
    //循环条件一直为true,会造成无限循环,也就是死循环,会影响程序性能。一般出服务器监听程序外,我们都不会使用无限循环
}

例子

//输出1-10
public class Test {
    public static void main(String[] args) {
        int i =1;
        while(i < 11){ //每次循环前,先判断 i<= 10 是否成立,若成立则执行循环体内语句(当循环结束时,i==11)
            System.out.println(i);
            i++;
        }
    }
}

(2)do…while 循环

语法

do{
    //代码语句
}while(布尔表达式); //先执行一遍代码语句,再判断布尔表达式是否为真,若为真,则继续执行代码语句

while 与 do…while 的区别

① while 先判断布尔表达式是否成立,再执行语句。do...while 先执行一遍代码语句,再判断布尔表达式,若为真,则继续循环。
② do...while 总是保证循环体内代码语句至少会被执行一次。

例子

public class Test {
    public static void main(String[] args) {
        int x = 0;

        while(x<0){ //因为 x<0 为假,所以不进入该循环
            System.out.println(x);
            x++;
        }

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

        do{
            System.out.println(x); //do..while 循环先执行一遍循环体内代码语句,再进行判断,所以无论 x<0 是否成立,都会执行输出
            x++;
        }while(x<0);
    }
}

输出结果为

===========
0

(3) for 循环

for 循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

语法

for(初始化;布尔表达式;更新){
    //循环体语句
}

例子

//输出1-10
public class Test {
    public static void main(String[] args) {
        for(int i = 1 ; i < 11 ; i++){
            System.out.println(i);
        }
    }
}

注意

for 循环的 初始化、布尔表达式、更新 都可以赋值为空,一般用三者全部为空代表 无限循环

(4)增强 for 循环

主要用于遍历数组

语法

for(声明语句 : 表达式){
    //循环体语句
}

例子

public class Test {
    public static void main(String[] args) {
        int []numbers = {5,4,3,2,1};
        
        for(int x : numbers){
            System.out.println(x); //遍历输出数组内元素
        }
    }
}

5.break & continue

break 用于跳出循环,continue 用于终止本次循环直接进入下一次循环

例子

break

public class Test {
    public static void main(String[] args) {
        int i =0;
        while(i<10){
            if(i%6==0){ //当 i%6 == 0 时结束循环
                break;
            }
            System.out.println(i);
            i++;
        }
    }
}

输出结果

0
1
2
3
4
5

continue

public class Test {
    public static void main(String[] args) {
        int i =0;
        while(i<10){
            if(i%6==0){ //当 i%6 == 0 时结束本轮循环,进入下一轮循环
                continue;
            }
            System.out.println(i);
            i++;
        }
    }
}

输出结果

0
1
2
3
4
5
7 //因为 i == 6 时执行了continue,所以continue之后循环体内所有语句均不执行,直接执行到 i==7
8
9

拓展:带标签的 continue (类似 C语言 的 goto)

语法

标签:
continue 标签;

例子

public class Test {
    public static void main(String[] args) {
        //输出10-20之间所有的质数(只能被1和它本身整除的数)
        outr://通过 continue 跳转到标签处时,不会再次执行初始化语句 int i =10;
        for(int i=10;i<20;i++){
            for(int j=2;j<i/2;j++){ //若是质数,则其整除的数一定在1/2区间内
                if(i%j==0){
                    continue outr;
                }
            }
            System.out.println(i);
        }
    }
}

此方法会破化面向对象的封装性,所以不建议使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

徐先生没洗头

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

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

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

打赏作者

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

抵扣说明:

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

余额充值