Day08:9个练习题(随机获得字母)+变量的批量修改

一:买飞机票

package com.it.test;
import java.util.Scanner;
public class Test1 {
    public static void main(String[] args) {
        //计算机票价格,输入机票原价,月份,头等舱或经济舱
        //按下面规则计算:旺季(5-10)头等舱9折,经济舱8.5折,淡季(11-4)头等舱7折,经济舱6.5折

        //1.输入机票价格,月份,头等舱或经济舱
        Scanner sc = new Scanner(System.in);

        //机票价格
        System.out.println("输入机票价格:");
        double price = sc.nextDouble();

        //月份
        System.out.println("输入月份:");
        int month = sc.nextInt();

        //经济舱-头等舱
        System.out.println("输入仓位");
        String location = sc.next();

        //2.计算价格
        double price_out = 0;
        if (month<=10 && month>=5) {
            if (location == "头等舱") {
                price_out = 0.9 * price;
            } else {
                price_out = 8.5 * price;
            }
        } else {
            if (location == "经济舱") {
                price_out = 0.7 * price;
            } else {
                price_out = 0.65 *price;
            }
        }

        //3.输出价格
        System.out.println(price_out);

    }
}

二:找质数

package com.it.test;

public class Test2 {
    public static void main(String[] args) {
        //判断101-200之间有多少素数,

        //思路:判断能否被2-9整除
        //定义变量i,赋值为100,开始循环
        int count = 0;
        for (int i=101 ; i<=200 ; i++) {
            if (dec(i)) {
                System.out.println("当前的数字"+i+"是质数");
                count++ ;
            }
        }

        System.out.println("101到200之间有"+count+"个质数");
    }

    public static boolean dec(int x) {
        //定义boolean
        boolean flag = true;
        for (int i=2 ; i <x ; i++) {
            if (x%i == 0) {
                flag = false;
                break;
            }
        }

        return flag;
    }
}

三:开发验证码

AT1如果我们需要在一堆没什么规律的数据中随机抽取,可以先把这些数据放在数组里面,在随机抽一个索引。

AT2:字母可以通过强制转换数字而得到,如:char ch = (char) (97+1)    ->    ch = 'b'

package com.it.test;

import java.util.Random;

public class Test3 {
    public static void main(String[] args) {
        //开发验证码,定义方法实现随机产生一个5位的验证码
        //验证码格式:1:长度为5   2:前四位是大写字母或者是小写字母   3:最后一位是数字

        //1.大写字母和小写字母都放在一个数组里面
        char chs [] = new char[52];

        for (int i=0 ; i<52 ; i++) {
            if (i <=25 ) {
                chs[i] = (char)(97+i);
            } else {
                chs[i] = (char)(65+i-26);
            }
        }


        //2.随机抽取4次
        Random r = new Random();

        //定义字符串记录变量
        String str = "";

        for (int i=0 ; i<4 ; i++){
            int randomIndex = r.nextInt(52);    //随机抽取索引
            str += chs[randomIndex];            //找到对应的字母拼接在字符串上
        }

        //3.随机抽取一个数字0-9
        int number = r.nextInt(10);
        str += number;

        System.out.println(str);
    }
}

四:数组元素的复制

package com.it.test;

public class Test4 {
    public static void main(String[] args) {
        //把老数组中的元素赋值到新数组中

        //1.定义老数组
        int [] arr = {1,2,3,4,5,6,7};

        //2.定义新数组和老数组等长
        int [] newarr = new int [arr.length];

        //3.遍历数组,将把老数组中的元素赋值到新数组中
        for (int i = 0; i < newarr.length; i++) {
            newarr[i] = arr[i];
        }

        for (int i = 0; i < newarr.length; i++) {
            System.out.println(newarr[i]);
        }

    }
}

五:评委打分

package com.it.test;

import java.util.Random;

public class Test5 {
    public static void main(String[] args) {
        //在比赛中,6个评委打分,范围0-100
        //选手最后得分为去掉最大和最小的剩下四个的平均分

        //1.定义数组,存储6个分数
        int [] arr  = new int [6];
        Random r = new Random();

        for (int i = 0; i < arr.length; i++) {
            arr[i] = r.nextInt(101);
            System.out.println("第"+i+"个数字是"+arr[i]);
        }

        //2.去掉最大值和最小值
        int maxIndex = 0;
        int minIndex = 0;

        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > arr[maxIndex]) {
                maxIndex = i;
            } else if (arr[i] < arr[minIndex]) {
                minIndex = i;
            }
        }

        //3.求平均数
        int average = 0;
        for (int i = 0; i < arr.length; i++) {
            if ((i != minIndex) && (i !=maxIndex)) {
                average += arr[i];
            }
        }

        average /= 4;
        System.out.println(average);
    }
}

六:数字加密和解密

package com.it.test;

public class Test6 {
    public static void main(String[] args) {
        //对某个数字进行加密
        /*规则如下:1.对每位数字加五
                  2.对十求余
                  3.将所有数字反转
        *
        * */
        int num = 12;

        //1.把数字里的每一位放在数组中
        int [] arr = numToArray(num);

        //2.对每一位计算
        arr = numCompute(arr);

        //3.反转数组中的数字
        arr = arrConverse(arr);

        //4.数组元素组成数字
        num = arrToNum(arr);
        System.out.println(num);
    }

