java09_java流程控制(用户交互的Scanner,顺序结构,选择结构,循环结构,break & continue)

java流程控制

1,用户交互的Scanner

  • java.util.Scanner是java5的新特征,计算机可以通过Scanner类来获取用户的输入。

  • 基本语法:

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

——next()

package 史前蓝熊.Scanner;
import java.util.Scanner;
public class Day01 {
    public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方式接收:");

            //使用next方式接收
            String str = scanner.next();
            System.out.println("输入的内容:"+str);
       
        //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关。
        //用完之后关闭scanner,节省资源。
        scanner.close();
    }
}

结果:
    
使用next方式接收:
       hello world
输入的内容:hello
  • 1,一定要读取到有效字符后才可以结束输入。
  • 2,对输入有效字符之前遇到的空白,next()会自动将其去掉。
  • 3,输入有效字符后面的空白可以作为分隔符或者结束符。
  • 4,next()不能得到带有空格的字符串。

—其他的方法:

package 史前蓝熊.Scanner;

import java.util.Scanner;

public class Day03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        //从键盘接收数据
        int i= 0;
        float f = 0.0f;
        if(scanner.hasNextInt()){
            i = scanner.nextInt();
            System.out.println("得到的整数:"+i);
        }
        else{
            System.out.println("输入的不是整数");
        }



        Scanner scanner1 = new Scanner(System.in);
        System.out.println("请输入小数:");
        if(scanner1.hasNextFloat()){
            f = scanner1.nextFloat();
            System.out.println("输入的小数:"+f);
        }
        else{
            System.out.println("输入的不是小数");
        }
        
        scanner1.close();
        scanner.close();
    }
}



结果:
请输入一个整数:
00090
得到的整数:90 //整数的读取,会忽略第一个非零数前面的0。
请输入小数:
12
输入的小数:12.0//即使输入的是整数,也会被读取为小数。

—— nextline()

package 史前蓝熊.Scanner;
import java.util.Scanner;
public class Day02 {
    public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收:");

            //使用nextLine方式接收
            String str = scanner.nextLine();
            System.out.println("输入的内容:"+str);
      
        //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关。
        //用完之后关闭scanner,节省资源。
        scanner.close();
    }
}

结果:
    
使用nextLine方式接收:
     hello world
输入的内容:     hello world
  • 1,以Enter(回车键)作为结束符,也就是说nextline()方法返回的是输入回车键之前的全部字符。
  • 2,可以得到带有空格的字符串。

——scanner发现:

package 史前蓝熊.Scanner;

import java.util.Scanner;

public class Day04 {
    public static void main(String[] args) {
        int num1=0;
        int num2=0;
        int num3=0;
        int num4=0;
        float num5 = 0f;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");

        if(scanner.hasNextInt()){
            num1= scanner.nextInt();
            System.out.println("输入的num1:"+num1);
        }
        else{
            System.out.println("输入的不是整数");
        }

        if(scanner.hasNextInt()){
            num2= scanner.nextInt();
            System.out.println("输入的num2:"+num2);
        } else{
            System.out.println("输入的不是整数");
        }

        if(scanner.hasNextInt()){
            num3= scanner.nextInt();
            System.out.println("输入的num3:"+num3);
        } else{
            System.out.println("输入的不是整数");
        }

        if(scanner.hasNextInt()){
            num4= scanner.nextInt();
            System.out.println("输入的num4:"+num4);
        } else{
            System.out.println("输入的不是整数");
        }
        if(scanner.hasNextFloat()){
            num5= scanner.nextFloat();
            System.out.println("输入的num5:"+num5);
        } else{
            System.out.println("输入的不是小数");
        }
        scanner.close();
    }
}


结果1:
请输入一个整数:
1
输入的num1:1
2
输入的num2:2
3
输入的num3:3
4
输入的num4:4
5
输入的num5:5.0//整数类型的5被转化为浮点数。
    
结果2:
请输入一个整数:
1
输入的num1:1
1.1
输入的不是整数
输入的不是整数
输入的不是整数
输入的num5:1.1//因为第二个的错误,程序没有在第三,四个位置进行读取操作,在第五个数的位置被识别为正确的。
    
结果3:
请输入一个整数:
1.1
输入的不是整数
输入的不是整数
输入的不是整数
输入的不是整数
输入的num5:1.1//因为第一个的错误,程序没有在第二,三,四个位置进行读取操作,在第五个数的位置被识别为正确的。
    
  • 当利用一个Scanner对象进行多次数据读取时,输入类型正确,可以继续输入读取。输入类型错误的话,之后的判断将沿用这个错误的数据进行判断,直到判断正确或程序结束。

