Java阶段一Day07

时间:2021-03-20 01:15:42

Java阶段一Day07

培养编程思维能力

几个小案例

猜数字

package com.liner;

import java.util.Random;
import java.util.Scanner;

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

        System.out.println("欢迎来到猜一猜");
        System.out.println("系统随机数字中...");
        int random = rand.nextInt(100);
       /* do {
            System.out.print("请输入所猜数字:");
            int num = scanner.nextInt();
            if (num == random) {
                System.out.println("恭喜你猜对了");
                break;
            } else if (num > random) {
                System.out.println("猜大了");
            } else {
                System.out.println("猜小了");
            }
        } while (true);
        */

        int count = 10;
        while(true){
            System.out.print("请输入所猜数字(您只有10次机会):");
            int num = scanner.nextInt();
            if (num == random) {
                System.out.println("恭喜你猜对了");
                count--;
                System.out.println("本次作答使用机会" + (10-count) + "次");
                break;
            } else if (num > random) {
                System.out.println("猜大了");
                count--;
                System.out.println("还剩"+ count + "次机会");
            } else {
                System.out.println("猜小了");
                count--;
                System.out.println("还剩"+ count + "次机会");
            }
            if (count == 0) {
                System.out.println("机会用尽,请下次再来");
                break;
            }

        }

    }
}

验证码

package com.liner;

import java.util.Random;
import java.util.Scanner;

public class VerificationCode {


    public static void main(String[] args) {
        /*
         * 随机生成 N位 验证码  包含 大写字母、小写字母、数字
         *
         */


        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入生成验证码位数:");
        int num = scanner.nextInt();
        String code = verCode(num);
        System.out.println(code);
        System.out.print("请输入验证码:");
        String verCode = scanner.next();

        if (verCode.equalsIgnoreCase(code)) {
            System.out.println("验证码正确");
        }else {
            System.out.println("验证码错误");
        }


       /* System.out.print("请输入验证码:");
        String code1 = generateVeriCode(num);
        System.out.println(code1);*/

    }

    /**
     * 生成 N位 验证码
     *
     * @param len
     * @return
     */

    public static String verCode(int len) {
        String code = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrlstuvwxyz";
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < len; i++) {
            int index = (int) (Math.random() * code.length());
            sb.append(code.charAt(index));
        }
        return sb.toString();
    }


    /**
     * 验证码 可选范围
     *
     * @param len
     * @return
     */
    public static String generateVeriCode(int len) {
        Random random = new Random();
        String code = "";
        char[] chars = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
                'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
                'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        //验证码字符可选范围
        for (int i = 0; i < len; i++) {
            int index = random.nextInt(chars.length); //0到61
            code += chars[index];
        }
        return code;
    }

}

素数

package com.liner;

import java.util.Scanner;

public class PrimeNumber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        /*
         * 找到 2 到 100 内的所有 素数
         * 除 1 和 本身 外,不能被其他任何自然数整除
         * */


        System.out.println("输出2~100之间的素数:");
        for (int i = 2; i <=100 ; i++) {
            boolean flag = true;
            prime(i, flag);
        }

        System.out.print("\n请输入一个数判断是否为质数:");
        int num = scanner.nextInt();
        for (int i = 2; i < num; i++) {
             if (num % i == 0) {
                System.out.println(num + "不是质数 ");
                break;
            }

        }
    }


    /**
     * 判断质数
     */
    private static void prime(int num, boolean flag) {
        for (int i = 2; i <= num/2; i++) {
            if (num % i == 0) {
                flag = false;
                break;
            }
        }
        if (flag) {
            System.out.print(num + "\t");
        }
    }
}

打折

package com.liner;

import java.util.Scanner;

public class CalAirPrice {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        /*
         * 机票价格 按照  淡季、旺季 舱位收费 :  头等舱、商务舱、经济舱
         *  输入 机票原价、月份、舱位    实现不同的折扣
         *  旺季:5~10   头等舱:9折 商务舱:8.5折  经济舱:8折
         *  淡季 11~4    头等舱:7折 商务舱:6.5折  经济舱:6折
         *
         * */

