YangeIT大约 6 分钟

代码题1

定义方法获取一个整数数组,该数组要求:

  1. 长度为6
  2. 数组中的数字为范围1到100的随机数
  3. 要求随机数不能重复

public class TaskPlus5 {


    public static void main(String[] args) {
        int[] randomArr = getRandomArr();
        printArr(randomArr);
    }
    
    /**
     * 需求:java 定义方法获取一个整数数组,该数组要求:
     * 1. 长度为6
     * 2. 数组中的数字为范围1到100的随机数
     * 3. 要求随机数不能重复
     */
    public static int[] getRandomArr() {
        // 定义一个长度为6的空数组
        int[] ints = new int[6];
        // 定义一个计数变量,每插入一个不重复的数,就+1
        int count = 0;
        // 定义一个获得随机数的对象
        Random random = new Random();

        //开启一个死循环,不断的往ints插入数据,直到插满不重复的数据为止
        while (true) {
            //获得随机数
            int rn = random.nextInt(100) + 1;
            //判断随机数rn是否在 ints中,如果在就返回true 不在就返回false
            if (!exist(rn, ints)) {
                //数组中不存在rn随机数,插入
                ints[count] = rn;
                count++;
            }
            if (count == ints.length) {
                break;
            }
        }
        return ints;
    }

    /**
     * 判断一个数是否存在于某个数组中,如果存在返回true,否则返回false
     *
     * @param in
     * @param arr
     * @return
     */
    public static boolean exist(int in, int[] arr) {

        //遍历数组
        for (int i1 = 0; i1 < arr.length; i1++) {
            //获得数组中的元素
            if (in == arr[i1]) {
                return true;
            }
        }


        return false;
    }

    /**
     * 按照 [元素1,元素2,...]的格式打印int数组
     *
     * @param arr
     */
    public static void printArr(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //如果索引是最后一个值的时候,不需要加,
            if (i == arr.length - 1) {
                System.out.print(arr[i]);
            } else {
                //如果索引不是最后的,每次需要加一个,
                System.out.print(arr[i] + ",");
            }
        }
        System.out.print("]");
    }

}

代码题2

验证码是很多网站登录时需要输入的,一般由 数字和字母组成,现在需要一个4位的验证码字符串,如:23ad、abc3、4opd等

请定义一个方法,利用字符数组和字符串拼接符+ 生成一个4位的随机验证码,并且在主方法main中打印出来。

public class TaskPlus5 {


    public static void main(String[] args) {
        //生成6个验证码
        for (int i = 0; i < 6; i++) {
            String code = generateVerificationCode();
            System.out.println("验证码:" + code);
        }
    }

    /**
     * 生成验证码
     *
     * @return
     */
    public static String generateVerificationCode() {
        // 定义字符数组包含数字和字母
        char[] characters = {
                '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'
        };
        // 创建一个Random对象用于生成随机索引
        Random random = new Random();

        // 生成4位随机验证码
        String verificationCode = "";
        for (int i = 0; i < 4; i++) {
            // 随机选择字符数组中的一个字符
            char randomChar = characters[random.nextInt(characters.length)];

            // 将随机字符添加到验证码字符串
            verificationCode = verificationCode + randomChar;
        }

        return verificationCode;
    }

}

代码题3

个大V直播时发起了抢红包活动,分别有:9、666、188、520、99999五个红包。请模拟粉丝来抽奖,按照先来先得随机抽取,抽完即止,

注意:一个红包只能被抽一次,先抽或后抽哪一个红包是随机的,示例如下(不一定是下面的顺序)


/**
 * 模拟大V发红包
 */
public class RedPacketSimulation {

    public static void main(String[] args) {
        //红包池
        int[] redPackets = {9, 666, 188, 520, 99999};
        //已经抽到的结果(粉丝1-粉丝length号成员的红包金额)
        int[] results = new int[redPackets.length];

        //模拟抽奖
        simulateFansDrawing(redPackets, results);

        // 打印抽奖结果
        for (int i = 0; i < results.length; i++) {
            System.out.println("粉丝" + (i + 1) + "抢到红包:" + results[i]);
        }
    }

