用户交互Scanner

Scanner对象

  • java.util.Scanner Java1.5的新特性
  • 通过人与机器交互,使用Scanner对象接收用户输入
  • 使用sc.hasNextXXX() 判断用户还有没有输入对应类型的数据
  • 使用sc.nextXXX() 获取对应类型数据
  • hashXXX都是用于判断输入了什么类型数据,nextXXX都是为了接收对应类型数据
  • next() 以空格作为结束符 nextLine() 以回车作为结束符

    package cn.allms.base.processcontrol;
    
    import java.util.Scanner;
    
    /**
     * 人机交互
     */
    public class Scanner04 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int num;
            float floatNum;
            System.out.println("接收整数");
            if (scanner.hasNextInt()) {
                num = scanner.nextInt();
                System.out.println("整数" + num);
            } else {
                System.out.println("哈哈,你输入的不是整数");
            }
            System.out.println("接收小数");
            try{
                // 重新拿到数据 否则 上面为false后 下面不会再接收输入
                scanner = new Scanner(System.in);
                if (scanner.hasNextFloat()) {
                    floatNum = scanner.nextFloat();
                    System.out.println("小数" + floatNum);
                } else {
                    System.out.println("哈哈,你输入的不是小数");
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            // 关闭IO
            scanner.close();
        }
    }
    
package cn.allms.base.processcontrol;

import java.util.Scanner;

/**
 * 人机交互-求和-平均数
 */
public class Scanner05 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 和
        double sum = 0;
        // 输入的总格式
        int m = 0;
        System.out.println("请输入数据");
        while (scanner.hasNextDouble()) {
            double v = scanner.nextDouble();
            //个数
            m++;
            // 求和
            sum += v;
        }
        System.out.println(m + "个数据的和为:" + sum);
        System.out.println(m + "个数据的平均数为:" + (sum / m));
        // 关闭IO
        scanner.close();
    }
}

顺序结构

特点:从上而下,一句一句执行,依次执行,是最简单的

/**
 * 顺序结构:按照顺序打印1到5
 */
public class Sequence {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
        System.out.println(5);
    }
}

选择结构

特点:按照开发者的意图去选择要执行哪块代码

  • if

    package cn.allms.base.processcontrol;
    
    import java.util.Scanner;
    
    /**
     * 选择结构01-输入合理的分数
     * if
     */
    public class Choose01 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入分数");
            if (scanner.hasNextDouble()) {
                System.out.println("你输入的分数是:" + scanner.nextDouble());
            }
             System.out.println("END!");
        }
    }
    
  • if ... else ..

    package cn.allms.base.processcontrol;
    
    import java.util.Scanner;
    
    /**
     * 选择结构01-输入合理的分数02
     * if
     */
    public class Choose01 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入分数");
            if (scanner.hasNextDouble()) {
                System.out.println("你输入的分数是:" + scanner.nextDouble());
            } else {
                System.out.println("你输入的值不合法");
            }
        }
    }
  • if ...else if...

    package cn.allms.base.processcontrol;
    
    import java.util.Scanner;
    
    /**
     * 选择结构01-判断优良中差
     * 超凡 100
     * 优秀 90-100
     * 良好 80-90
     * 中等 60-80
     * 差等 10-60
     * 特差 0-10
     */
    public class Choose02 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入有效分数");
            if (scanner.hasNextFloat()) {
                float score = scanner.nextFloat();
                if (score == 100) {
                    System.out.println("超凡");
                } else if (score < 100 && score >= 90) {
                    System.out.println("优秀");
                } else if (score < 90 && score >= 80) {
                    System.out.println("良好");
                } else if (score < 80 && score >= 60) {
                    System.out.println("及格");
                } else if (score < 60 && score >= 10) {
                    System.out.println("差等");
                } else if (score < 10 && score >= 0) {
                    System.out.println("特差");
                } 
                // 这里没有else 若不满足情况 则不处理,在开发中建议使用上else,容易定位问题
            } else {
                System.out.println("你输入的值不合法");
            }
            // 关闭IO
            scanner.close();
        }
    }
    
  • if ... else if ... else ...

    package cn.allms.base.processcontrol;
    
    import java.util.Scanner;
    
    /**
     * 选择结构01-判断优良中差
     * 超凡 100
     * 优秀 90-100
     * 良好 80-90
     * 中等 60-80
     * 差等 10-60
     * 特差 0-10
     */
    public class Choose02 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入有效分数");
            if (scanner.hasNextFloat()) {
                float score = scanner.nextFloat();
                if (score == 100) {
                    System.out.println("超凡");
                } else if (score < 100 && score >= 90) {
                    System.out.println("优秀");
                } else if (score < 90 && score >= 80) {
                    System.out.println("良好");
                } else if (score < 80 && score >= 60) {
                    System.out.println("及格");
                } else if (score < 60 && score >= 10) {
                    System.out.println("差等");
                } else if (score < 10 && score >= 0) {
                    System.out.println("特差");
                } else {
                    System.out.println("分数异常,你的分数为" + score);
                }
            } else {
                System.out.println("你输入的值不合法");
            }
            // 关闭IO
            scanner.close();
        }
    }
    
    • switch(..)case ..: .. break;default:..

      package cn.allms.base.processcontrol;
      
      
      import java.util.Arrays;
      
      /**
       * 条件控制 switch
       */
      public class Switch01 {
          public static void main(String[] args) {
             int[] array = new int[]{1,2,4};
              for (int i = 0; i < array.length; i++) {
                  switch (array[i]){
                      case 1:
                          System.out.println("A");
                          break;
                      case 4:
                          System.out.println("B");
                          break;
                      case 2:
                          System.out.println("C");
                          break;
                      default:
                          System.out.println("你弄啥嘞!");
                  }
              }
              System.out.println("=============================");
              String name = "亚哥";
              // jdk7 新特性 switch支持字符串
              switch (name){
                  case "亚哥":
                      System.out.println("亚哥");
                      break;
                  case "小之":
                      System.out.println("小之");
                      break;
                  default:
                      System.out.println("你弄啥嘞!");
              }
              System.out.println("===========1.7底层调用了对象的HashCode()=============");
              int var = -1;
              switch (name.hashCode()){
                  case 941788:
                      var = 1;
                      break;
                  case 123456:
                      var = 0;
                      break;
                  default:
                      var = 2;
              }
              switch (var){
                  case 0:
                      System.out.println("亚哥");
                      break;
                  case 1:
                      System.out.println("小之");
                      break;
                  default:
                      System.out.println("你弄啥嘞!");
              }
          }
      }
      

 循环结构