        System.out.println("欢迎使用东方航空订票系统:");
        System.out.print("请输入机票原价:");
        if (scanner.hasNextInt()) {
            int price = scanner.nextInt();
            System.out.print("请输入当前月份:");
            int month = scanner.nextInt();
            System.out.print("请输入预选舱位:(1.头等舱、2.商务舱、3.经济舱)");
            int type = scanner.nextInt();

            double finalPrice = calFinalPrice(price, month, type);
            if (finalPrice != -1) {
                System.out.println("订票成功,所花费" + finalPrice + "元");
            }
        } else {
            System.out.println("请输入正确字符");
        }
    }

    private static double calFinalPrice(double price, int month, int type) {
        double finalPrice;
        if (price < 0) {
            System.out.println("请输入正确价格");
            return -1;
        }
        if (month < 1 || month > 12) {
            System.out.println("请输入正确月份");
            return -1;
        }
        if (type < 1 || type > 3) {
            System.out.println("请输入正确舱位");
            return -1;
        }

        if (month >= 5 && month <= 10) {
            //旺季
            switch (type) {
                case 1:
                    finalPrice = price * 0.9;
                    break;
                case 2:
                    finalPrice = price * 0.85;
                    break;
                default:
                    finalPrice = price * 0.8;
            }

        } else {
            //淡季
            switch (type) {
                case 1:
                    finalPrice = price * 0.7;
                    break;
                case 2:
                    finalPrice = price * 0.65;
                    break;
                default:
                    finalPrice = price * 0.6;
            }
        }
        return finalPrice;
    }


}

总分、平均分

package com.liner;

import java.util.Arrays;
import java.util.Scanner;

public class CalTotalAvg {
    static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        /*
         * 《主持人大赛》  有6名评委给选手打分
         *  分数范围 0~100
         *  选手最高得分为:   去掉最高分,去掉最低分  求剩余平均分
         */

        System.out.print("请输入本场有几位评委:");
        int count = scanner.nextInt();
        double[] scores = inputData(count);

        double avg = calAvg(scores);
        System.out.println("本场平均分为:" + avg);
    }

    /**
     * 控制台输出评委打分
     */
    public static double[] inputData(int count) {

        double[] scores = new double[count];
        for (int i = 0; i < count; i++) {
            System.out.print("第" + (i + 1) + "位评委的打分为:");
            scores[i] = scanner.nextDouble();
            if (scores[i] < 0 || scores[i] > 100) {
                System.out.println("请输入0~100区间的分数");
                break;
            }
        }
        return scores;
    }

    /**
     * 算出平均分
     */
    public static double calAvg(double[] scores) {
        double sum = calTotal(scores);
        //算出平均分
        return sum / (scores.length - 2);
    }

    /**
     * 算出总分
     */
    private static double calTotal(double[] scores) {
        double sum = 0;
        //数组升序排序
        Arrays.sort(scores);
        //取出去掉一个最高分去掉一个最低分
        for (int i = 1; i < scores.length - 1; i++) {
            sum += scores[i];
        }
        return sum;
    }

}

总结咨询 ————如何有效学习Java

Java基础必备知识点

  • 变量、基本数据类型、运算符
  • 程序结构:顺序、分支、循环
  • 基本类型数组、方法

学习方法介绍

  • 课上认真听讲、切记一边听课一边敲代码,不专心
  • 让练习时使劲练,越多越好
  • 在课上尽量多的吸收知识,晚上应该是复习和强化,不是从头开始学
  • 晚上作业最低两遍,没有最好,只有更好
  • 先模仿,再创造,先消化,再扩展
  • 不要总想看回放,注意效率
  • 学习循序渐进,温故知新

遇到问题高效解决方法

  • 寻求同桌、同学帮助
  • 找项目经理
  • 百度等网络资源

教师总结

