流程控制

一、用户交互Scanner

  • java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入

  • //基本语法
    Scanner s = new Scanner(System.in);
    
  • 获取输入的字符串:next()和nextLine()方法

  • 判断是否还有输入的数据:hasNext()和hasNextLine()方法

import java.util.Scanner;
public class Demo01 {
    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);
        }
        
        //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关闭
        scanner.close();
    }
}
import java.util.Scanner;

public class Demo02 {
    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();
    }
}

  • next():不能得到带有空格的字符串
  • nextLine():以Enter为结束符,即返回输入回车之前的所有字符,可以获得空格
import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        //从键盘获取数据
        int i = 0;
        float f = 0.0f;

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

        System.out.println("请输入小数:");
        if(scanner.hasNextFloat()) {
            f= scanner.nextFloat();
            System.out.println("小1数数据:"+f);
        }else {
            System.out.println("输入的不是小数数据!");
        }


        scanner.close();
    }
}
import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        /*我们可以输入多个数字,并求其总和与平均数
        没输入一个数字用回车确认
        通过输入非数字来结束输入并输出执行结果
        * */
        Scanner scanner = new Scanner(System.in);

        //和
        double sum = 0;
        //计算书入了多少个数字
        int m = 0;

        //通过循环判断是否还有输入,并在里面对每一次进行求和和统计
        while(scanner.hasNextDouble()) {
            double x = scanner.nextDouble();
            m ++;
            sum += x;
        }
        System.out.println(m+"个数的和为"+sum);
        System.out.println(m+"个数的平均数为"+(sum/m));

        scanner.close();
    }
}

二、顺序结构

  • java的基本结构就是顺序结构
  • 语句与语句之间,框与框之间是按照从上到下的顺序进行的,由若干个依次执行的处理步骤组成,是任何一个算法都离不开的一种基本算法结构。

三、选择结构

  1. if单选择结构

    import java.util.Scanner;
    
    public class Demo02 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("请输入内容:");
            String s = scanner.nextLine();
    
            //equals:判断字符是否相等
            if(s.equals("Hello")) {
                System.out.println(s);
            }else {
                System.out.println("End");
            }
    
            scanner.close();
        }
    }
    
  2. if双选择结构

    import java.util.Scanner;
    
    public class Demo03 {
        public static void main(String[] args) {
    
            //考试分数大于60是及格,小于60不及格
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("请输入成绩:");
            int score = scanner.nextInt();
    
            if (score >= 60) {
                System.out.println("及格");
            }else {
                System.out.println("不及格");
            }
    
    
            scanner.close();
        }
    }
    
  3. if多选择结构

    import java.util.Scanner;
    
    public class Demo04 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("请输入成绩:");
            int score = scanner.nextInt();
    
            if (score >= 100) {
                System.out.println("恭喜满分!");
            }else if (score < 100 && score >= 90) {
                System.out.println("A级");
            }else if (score < 100 && score >= 80) {
                System.out.println("B级");
            }else if (score < 100 && score >= 70) {
                System.out.println("C级");
            }else if (score < 100 && score >= 60) {
                System.out.println("D级");
            }else if (score > 0 && score < 60) {
                System.out.println("不及格");
            } else {
                    System.out.println("成绩不合法");
            }
    
            scanner.close();
        }
    }
    
  4. if嵌套结构

  5. switch多选择结构

    public class SwitchDemo01 {
        public static void main(String[] args) {
            char grade = 'C';
    
            switch (grade) {
                case 'A':
                    //case穿透现象:如果没有break语句,在匹配上之后就会挨着case输出
                    System.out.println("优秀");
                    break;
                case 'B':
                    System.out.println("良好");
                    //break;
                case 'C':
                    System.out.println("及格");
                    //break;
                default:
                    System.out.println("未知等级");
            }
        }
    }
    
    • switch语句中的变量类型可以是:byte short int 或char
    • javaSE7开始支持String类型

四、循环结构

  1. while循环

    不满足条件则无法进入循环

    public class WhileDemo01 {
        public static void main(String[] args) {
            //输出1-100
            int i = 0;
            while(i<100) {
                i ++;
                System.out.println(i);
            }
        }
    }
    
  2. do...while循环

    即使不满足条件,也至少执行一次

    public class DowhileDemo {
        public static void main(String[] args) {
            int i = 0;
            int sum = 0;
            do {
                sum += i;
                i ++;
            }while (i<=100);
            System.out.println(sum);
        }
    }
    
    public class DowhileDemo02 {
        public static void main(String[] args) {
            int a = 0;
            while (a<0) {
                System.out.println(a);
            }
            System.out.println("===================");
            do {
                System.out.println(a);
            }while (a<0);
        }
    }
    
  3. for循环

    for(初始化值;布尔表达式;更新)
    
    public class ForDemo01 {
        public static void main(String[] args) {
            int a = 1;//初始化条件
    
            while (a <= 100) {//条件判断
                System.out.println(a);//循环体
                a += 2;//迭代
            }
    
            System.out.println("while循环结束!");
                //初始化值、条件判断、迭代
            for(int i=1;i<=100;i++) {
                System.out.println(i);
            }
            System.out.println("for循环结束!");
        }
    }
    
    • 最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
    public class ForDemo02 {
        public static void main(String[] args) {
            //用while或for循环输出1-100之间能被5整除的数
            //并且每行输出三个
            for (int i = 0; i < 1000; i++) {
                if (i % 5 == 0) {
                    System.out.print(i+"\t");
                }
                if (i % (5*3)==0) {//换行
                    System.out.println();
                }
            }
        }
    }
    
    public class ForDemo03 {
        public static void main(String[] args) {
            //打印九九乘法表
            for (int i = 1; i <= 9; i++) {
                for (int j=1;j <= i;j++) {
                    System.out.print(i+"*"+j+"="+i*j+"\t");
                }
                System.out.println();
            }
        }
    }
    
  4. 增强for循环

    public class ForDemo05 {
        public static void main(String[] args) {
            int[] numbers = {10,20,30,40,50};//定义一个数组
    
            //遍历数组元素
            for (int x:numbers) {
                System.out.println(x);
            }
    
            System.out.println("================");
            for(int i=0;i<5;i++) {
                System.out.println(numbers[i]);
            }
        }
    }
    

五、break & continue

  1. break

    在任何循环语句的主体部分,均可用break控制循环的流程。

    break用于强行退出循环,不执行循环中剩余的语句,但没有终止程序。

    public class BreakDemo {
        public static void main(String[] args) {
            int i = 0;
            while(i < 100) {
                i ++;
                System.out.println(i);
                if (i==30) {
                    break;
                }
            }
            System.out.println("程序到这才停止。");
        }
    }
    
  2. continue

    在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着执行下一次是否执行循环的判定。

    public class ContinueDemo {
        public static void main(String[] args) {
            int i = 0;
            while (i < 100) {
                i ++;
                if (i % 10 == 0) {
                    System.out.println();
                    continue;
                }
                System.out.print(i+"\t");
            }
        }
    }
    

六、练习

public class TestDemo01 {
    public static void main(String[] args) {
        //打印三角形 5行
        for(int i=1;i<=5;i++) {
            for (int j=5;j>=i;j--) {
                System.out.print(" ");
            }
            for (int j=1;j<=i;j++) {
                System.out.print("*");
            }
            for (int j=1;j<i;j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}