Java练习(三)

1.卖飞机票
需求:
机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

思路:
首先依次输入前置条件并注意判断边界
利用分支结构分别对两种舱位进行计算

import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        Scanner sc  = new Scanner(System.in);
        System.out.println("输入机票原价");
        double ticket  = sc.nextDouble();
        System.out.println("输入月份(1-12)");
        int month = sc.nextInt();
        if(month<1||month>12){
            System.out.println("月份非法");
            return;
        }
        System.out.println("输入舱位级别(头等舱:1,经济舱:2)");
        int rank = sc.nextInt();
        if(rank !=1&&rank!=2){
            System.out.println("舱位非法");
            return;
        }
        //ctrl+alt+M 自动抽取方法
        if(month>=5&&month<=10){
            cal_ticket(ticket,rank,0.9,0.85);
        }else{
            cal_ticket(ticket,rank,0.7,0.65);
        }
    }
    public static void cal_ticket(double ticket,int rank,double v1,double v2){
        if(rank == 1){
            System.out.println("头等舱价格为:"+ticket*v1);
        }else{
            System.out.println("经济舱价格为:"+ticket*v2);
        }
    }
}

2.质数
需求:
判断101-200之间有多少个质数,并输出所有质数

思路:
运用双重循环对每一个数字进行判断并设置标志位记录

public class Test2 {
    public static void main(String[] args) {
        int count = 0;
        for (int i = 101; i <= 200; i++) {
            //flag记录该循环数字是否是质数,默认0是质数
            int flag = 0;
            for(int j = 2;j<i/2;j++){
                if(i%j==0){
                    flag = 1;
                    //
                    break;
                }
            }
            if(flag==0){
                count++;
                System.out.print(i+" ");
            }
        }
        System.out.println();
        System.out.println("总数是"+count);
    }
}

3.开发验证码
需求:
定义方法实现随机产生一个5位的验证码
验证码格式:长度为5;前四位是大写字母或者小写字母;最后一位是数字

思路:
首先先存储出需要的字母和数字 然后定义一个字符串,首先通过随机索引拼接四个字母,再拼接一个数字

import java.util.Random;

public class Test3 {
    public static void main(String[] args) {
        //在以后如果我们要在一堆没有什么规律的数据中随机抽取
        //可以先把这些数据放到数组当中
        //再随机抽取一个索引
        char[] alp = new char[52];
        for (int i = 0; i < alp.length; i++) {
            if(i<=25){
                alp[i]=(char)(97+i);
            }else{
                alp[i]=(char)(65+i-26);
            }
        }
        int[] arr = {1,2,3,4,5,6,7,8,9,0};
        Random r = new Random();
        String result = "";

        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(alp.length);
            result = result+alp[index];
        }
        int index1 = r.nextInt(arr.length);
        result = result+index1;
        System.out.println(result);
    }
}

4.数组元素的复制
需求:
把一个数组中的元素复制到另一个新数组中去

思路: 定义新数组复制即可

public class Test4 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int[] brr = new int[arr.length];
        for (int i = 0; i < brr.length; i++) {
            brr[i] = arr[i];
        }
        for (int i = 0; i < brr.length; i++) {
            System.out.print(brr[i] + " ");
        }
    }
}

5.评委打分
需求:
在唱歌比赛中,有6名评委给选手打分,分数范围是[0-100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。

思路:
首先定义方法依次录入符合范围的评分 然后找出最大最小值进行计算即可

import java.util.Scanner;

public class Test5 {
    public static void main(String[] args) {
        int[] arr = getScores();
        int max = getMax(arr);
        int min = getMin(arr);
        int sum = getSum(arr);
        int avg = (sum-min-max)/(arr.length-2);
        System.out.println(avg);
    }
    //定义数组
    public static int[] getScores(){
        int[] scores = new int[6];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入评委的打分:");
            int score = sc.nextInt();
            if(score>=0&&score<=100){
                scores[i] = score;
            }else{
                System.out.println("成绩超出范围,请重新录入,当前的i为:"+i);
                i--;
            }
        }
        return scores;
    }
    //求最大值
    public static int getMax(int[] arr){
        int max = arr[1];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>max){
                max = arr[i];
            }
        }
        return max;
    }
    //求最小值
    public static int getMin(int[] arr){
        int min = arr[1];   //shift+f6 修改一个方法中的指定所有相同值
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]<min){
                min = arr[i];
            }
        }
        return min;
    }
    //求总和
    public static int getSum(int[] arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum=sum+arr[i];
        }
        return sum;
    }
}

6.数字加密和解密
需求:
某系统的数字密码(大于0),比如1983,采用加密方式进行传输。
规则如下:先得到每位数,然后每位数都加上5,再对10取余,最后将所有数字翻转,得到一串新数,解密相反。

思路:
首先将数字各位统计进数组 然后进行加密计算,再利用循环将其前后翻转

import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入密码:");
        int code = sc.nextInt();
        int result = encryption(code);
        System.out.println("加密后的结果就是:"+result);
        int result_decrypt = decrypt(result);
        System.out.println("解密后的结果就是:"+result_decrypt);
    }
    //加密  分解与反转数组  +5 %10 反转
    public static int encryption(int code){
        int[] arr = getList(code);
        //先加密再反转
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (arr[i]+5)%10;
        }
        int[] brr = reversalList(arr);

        int result = 0;
        for (int i = 0; i < brr.length; i++) {
            result = result*10+brr[i];
        }
        return result;
    }
    //解密 反转然后 x = (c - k) % 10
    public static int decrypt(int result){
        int[] arr = getList(result);
        //先反转再加密
        int[] brr = reversalList(arr);
        for (int i = 0; i < brr.length; i++) {
            brr[i] = (brr[i]-5+10)%10;
        }
        int result_decrypt = 0;
        for (int i = 0; i < brr.length; i++) {
            result_decrypt = result_decrypt*10+brr[i];
        }
        return result_decrypt;
    }
    //将输入数字分解为数组
    public static int[] getList(int result){
        int count = 0;
        int temp = result;
        while(temp>0){
            temp = temp/10;
            count++;
        }
        int[] arr = new int[count];
        for (int i = arr.length-1; i >= 0; i--) {
            arr[i] = result%10;
            result = result/10;
        }

        return arr;
    }
    //反转数组
    public static int[] reversalList(int[] arr){
        int[] brr = new int[arr.length];
        for (int i = 0; i < brr.length; i++) {
            brr[i] = arr[arr.length-i-1];
        }
        return brr;
    }

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值