2,顺序结构

  • java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
  • 顺序结构是最简单的算法结构。
  • 它是任何一个算法都离不开的一种基本算法结构。

3,选择结构

——if单选择结构

语法:

if(布尔表达式){
    //如果布尔表达式为true,将执行的语句
}

——if双选择结构

if(布尔表达式){
    //布尔表达式为true,将执行的语句
}
else{
    //布尔表达式为false,将执行的语句
}

——if多选择结构

if(布尔表达式1){
    //布尔表达式1为true,将执行的语句
}
else if(布尔表达式2){
    //布尔表达式2为true,将执行的语句
}
else if(布尔表达式3){
    //布尔表达式3为true,将执行的语句
}
else{
    //上述所有布尔表达式都为false,将执行的语句
}
  • 当一个条件为真的时候,就跳出选择结构。

——if的嵌套结构

if(布尔表达式1){
    //布尔表达式1为true,将执行的语句
    if(布尔表达式2){
    //布尔表达式2为true,将执行的语句
    }
}

——switch多选择结构

switch(expression){
    case value://语句1
    break;
    
    case value://语句2
    break;
    
    default://语句3
    
}
  • switch语句中的变量类型可以为:

​ -byte,short,int或者char。

​ -从java SE 7 开始,switch支持字符串String类型。

​ -同时,case标签必须为字符串常量或字面量。

补充:

  • 反编译

    字符串的本质还是数字,在生成的class文件里,每一个String变量都对应一个hashCode,switch里面进行比较的是hashCode。

4,循环结构

——while循环

while(布尔表达式){
    //循环内容
}
  • 只要布尔表达式为true,循环就会一直进行下去。
  • 我们需要根据情况,终止循环。

——do while

do{
    //代码语句
}while(布尔表达式);
  • 有时候我们需要即使不满足条件,也至少执行一次,这时候我们需要do... ...while 。

    while与do... ... while的区别:

  • do... ...while 与while相似,但do... ... while至少执行一次。

  • do... ...while是先执行再判断,while是先判断再执行。

——for循环

for(初始值;布尔表达式;更新){
    //代码语句
}

快捷输入:
100.for回车
生成:
for (int i = 0; i < 100; i++) {
            
        } 
  • for循环是支持迭代的一种通用结构,是最有效,最灵活的循环结构。
  • for循环的执行次数是在执行前确定的。

——增强for循环

for(声明语句:表达式)
{
    //代码句子
}

例子:

package 史前蓝熊.Cycle;

public class EnhanceFor {
    public static void main(String[] args) {
        //定义一个数组
        int[] numbers = {10,20,30,40};

        //遍历数组中的元素
        for(int x:numbers){
            System.out.println(x);
        }
    }
}

结果:
10
20
30
40
  • java5 引入了一种主要用于数组或集合的增强型for循环。
  • 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

5,break & continue

package 史前蓝熊.Cycle;

public class Break01 {
    public static void main(String[] args) {
        int i = 0;
        while(i<100){
            i++;
            System.out.println(i);
            if(i==30){
                break;
            }
        }
    }
}
结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30//跳出循环
  • break在任何循环语句的主题部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩下的语句。(break语句也在switch语句中使用)
public class Continue01 {
    public static void main(String[] args) {
        int i =0;
        while(i<10){
            i++;
            if(i%2==0){
                continue;
            }
            System.out.println(i);
        }
    }
}
结果:
1
3
5
7
9
//遇到偶数的话,执行continue,其后语句不执行,直接判断下一次条件是否继续进行循环。
  • continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断

扩展:(关于goto关键字)

  • goto关键字很早就在程序设计语言中出现,尽管goto仍是java的一个保留字,但并未得到正式使用;java没有goto。然而,在break和continue着两个关键字的身上,我们仍然能看到goto的影子---带标签的break和continue。
  • “标签”是指后面跟一个冒号的标识符,例如:label:
public class Label_01 {
    public static void main(String[] args) {
        //打印101~150之间的所有质数
        
        A:for(int min = 101;min<150;min++) {
        for (int min2=2;min2 < min/2; min2++) {
         if (min % min2 == 0) {
             continue A;
         }
     }
         System.out.println(min);
 }
        System.out.println("END");

    }
}
结果:
101
103
107
109
113
127
131
137
139
149
END
  • 对java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另外一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们可以中断到存在标签的地方。

参考资料:狂神说JavaJava零基础学习视频通俗易懂

posted @ 2021-03-03 11:49  猪无名  阅读(58)  评论(0编辑  收藏  举报