特点:按照条件执行对应的代码块,直到条件不成立

  • while 与 do while
  • do while 与while本质区别就是do while 只是会执行一遍
  • while 本质上就是一个for循环,可以使用idea查看反编译文件

    package cn.allms.base.processcontrol;
    
    /**
     * 循环结构
     */
    public class WhileDemo {
        public static void main(String[] args) {
            int loveCode = 0;
            while (loveCode != 520) {
                System.out.println("我爱你" + loveCode);
                ++loveCode;
            }
            System.out.println("===========================");
            int dislike = 0;
            do {
                System.out.println("我恨你" + dislike);
                dislike++;
            } while (dislike != 520);
            System.out.println("===========================");
            System.out.println("爱你" + loveCode);
            System.out.println("恨你" + dislike);
        }
    }
    
  • for 与 增强的for

    package cn.allms.base.processcontrol;
    
    /**
     * 循环结构 for
     */
    public class ForDemo {
        public static void main(String[] args) {
            int odd=0,even=0;
            /*计算1~100间的奇数和和偶数和*/
            for (int i = 0; i <= 100; i++) {
                if (i%2 == 0){
                    // 偶数和
                    even+=i;
                }else{
                    // 奇数和
                    odd+=i;
                }
            }
            System.out.println("奇数和"+odd);
            System.out.println("偶数和"+even);
            for (int i = 0; i <= 1000; i++) {
                if (i%5 == 0){
                    // 一行输出
                    System.out.print(i+"\t");
                }
                if (i%15 == 0){
                    System.out.print("\n");
                }
            }
            System.out.println();
            /*=======================*/
            int[] arr = new int[]{1,2,3};
            // 增强for循环
            for (int  a: arr) {
                switch (a){
                    case 3:
                        System.out.println("玩大了");
                        break;
                    default:
                        System.out.println(a);
                }
    
            }
        }
    }
    

 break & continue

  • break 用在switch 和循环中 用于终止循环
  • continue用于终止某次循环,会继续执行下一次循环

    package cn.allms.base.processcontrol;
    
    /**
     * 跳出循环
     */
    public class ContinueAndBreak {
        public static void main(String[] args) {
            int sum =0;
            for (int i = 0; i <= 10; i++) {
                if(i%2 == 0){
                    // 0 2 4 6 8 10
                    continue;
                }
                if (i == 9){
                    break;
                }
                // 1 3 5 7
                sum+=i; // 16
            }
            System.out.println(sum);
        }
    }
    

进阶

/**
 * java tags demo
 * 求素数 100~1000
 */
public class OuterTagsDemo {
    public static void main(String[] args) {
        outer:
        for (int i = 100; i <= 1000; i++) {
            for (int j = 2; j < i / 2; j++) {
                if (i % j == 0) {
                    continue outer;
                }
            }
            System.out.print(i+"\t");
        }
    }
}