JAVA流程控制

一、用户交互Scanner

通过Scanner类来获取用户的输入。

基本语法:Scanner sc=new Scanner(System.in);

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

public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in); 
        System.out.println("使用next方式接受");//输入Hello World,输出Hello

        //判断用户有没有输入字符串
        if(scanner.hasNext()){
            //使用next方式接收
            String str=scanner.next(); // 程序会等待用户输入完毕
            System.out.println("输入的内容是"+str);
        }

        //凡是属于IO流的类,如果不关闭会一直占用资源,要养成好习惯用完就关掉
        scanner.close();
    }
public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接受");//输入Hello World,输出Hello World

        //判断用户有没有输入字符串
        if(scanner.hasNextLine()){
            //使用nextLine方式接收
            String str=scanner.nextLine(); // 程序会等待用户输入完毕
            System.out.println("输入的内容是"+str);
        }

        //凡是属于IO流的类,如果不关闭会一直占用资源,要养成好习惯用完就关掉
        scanner.close();
    }

也可以不使用hasNext()与hasNextLine()判断是否还有输入的数据,直接使用Scanner进行接收;

练习:

  public static void main(String[] args) {
        // 我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车进行确认,通过输入非数字来结束输入并输出执行结果
        Scanner scanner = new Scanner(System.in);
        double sum=0.0;
        int num = 0;
        while(scanner.hasNextDouble()){
            double v = scanner.nextDouble();
            num++;
            sum = sum + v;
        }
        System.out.println(num+"个数的总和:"+sum);
        System.out.println("平均数:"+sum/num);
        scanner.close();
    }

注意:这里体会到了进度丢失的问题;最简单的解决方式就是使用BigDecimal类进行计算(nextBigDecimal())

二、顺序结构

JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句的执行。

顺序结构就是最简单的算法结构。

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

三、选择结构(★★★★★)

if 单选择结构

语法:

if(布尔表达式){
            // 如果布尔表达式为true则将执行的语句
        }
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String s = scanner.nextLine();
        //ewuals():判断字符串是否相等
        if(s.equals("Hello")){
            System.out.println(s);
        }
        System.out.println("End");
        scanner.close();
    }

if 双选择结构

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();

    }

if 多选择结构

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        if(i==100){
            System.out.println("恭喜满分");
        }else if(i<100 && i>=90){
            System.out.println("A");
        }else if(i<90 && i>=80){
            System.out.println("B");
        }else if(i<80 && i>=70){
            System.out.println("C");
        }else if(i<70 && i>=60){
            System.out.println("D");
        }else if(i<60 && i>=0){
            System.out.println("不及格");
        }else{
            System.out.println("成绩不合法");
        }
        scanner.close();
    }

注意:

if语句至多有一个else语句,else语句在所有的else if语句之后;

if语句可以由若干个else if语句,他们必须在else 语句之前;

一旦其中一个else if语句检测到为true,其他的else if以及else 语句都将跳过执行。

嵌套的if结构

 public static void main(String[] args) {
        boolean beauty=true;
        boolean cute=true;
        boolean higt=false;

        if(beauty){
            if(cute){
                System.out.println("漂亮又可爱");
            }
            if(higt){
                System.out.println("又高又漂亮");
            }
        }
    }

思考:当我们需要找一个数,在1-100之间,那我们就可以嵌套判断,1-50,51-100,进行分层

switch多选择结构

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

switch语句中的变量类型可以是:

  • byte、short、int、char、String
  • 同时case标签必须为字符串常量或字面量
public static void main(String[] args) {
        // case 穿透现象 :如果不加break,则把后面的也进行输出,直到遇到break或者结束
         char grade = 'C';
         switch(grade){
             case 'A':
                 System.out.println("优秀");
                 break; // 可选
             case 'B':
                 System.out.println("良好");
                 break;
             case 'C':
                 System.out.println("及格");
                 break;
             default:
                 System.out.println("不合法");
         }
    }
 public static void main(String[] args) {
        // JDK7新特性,表达式结果可以是字符串!
        // 字符的本质还是数字

        // 反编译  java-class(字节码文件)-反编译(IDEA)

        String name="美国";

        switch(name){
            case "中国":
                System.out.println("祖国");
                break;
            case "美国":
                System.out.println("漂亮国");
                break;
            case "英国":
                System.out.println("英国");
                break;
            default:
                System.out.println("未知");
        }
    }