    /**
     * 模拟抽奖
     * @param redPackets 红包池
     * @param results 已经抽到的结果池
     */
    public static void simulateFansDrawing(int[] redPackets, int[] results) {

        Random random = new Random();

        for (int i = 0; i < redPackets.length; i++) {
            // 随机选择一个粉丝来抢红包
            int fanIndex = random.nextInt(results.length);

            // 判断该粉丝是否已经抽到过红包,如果抽到过则重新选择粉丝
            while (results[fanIndex] != 0) {
                fanIndex = random.nextInt(results.length);
            }

            // 将红包分给选中的粉丝
            results[fanIndex] = redPackets[i];
        }
    }
}

代码题4(选做题)

代码题5 (选做题)

某程序员从网页中获取了一些字符串类型的QQ号码存入了字符串数组中,但忘记了做数字长度校验,如下["1236", "1234", "12345", "654123", "456789123", "1112222333444", "555a555","0662854" ]。QQ的长度只有5-12位才是有效号码,并且里面都是数字,第一位也不能为0。很显然有一些非法数据。请定义方法判断QQ号码是否正确,并实现过滤掉不合法的qq号码,并将合法数据遍历输出,输出的格式:["456789123","555a555","0662854" ]


public class QQNumberValidator {

    public static void main(String[] args) {
        String[] qqNumbers = {"1236", "1234", "12345", "654123", "456789123", "1112222333444", "555a555", "0662854"};

        String[] validQQNumbers = filterValidQQNumbers(qqNumbers);

        // 输出合法的QQ号码
        System.out.print("[");
        for (int i = 0; i < validQQNumbers.length; i++) {
            System.out.print(validQQNumbers[i]);
            if (i < validQQNumbers.length - 1) {
                System.out.print(", ");
            }
        }
        System.out.println("]");
    }

    /**
     * 传入一个字符串qq号码数组,返回合法的qq号码
     * @param qqNumbers
     * @return
     */
    public static String[] filterValidQQNumbers(String[] qqNumbers) {
        // 定义变量 记录合法qq号的数量
        int validCount = 0;

        // 遍历一次计算合法QQ号码的数量
        for (int i = 0; i < qqNumbers.length; i++) {
            if (isValidQQNumber(qqNumbers[i])) {
                validCount++;
            }
        }


        // 创建一个数组存储合法的QQ号码
        String[] validQQNumbers = new String[validCount];
        int index = 0;


        // 遍历第二次将合法QQ号码放入数组
        for (int i = 0; i < qqNumbers.length; i++) {
            if (isValidQQNumber(qqNumbers[i])) {
                validQQNumbers[index++] = qqNumbers[i];
            }
        }

        return validQQNumbers;
    }

    /**
     * 判断一个号码是否合法
     * @param qqNumber
     * @return
     */
    public static boolean isValidQQNumber(String qqNumber) {
        // QQ号码长度在5到12之间,且只包含数字,第一位不能为0
        if (qqNumber.length() >= 5 && qqNumber.length() <= 12 && qqNumber.charAt(0) != '0') {
            //利用循环 判断qq号是否含有数字
            for (int i = 0; i < qqNumber.length(); i++) {
                if (!Character.isDigit(qqNumber.charAt(i))) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }
}

代码题6(选做题)

小李用自己的钱买了十只股票,年末他看了各只股票的收益分别是百分之: 10.4,-3,-6.2,1.2,-6.1,-19,-3.8,0.9,-4.5,5.5 。

请使用数组相关知识编程,帮他统计赚钱的股票和赔钱的股票分别有多少只?

打印效果如下:

1.赚钱的股票一共有:4只 2.赔钱的股票一共有:6只

代码题7(选做题)

请设计一个程序,可以根据城市和距离计算出打车的费用。

需求:

创建一个字符串数组,其中有"北京", "上海", "广州"三个城市。在数组中随机获取一个城市,并根据随机出的城市获取到他们的起步价startingPrice。

  • 北京的起步价10
  • 上海的起步价15
  • 广州的起步价20(价格为虚构)。

需求1:打印各个的城市以及起步价。

需求2:键盘录入车程,计算总费用并打印。

车费计算公式:

  • 起步2公里以内(包含2公里)打车的费用为该城市的起步价。
  • 超过2公里的部分按照每公里3元计算。