    //把数字放在数组中
    public static int [] numToArray (int num) {

        int num0 = num;
        //先计算输入数字的位数
        int num_len = 0;

        while (num != 0) {
            num_len ++;
            num = num/10;
        }

        //动态初始化数组
        int arr [] = new int[num_len];

        //将数字存在数组中
        int numLast = 0;    //存放数字最后一位
        for (int i = 0; i < arr.length; i++) {
            numLast = num0 % 10;
            arr[arr.length - 1 - i] = numLast;
            num0 = num0/10;
        }

        return arr;
    }

    //对每一位计算
    public static int [] numCompute (int arr []) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (arr[i] + 5) % 10 ;
        }
        return arr;
    }

    //对数组取反
    public static int [] arrConverse (int arr[]) {
        int arr_cov [] = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arr_cov [arr.length-i-1] = arr[i];
        }
        return arr_cov;
    }

    //拼接数组中的数字
    public static int arrToNum (int arr[]) {
        int num = 0;
        for (int i = 0; i < arr.length; i++) {
            num = num * 10 + arr[i];
        }
        return num;
    }
}

ps:变量的批量修改

        先选中变量x,在按shift+F6,再修改变量,可以同时修改所有同名变量。

七:抽奖的实现

package com.it.test;

import java.util.Random;

public class Test7 {
    public static void main(String[] args) {
        //需求:直播抽奖,奖金为现金红包,金额有{2,588,888,1000,10000}
        //用代码模拟抽奖,打印每次抽到的奖项

        //1.定义奖池并打乱奖池中的金额顺序
        int [] arr = {2,588,888,1000,10000};

        Random r = new Random();
        int randomIndex = 0;
        int tep = 0;

        for (int i = 0; i < arr.length; i++) {
            //获得随机索引
            randomIndex = r.nextInt(arr.length);

            //将获得的索引和当前索引中的元素交换
            tep = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = tep;
        }

        //2.遍历奖池,从0索引开始
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]+"元的奖金被抽出");
        }
    }
}

八:双色球系统

package com.it.test;

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

public class Test8 {
    public static void main(String[] args) {
        //1.生成中奖号码  6个红球 1个蓝球 红球从1-33中选 蓝球从1-16中选
        int arr[] = createNumber();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        //2.用户输入号码
        int arrUser [] = userInput();

        //3.判断中奖金额
        int num = getNum(arr,arrUser);
        System.out.println(num);
    }

    //函数1:生成中奖号码
    public static int [] createNumber () {
        //定义中奖数组
        int arr [] = new int [7];

        //随机抽取数字
        Random r = new Random();

        //抽取前6个数字
        for (int i = 0; i < arr.length-1;) {
            int num = r.nextInt(33)+1;
            boolean flag = contains(arr,num);
            if (flag) {
                arr[i] = num;
                i++;
            }
        }

        //抽最后一个蓝色球
        arr[6] = r.nextInt(16) + 1 ;
        return arr;
    }

    //函数2:判断号码是否重复
    public static boolean contains (int arr[] , int num) {
        for (int i = 0; i < arr.length; i++) {
            if (num==arr[i]){
                return false;
            }
        }
        return true;
    }

    //函数3:用户输入号码
    public static int [] userInput(){
        Scanner sc = new Scanner(System.in);

        //定义用户输入数组
        int arr[] = new int [7];

        //输入前6个红色球号码
        for (int i = 0; i < arr.length-1;) {
            //输入第i个号码
            System.out.println("请输入第" + (i+1) + "个号码");
            int num = sc.nextInt();

            //判断输入是否正确
            if (num>=1 && num<=33){
                //判断是否重复
                boolean flag = contains(arr,num);

                if (!flag) {
                    //重复则报错
                    System.out.println("输入数字重复");
                } else {
                    //不重复则赋值 i++
                    arr[i] = num;
                    i++;
                }
            } else {
                System.out.println("输入数字超出范围,请重新输入");
            }

        }

        //输入最后一个蓝色球号码
        System.out.println("请输入第7位数字");
        arr[6] = sc.nextInt();

        return arr;
    }

    //函数4:判断用户中奖金额
    public static int getNum(int [] arr1 , int [] arr2){
        //定义红色和蓝色的计数值
        int redCount = 0;
        int buleCount = 0;

        //计算红色计数值
        for (int i = 0; i < arr2.length-1; i++) {
            for (int i1 = 0; i1 < arr1.length; i1++) {
                //如果用户号码中的值在中奖号码中有,则红色计数++
                if (arr2[i] == arr1[i1]) {
                    redCount++;
                    break;
                }
            }
        }

        //计算蓝色计数值
        for (int i = 0; i < arr1.length; i++) {
            if (arr2[6] == arr1[i]){
                buleCount++;
                break;
            }
        }
        return redCount+buleCount;
    }
}

九:二维数组

      1.二维数组的静态初始化:

        数据类型 [][] 数组名 = new 数据类型 [][] { {元素1,元素2} {元素1,元素2} };

        简化格式:数据类型 [][] 数组名 = { {元素1,元素2} , {元素1,元素2} };

        eg:int [][] arr = { {11,22} , {33,44} };

        建议格式:int [][] arr = {

                                 {1,2,3},

                                 {4,5,6,7,8} 

                          }                                //二维数组分开定义,为了代码可读性

      2.获取元素

        arr [0] = I@119d7047               //这里打印出来的是二维数组中第一个数组的地址值

        arr [0][0] = 1                             //这里打印的是二维数组00位置的值

      3.二维数组的动态初始化

        格式:数据类型 [][] 数组名 = new 数据类型 [m][n];

        eg:int [][] arr = new int [2][3];

      4.二维数组的内存图

     5.生成特殊的二维数组

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值