break 最好每一个都写上!!!!

四、循环结构

while循环

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

        //计算1+2+3+...+100的和
        int j=0;
        int sum=0;
        while(j<100){
            j++;
            sum+=j;
        }
        System.out.println(sum);
    }

do...while循环

 public static void main(String[] args) {
        int  a=0;
        while(a<0){
            System.out.println(a);
            a++;
        }
        System.out.println("=======================");
        do{
            System.out.println(a);
            a++;
        }while(a<0);

    }// 这是while和do...while的区别,下面的才输出a为0

for 循环★★★★★

注意:

最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。

然后,检测布尔表达式的值。如果为true,循环体被执行,为false,循环终止,开始执行循环体后面的语句。

执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。

再次检测布尔表达式,循环执行上面的步骤。

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++){    // 使用100.for 加回车,可以直接得到 for (int i = 0; i < 100; i++) {}
            System.out.println(i);
        }
        System.out.println("for循环结束");
        for (int i = 0; i < 100; i++) {  // for(;;){}——死循环

        }

    }

练习:

public static void main(String[] args) {
        //练习1:计算 0-100 之间奇数和偶数的和
        int JiSum = 0;  // oddSum
        int OuSum = 0;  // evenSum
        for (int i = 1; i <= 100; i++) {
            if(i%2==0){
                OuSum+=i;
            }else{
                JiSum+=i;
            }
        }
        System.out.println("奇数和"+JiSum);
        System.out.println("偶数和"+OuSum);
    }

public static void main(String[] args) {
        //练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
        int  a=1;
        int count=0;
    //while方式
        while(a>0&&a<=1000){
            if(a%5==0){
                System.out.print(a+" ");
                count++;
            }
            if(count==3){
                System.out.println("");
                count=0;
            }
            a++;
        }
    //for方式
        for (int i = 0; i <= 1000; i++) {
            if(i%5==0){
                System.out.print(i+"\t");
            }
            if(i%(5*3)==0){  //对15取模代表执行了3次
                System.out.print("\n");
            }
        }
    }
public static void main(String[] args) {
        //练习3:打印九九乘法表
        // 1.先打印第一列
        // 2.把固定的1在用一个循环包起来
        // 3.去掉重复项,j<=i
        // 4.调整样式
        for (int i = 1; i <= 9; i++) {
            for (int j=1;j<=i;j++){
                System.out.print(j+"*"+i+"="+j*i+"\t");
                if(j==i){
                    System.out.println();
                }
            }
        }
    }

主要用于数组的增强型for循环

public static void main(String[] args) {
        // 增强for循环
        int[] numbers={10,20,30,40,50}; //定义数组
        //遍历数组的元素
        for(int x:numbers){  // 简化
            System.out.println(x);
        }
        System.out.println("=====================");
        for(int i=0;i< numbers.length;i++){
            System.out.println(numbers[i]);
        }
    }

五、break&continue

public static void main(String[] args) {
        //break
        int i=0;
        while(i<=100){
            i++;
            System.out.println(i);
            if(i==20){
                break;//终止循环
            }
        }
        System.out.println("---------");

        //continue
        int j=0;
        while(j<100){
            j++;
            if(j%10==0){
                System.out.println();
                continue; // 之后的内容不在执行,直接开始新的下一轮循环
            }
            System.out.print(j+" ");
        }
        System.out.println("---------");

    }

注意:

break:在任何循环语句的主体部分,均可用break控制循环的流程;break用于强制退出循环,不执行循环中剩余的语句(Break也在switch语句中使用)

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

标签使用:了解即可

public static void main(String[] args) {
        //打印101-150之间所有的质数
        // 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
        int count=0;
        outer:for (int i=101;i<150;i++){
            for(int j=2;j<i/2;j++){
                if(i%j==0){
                    continue outer;
                }
            }
            System.out.print(i+" ");
        }
    }

六、练习

打印三角形

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++){//打右边的星(比左边少1)
                System.out.print("*");
            }
            System.out.println();
        }
    }