Java 流程控制结构 学习笔记(2021.05.19)

流程控制结构学习

一、Scanner类的使用学习

​ 在学习流程控制结构中我们频繁用到scanner类,在此我们先学习scanner类(扫描器)如何使用。

​ 由于“类”的概念还没学习过,就当作是一个可以直接使用的工具概念即可,学会如何使用照着做即可

1. Scanner类基础使用方法

既然scanner是一个类(一个工具概念),我们使用这个工具概念时,就应该将概念实体化,变成一个真正的工具,再用它做事。

下面是如何使用Scanner的方法

public class DemoScannerBase {
    public static void main(String[] args) {
        //Scanner的基本使用方法
        //获得一个scanner(扫描器)
        Scanner s = new Scanner(System.in);   //system.in的意思是使用系统的输入流,这里的new是实体化这个工具的意思
        System.out.print("请输入内容让扫描器扫描:");
        String str = "没有内容!";
        if(s.hasNext()){//如果扫描器s有内容执行以下
            str = s.nextLine();//将扫描器s的下一行赋值给str
        }
        System.out.println(str);
        s.close();//将扫描器关闭(养成习惯!)
    }
}

2. Scanner进阶使用

在Scanner工具中,系统给我们内置了许多方法(这些方法就是工具本身有的功能)

下面我们对Scanner进行进阶学习。

对Scanner的方法例如:next(); nextLine(); hasNext(); hasNext [ Type ] ()如hasNextDouble() 等进行学习实践。

demo和解释在如下代码:

import java.util.Scanner;

public class DemoScannerLevelUp {
    public static void main(String[] args) {
        /*
        next和nextLine的区别:
            next():
            1、一定要读取到有效字符后才可以结束输入。
            2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
            3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
            4、next()不能得到带有空格的字符串。

            nextLine():
            1、以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
            2、可以获得空白。
         */

        Scanner scanner = new Scanner(System.in);
        String str = "没有内容";
        //使用next()
        System.out.print("请输入内容(next):");
        if(scanner.hasNext()){//hasNext()方法的功能是判断是否有下一个需要被扫描的对象
            str = scanner.next();
        }
        scanner.nextLine();//让扫描器清空未读数据
        System.out.println(str);


        str = "没有内容";
        //使用nextLine()
        System.out.print("请输入内容(nextline):");
        if(scanner.hasNext()){
            str = scanner.nextLine();
        }
        System.out.println(str);

        //使用scanner内置方法判断输入的数据类型。
        str = "不是整数";
        System.out.print("请输入整数内容:");
        if(scanner.hasNextInt()){
            str = scanner.nextLine();
        }
        System.out.println(str);

        scanner.close();

    }
}

demo2:

import java.util.Scanner;

public class DemoScannerUse {
    public static void main(String[] args) {
        /*
        输入数字并且以回车分开,以非整数作为结束标志,输出总数、个数、平均数。
         */
        System.out.print("请输入数字:");
        Scanner scanner = new Scanner(System.in);
        double sum = 0.0d;
        int count = 0;
        while(scanner.hasNextDouble()){//下个是否为double类型被扫描
            double i = scanner.nextDouble();
            sum+=i;
            count+=1;
        }
        System.out.println("总数:"+sum);
        System.out.println("个数:"+count);
        System.out.println("平均数:"+sum/count);

    }
}

二、顺序结构

顺序结构是最简单的流程控制结构,

也是哪一种算法都必须拥有的结构,

简单却重要!

public class DemoOrder {
    public static void main(String[] args) {
        /*
            顺序结构是最简单的流程控制结构,
            也是哪一种算法都必须拥有的结构,
            简单却重要!
         */
        System.out.println("执行第一行,接下来是第二行。。");
        System.out.println("执行第二行,接下来是第三行。。");
        System.out.println("执行第三行,接下来是第四行。。");
        System.out.println("执行第四行,接下来是第五行。。");
        System.out.println("执行第五行");
    }
}

三、选择结构

在编写程序中,经常有根据条件是否正确来判断是否执行代码的需求,这时候就需要选择结构登场。

1. 单重选择

形如:if(表达式) {代码块}

对表达式进行判断是非,如果是则执行代码块,如果不是则跳过代码块。

//单重选择
Scanner scanner = new Scanner(System.in);
System.out.print("请输入判断内容:");
String str = "";
if(scanner.hasNext()){
    str = scanner.nextLine();
}
if (str.equals("123")){//判断内容是否为"123"决定是否执行下面括号中的代码
    System.out.println("内容正确,内容为:"+str);
}

2. 双重选择

形如:

if(表达式) {代码块1}
else {代码块2}

判断表达式内容的真假,真则执行代码块1,假则执行代码块2

//双重选择
System.out.print("请输入判断内容:");
str = "";
if(scanner.hasNext()){
    str = scanner.nextLine();
}
if (str.equals("123")){//真则执行内容正确代码
    System.out.println("内容正确,内容为:"+str);
}else {//假则执行内容错误代码
    System.out.println("内容错误!");
}

3. 多重选择

形如:

if (表达式1){
代码块1
}else if(表达式2)){
代码块2
}else if(表达式3){
代码块3
}else if(表达式4){
代码块4
}else{
代码块5
}

判断表达式1234的真假,真则执行首个真的代码块,都假则执行代码块5,表达式和代码块都不限数量。

System.out.print("请输入判断内容:");
str = "";
if (scanner.hasNext()){
    str = scanner.nextLine();
}
if (str.equals("1")){
    System.out.println("内容是:1");
}else if(str.equals("2")){
    System.out.println("内容是:2");
}else if(str.equals("3")){
    System.out.println("内容是:3");
}else if(str.equals("4")){
    System.out.println("内容是:4");
}else{
    System.out.println("内容不是1、2、3、4");
}

4. switch选择

形如:

switch (表达式){
case 表达式结果1 :
代码块1
break;
case 表达式结果2 :
代码块2
break;
case 表达式结果3 :
代码块3
break;
case 表达式结果4 :
代码块4
break;
default://可以不要
代码块5
break;
}

根据表达式结果判断执行哪一个代码块,表达式的结果是表达式结果1则执行代码块1,如此类推,如果都不是则执行代码块5。

//switch结构
System.out.print("请输入判断内容:");
str = "";
if (scanner.hasNext()){
    str = scanner.nextLine();
}
switch (str){
    case "1" :
        System.out.println("内容是1");
        break;
    case "2" :
        System.out.println("内容是2");
        break;
    case "3" :
        System.out.println("内容是3");
        break;
    case "4" :
        System.out.println("内容是3");
        break;
    default:
        System.out.println("内容不是1、2、3、4");
        break;
}

四、循环结构

在某种条件下,可以一次又一次的做指定的代码。

1. while循环

/*
        while,形如:
            while(表达式){
                表达式为真则一直执行
            }
*/
int i = 0;
while(i < 10){
    System.out.println(i);
    i++;
}

2. do while循环

/*
do while,形如:
do{

    //循环判断表达式为真则执行此处代码块,且先执行一次再进行此次判断

}while(循环判断表达式);
 */
int i2=110;
do{
    System.out.println(i2);
    i2++;
}while(i2<=10);

3. for循环

/*
        for循环,形如:
        for(初始化表达式;每次循环条件表达式;每次循环结束执行表达式){

            //循环判断表达式为真则执行此处代码块

        }
        如果没有初始化表达式、循环判断表达式、就是死循环
*/
for (int i1 = 0; i1 < 100; i1++) {
    System.out.print(i1+ "  ");
}

4. for循环增强

/*
    增强for循环:一般用于循环输出数组、列表、集合,形如:
    for(列表中元素类型的标量:列表){
        //循环代码块
    }
 */
int[] nums={1,2,3,4,5,6,7,8,9};
for (int num : nums) {
    System.out.print(num);
}
System.out.println();

五、break&continue

1. break

打断当前循环,直接进入下一行代码。

//break的使用
Scanner scanner = new Scanner(System.in);
while (true){
    String str="";
    str = scanner.nextLine();
    if(str.equals("end")){
        break;
    }
    System.out.println(str);
}

2. continue

在循环中,跳过此次循环并且跳转至指定的地方。

//continue的使用(执行到continue时,打断循环并且跳转到指定位置)
xxx:for (int i1 = 0; i1 < 10; i1++) {//循环10行
    for (int i3 = 0; i3 < 10; i3++) {//循环10列
        if(i1==3&&i3==5){//循环到第3行第5列时打断此行直接跳转到下一行的循环
            System.out.println();
            continue xxx;
        }
        System.out.print(i3+" ");
    }
    System.out.println();
}

*3. goto(了解即可)

关于goto关键字

goto关键字狼早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;

Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子---带标签的break和continue。

“标签”是指后面跟一个冒号的标识符,例如: label:

对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环。但若随同标签使用,它们就会中断到存在标签的地方。

六、练习题

大家写代码的时候要多多自己练习分析,痛苦一时,受益长久

1. 九九乘法表

//九九乘法表
for (int i = 1; i <= 9; i++) {//循环1~9行
    for (int j = 1; j <= i; j++) {//循环1~i个列(i是当前第几行,例如第四行就是1到4个列,分别是1*4、2*4、3*4、4*4)
        System.out.print(j+" * "+i+" = "+i*j+"\t");//输出i行j列相乘的数
    }
    System.out.println();
}

2. 输出1-1000质数

//输出1~1000的质数
xxx:for (int i = 1; i <= 1000; i++) {
    for (int i1 = 2; i1 <= i / 2; i1++) {
        if(i%i1==0) continue xxx;
    }
    System.out.print(i+" ");
}

3. 打印5行高的三角形

for (int i = 1; i <= 5; i++) {//循环5行

    for (int j = 1;j<=5-i;j++){//循环空格,空格个数为:5-行高
        System.out.print(" ");
    }

    for(int k=1;k<=2*i-1;k++){//循环*,8个数为:2*行高-1
        System.out.print("*");
    }

    System.out.println();//换到下一行
}

知识来源:https://www.kuangstudy.com/

posted @ 2021-05-19 19:39  小阴辨  阅读(68)  评论(0)    收藏  举报