2.2 Java流程控制

sacnner对象

scanner实现程序和人的交互,用它来获得用户的输入

  • 基本语法

    Scanner scanner = new Scanner(System.in);

scanner.next和scanner.nextLine的区别

  • scanner.next
package com.kuang.scanner;

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        //创建扫描器对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next接受:  ");
        //判断用户有没有输入字符串
        if(scanner.hasNext()==true){
            String str = scanner.next();
            System.out.println("输入的内容为:  "+str);
        }
        //用完scanner之后关掉,节省资源,凡是IO流
        scanner.close();
    }
}

fig1

  • scanner.nextLine
package com.kuang.scanner;

import java.sql.SQLOutput;
import java.util.Scanner;

public class Dome2 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next Line的方式接受");
        //判断是否还有输入
        if(scanner.hasNextLine()){
            String str =scanner.nextLine();
            System.out.println("输出的内容为:   "+str);
        }
        scanner.close();
    }
}

fig2

  1. next()输入有效字符后,将其后面的空白作为分割符或结束符,故next()不能得到带有空格的字符串。

  2. nextLine以Enter为结束符,nextLine()返回的是输入回车前的所有字符。

  • package com.kuang.scanner;
    
    import java.util.Scanner;
    
    public class Demo4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //从键盘接受数据
        int i = 0;
        float j = 0.0f;
        System.out.println("请输入整数: ");
        if(scanner.hasNextInt())
        {
            i = scanner.nextInt();
            System.out.println("整数数据:"+i);
        }else {
            System.out.println("您输入的不是整形数据");
        }
    
    //        scanner.close();
    //        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入小数: ");
        if(scanner.hasNextFloat())
        {
            j = scanner.nextFloat();
            System.out.println("小数数据:"+j);
        }else {
            System.out.println("您输入的不是小数数据");
        }
        scanner.close();
        //存疑。当整型错误输入时,直接跳过接下来的小数输入
    }
    }
    
    

引入DecimalFormat 类来控制输出小数点的位数

decimal: 1.十进制

​ 2.小数

package com.kuang.scanner;

import java.text.DecimalFormat;
import java.util.Scanner;

public class Demo5 {
    //输入多个数字,求和与平均数,每输入一个数字用回车确认,输入非数字来结束
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //引入类decimal控制输出的小数点位数,几位小数点后跟几个零
        DecimalFormat df = new DecimalFormat("0.00");
        // 和||求平均数用的计数
        double sum = 0;
        int m = 0;
        //通过hasNextDouble判断循环是否结束
        System.out.println("请输入数字:\n");
        while(scanner.hasNextDouble()){
            sum+=scanner.nextDouble();
            m++;
        }
        System.out.println(m+"个数的和为"+sum);
        System.out.println(m+"个数的平均值为"+df.format(sum/m));
    }
}

if/else 结构

package com.kuang.struct;

import java.util.Scanner;

public class Demo2_if_else {
    public static void main(String[] args) {
        System.out.println("Write down the score: ");
        Scanner scanner = new Scanner(System.in);
//        String str = scanner.nextLine();
        while (scanner.hasNextShort()){
            int score = scanner.nextInt();
            if (score == 100){
                System.out.println("Unbelieved");
            }else if (score >= 90 && score < 100){
                System.out.println("Amazing");
            }else if (score >= 80 && score < 90){
                System.out.println("Nice");
            }else if (score >= 70 && score < 80){
                System.out.println("Good");
            }else if (score >= 60 && score < 70){
                System.out.println("Survived");
            }else if (score < 60 && score >= 0){
                System.out.println("Dead");
            } else{
                System.out.println("False input, try again:");
            }
        }
        System.out.println("Are you kidding me?");
    }
}

switch case 多选择结构

基本结构

switch(expression){

case value :

eat();

break;

case value:

sleep

}switch(expression){

case value :

eat();

break;

case value:

sleep();
        
break;
        
default;        
}
package com.kuang.struct;

public class Demo3_switch {
    public static void main(String[] args) {
//         char grade = 'f';
         String name = "永仪时刻i";
         //jdk 1.7之后支持表达式匹配字符串
        //字符的本质还是数字 ''表示字符  ""表示字符串  .equal判断是否相等
        /**
         * 反编译  正常.java->.class
         * 直接project struct 里面找到class文件,用ide打开
         */
        //case穿透  不加break会剩下的case全部输出
        switch (name){
            case "sdf":
                System.out.println("A");
                break;
            case "永仪时刻i":
                System.out.println("bingo");
                break;
            default:
                System.out.println("unknown");
        }
    }
}

字节码.class文件

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.kuang.struct;