回顾:

  1. 数组的复制:

    1)System.arraycopy(a,1,b,0,4);
    2)int[] b = Arrays.copyOf(a,6);
      a = Arrays.copyOf(a,a.length+1);
    
  2. 方法:

    • 封装一段特定的业务逻辑功能、只干一件事、反复多次调用、减少重复、有利于维护
    • 何时用:只要是一个独立的业务功能,就要把它封装到一个方法中
  3. 方法的定义:

    修饰词  返回值类型  方法名(参数列表){
        方法体----具体的业务逻辑功能实现
    }
    
  4. 方法的调用:

    • 无返回值:方法名(有参传参);

    • 有返回值:数据类型 变量 = 方法名(有参传参); //-------最常规的调用方式

      System.out.println( 方法名(有参传参) );  //返回值为基本类型时可以这样调
      
  5. return:

    • return 值; //1)结束方法的执行 2)返回结果给调用方
    • return; //1)结束方法的执行

精华笔记:

  1. 案例:------培养编程思维能力

笔记:

  1. 案例:------培养编程思维能力

    package day07;
    
    import java.util.Scanner;
    
    /**
     * 需求:猜数字小游戏
     * 训练目标: while(true)自造死循环+break
     */
    public class Guessing {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            int num = (int)(Math.random()*1000+1); //1到1000
            System.out.println(num); //作弊
    
            while(true){ //自造死循环
                System.out.println("猜吧!");
                int guess = scan.nextInt();
                if(guess>num){
                    System.out.println("猜大了");
                }else if(guess<num){
                    System.out.println("猜小了");
                }else{
                    System.out.println("恭喜你猜对了");
                    break; //跳出循环
                }
            }
        }
    }
    
    package day07;
    
    import java.util.Random;
    
    /**
     * 需求:随机生成N位验证码(大写字母、小写字母、数字)
     */
    public class VerificationCode {
        public static void main(String[] args) {
            String code = generateVeriCode(6);
            System.out.println("验证码:" + code);
        }
    
        /** 生成验证码 */
        public static String generateVeriCode(int len){
            String code = "";
            Random rand = new Random();
            char[] chs = {'a','b','c','d','e','f','g','h','i','j','k',
                    'l','m','n','o','p','q','r','s','t','u','v',
                    'w','x','y','z','A','B','C','D','E','F','G',
                    'H','I','J','K','L','M','N','O','P','Q','R',
                    'S','T','U','V','W','X','Y','Z','0','1','2',
                    '3','4','5','6','7','8','9'}; //验证码字符可选范围
            for(int i=1;i<=len;i++) { //len次
                int index = rand.nextInt(chs.length); //随机下标(0到61)
                code += chs[index]; //根据随机下标获取对应字符并拼接到code中
            }
            /*
                             code=""
              i=1  index=0   code="a"
              i=2  index=61  code="a9"
              i=3  index=25  code="a9z"
              i=4  index=28  code="a9zC"
              i=5
             */
            return code;
        }
    }
    
    package day07;
    
    /**
     * 需求:--------常见面试题
     *   找到2到100之间的所有素数(质数)
     *   素数:除了1和它本身外,不能被其它任何自然数整除的数----只能被1和它本身整除
     *   训练目标:通过boolean的flag打标记
     */
    public class PrimeNumber {
        public static void main(String[] args) {
            //带数(2/3/4/5/6/7/8)
            for(int num=2;num<=100;num++){
                boolean flag = true; //假设每个num都是true
                for(int i=2;i<=num/2;i++){
                    if(num%i==0){
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    System.out.print(num+"\t");
                }
            }
           
            /*
            // 7%2/3/4/5/6,但凡有1个为0的,就能说明它不是素数,只有都不为0的,才是素数
            int num = 7; //7,8,9,11
            boolean flag = true; //1)假设num是素数
            for(int i=2;i<=num/2;i++){ //i=2/3
                if(num%i==0){
                    flag = false; //2)修改num为不是素数
                    break;
                }
            }
            if(flag){ //3)判断flag标记
                System.out.println(num+"是素数");
            }else{
                System.out.println(num+"不是素数");
            }
             */
        }
    }
    
    package day07;
    
    import java.util.Scanner;
    
    /**
     * 需求:
     *   机票价格按照季节(淡季、旺季)、舱位(头等舱、商务舱、经济舱)收费
     * 要求:
     *   输入机票原价、月份和舱位,实现不同的折扣
     *   --旺季(5月到10月)时,头等舱9折,商务舱85折,经济舱8折
     *   --淡季(11月到来年4月)时,头等舱7折,商务舱65折,经济舱6折
     */
    public class CalAirPrice {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入机票原价:");
            double price = scan.nextDouble();
            System.out.println("请输入月份:");
            int month = scan.nextInt();
            System.out.println("请选择舱位: 1.头等舱 2.商务舱 3.经济舱");
            int type = scan.nextInt();
    
            double finalPrice = calFinalPrice(price,month,type);
            if(finalPrice!=-1){ //数据合法
                System.out.println("机票的最终价格为:"+finalPrice);
            }
        }
    
        /**
         * 根据原价、月份、舱位,计算飞机票的最终价格
         */
        public static double calFinalPrice(double price,int month,int type){
            double finalPrice = 0.0; //最终价格
            //只要数据输入错误,都统一返回-1
            if(price<0){
                System.out.println("机票原价输入错误");
                return -1;
            }
            if(month<1 || month>12){
                System.out.println("月份输入错误");
                return -1;
            }
            if(type<1 || type>3){
                System.out.println("舱位输入错误");
                return -1;
            }
    
            //程序能走到这,说明数据一定是合法的
            if(month>=5 && month<=10){ //旺季
                switch(type){ //根据舱位类型做不同折扣
                    case 1:
                        finalPrice = price*0.9;
                        break;
                    case 2:
                        finalPrice = price*0.85;
                        break;
                    case 3:
                        finalPrice = price*0.8;
                        break;
                }
            }else{ //淡季
                switch(type){ //根据舱位类型做不同折扣
                    case 1:
                        finalPrice = price*0.7;
                        break;
                    case 2:
                        finalPrice = price*0.65;
                        break;
                    case 3:
                        finalPrice = price*0.6;
                        break;
                }
            }
            return finalPrice;
        }
    }
    
    package day07;
    
    /**
     * 需求:
     *  《主持人大赛》有N名评委给选手打分,要求分数范围为0到100之间的浮点数
     *   选手的最终得分为: 去掉最高分和最低分后的N-2个评委的平均分
     * 训练目标: 方法的设计
     */
    public class CalTotalAvg {
        public static void main(String[] args) {
            double[] scores = inputData(6); //1)录入评委的评分
            double avg = calAvg(scores); //2)计算平均分
            System.out.println("平均分为:"+avg);
        }
    
        /**
         * 录入评委的评分
         */
        public static double[] inputData(int count){
            Scanner scan = new Scanner(System.in);
            double[] scores = new double[count]; //评分数组
            for(int i=0;i<scores.length;i++){
                System.out.println("请输入第"+(i+1)+"个评委的分数:");
                scores[i] = scan.nextDouble();
            }
            return scores;
        }
    
        /**
         * 计算平均分
         */
        public static double calAvg(double[] scores){
            double total = calTotal(scores); //获取去掉最高分和最低分之后的总分
            double avg = total/(scores.length-2); //平均分
            return avg;
        }
    
        /**
         * 计算去掉最高分和最低分后的总分
         */
        public static double calTotal(double[] scores){
            double total = 0.0;
            double max = scores[0]; //假设第1个元素为最大值
            double min = scores[0]; //假设第2个元素为最小值
            for(int i=0;i<scores.length;i++){
                if(scores[i]>max){ //找最大值
                    max = scores[i];
                }
                if(scores[i]<min){ //找最小值
                    min = scores[i];
                }
                total += scores[i]; //计算总分
            }
            return total-max-min; //返回去掉最高分和最低分之后的总分
        }
    }
    

补充:

  1. 方法的签名:方法名+参数列表

  2. 明日单词:

    1)Student:学生
    2)className:班级名称
    3)stuId:学号
    4)study:学习
    5)play:6)another:另一个
    7)Car:小汽车
    8)brand:品牌
    9)color:颜色
    10)price:价格
    11)start:开始、启动
    12)run:13)stop:停止