public class Demo3_switch {
    public Demo3_switch() {
    }

    public static void main(String[] args) {
        String name = "永仪时刻i";
        byte var3 = -1;
        switch(name.hashCode()) {
        case 113717:
            if (name.equals("sdf")) {
                var3 = 0;
            }
            break;
        case 442996498:
            if (name.equals("永仪时刻i")) {
                var3 = 1;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("A");
            break;
        case 1:
            System.out.println("bingo");
            break;
        default:
            System.out.println("unknown");
        }

    }
}

循环结构 while /do...while /for、

package com.kuang.struct;

public class Demo4_while {
    public static void main(String[] args) {
        //输出1~100
        int i = 0;
        int sum = 0;
        while ( i < 100){
            i++;
            sum += i;
//            System.out.println(i);
        }
        System.out.println(sum);
    }
}

package com.kuang.struct;

public class Demo4_dowhile {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0 ;
        do{
            i++;
            sum+=i;
        }while(i<100);
        System.out.println(sum);
    }
}

package com.kuang.struct;

public class Demo4_for {
    public static void main(String[] args) {
        int i;
        int sum;
        for (i = 0,sum=0 ; i <= 100 ; i++ )
        {
            sum += i;
        }
        System.out.println(sum);
    }
}

  • 区别:do...while 至少能保证被执行一次,while 则不然

odd 奇数 even 偶数

package com.kuang.struct;

public class Demo5_odd_even_sum {
    public static void main(String[] args) {
        int oddsum = 0;
        int evensum = 0;
        for (int i = 0; i <= 100; i++) {
            if(i%2 == 0){
                evensum += i;
            }else if(i%2 == 1)
                oddsum += i;
        }
        System.out.println("oddsum:"+oddsum);
        System.out.println("evensum:"+evensum);
    }
}

  • print 和println的区别:前置不换行,后者换行

package com.kuang.struct;

public class Demo5_5_1000 {
    public static void main(String[] args) {
        for (int i = 1; i <= 1000; i++) {
            if(i%5 == 0){
                //直接去掉ln,变为print,既不是自动换行了
                System.out.print(i+"\t");
            }
            if(i%15 == 0){
                System.out.println();
            }
        }
    }
}

  • multiplication 乘法

package com.kuang.struct;

public class Demo5_multiplication {
    public static void main(String[] args) {
        for (int i = 1 ;i <= 9 ; i++){
            for (int j = 1; j <= i ; j++){
                System.out.print( j+ "*"+ i+"="+j*i+ "\t");
            }
            System.out.println();
        }
    }
}

package com.kuang.struct;

public class Demo5_for_plus {
    public static void main(String[] args) {
        int[] number = {1,2,3,4,5};
        //遍历数组中的元素
       // for (int i = 0; i<5 ;i++)
       //     System.out.println(number[i]);
        for(int x:number)
            System.out.println(x);
    }
}

  • break continue 可以用于任何循环语句的主体部分

    • break强行退出,不执行剩余语句。
    package com.kuang.struct;
    
    public class Demo6_break {
        public static void main(String[] args) {
            for (int i = 0; i < 100; i++) {
                System.out.println(i);
                if(i == 40)
                    break;
            }
        }
    }
    
    
    • continue 用在循环语句中,用于终止某次循环过程,跳过循环体中未执行的语句,接着执行下一次是否循环的判定。
    package com.kuang.struct;
    
    public class Demo6_continue {
        public static void main(String[] args) {
            for (int i = 0; i < 100; i++) {
                if (i==6){
                    System.out.println("surivived!");
                    continue;
                }
                System.out.println(i);
            }
        }
    }
    
    
  • goto关键字: goto是java的一个保留字,但未在语言中得到使用,带标签的break和continue

    标签:后面跟一个冒号的标识符。eg:label:

    Java中唯一用到标签就是在循环语句之前,用处:嵌套循环

运算符的优先级:

Java流程控制练习题:打印三角形

package com.kuang.struct;

public class demo7_triangle {
   public static void main(String[] args) {
       //打印三角形 思路拆分成3部分(我居然还以为是4部分)
       //只设置了一个j,实现第2个和第3个for如循环
//        System.out.println("Please print the triangle");
       for (int i = 0; i < 5; i++) {
           for (int j = 5; j > i; j--) {
               System.out.print(" ");
           }
           for (int j = 0; j <= i-1; j++) {
               System.out.print("*");
           }
           for (int j = 0; j < i-1; j++) {
               System.out.print("*");
           }
           System.out.println();
       }
   }
}
posted @ 2021-02-24 09:50  诸葛蛋蛋  阅读(72)  评论(0)    收藏  举报