Java基础练习

一、综合练习

1.卖飞机票:根据季节(旺季/淡季)和舱位(头等舱/经济舱)来计算机票的价格。

2.找质数:计算101到200之间的质数个数,并打印所有质数。

3.开发验证码:生成一个5位验证码,其中前四位是随机的字母(大小写),最后一位是数字。

4.数组元素的复制:将一个数组的元素复制到一个新数组,并输出新数组的内容。

5.评委打分:在唱歌比赛中,有6名评委打分,最终去掉最高和最低分后计算选手的平均得分。

6.数字加密:给定一个数字,将每位数加5并对10取余,最后将数字反转,输出加密后的结果。

7.数字解密:对已经加密的数字(规则与加密相反),进行解密,还原出原始数字。

8.抢红包:随机抽取并打印出不重复的现金红包,模拟抽奖的过程。

9.模拟双色球:模拟双色球彩票抽奖,用户输入彩票号码,程序判断用户是否中奖。

1.卖飞机票

package lianxi;
import java.util.Scanner;
public class Demo1 {
    public static void main(String[] args) {
        /*机票价格按照淡季旺季、头等舱和经济舱、输入机票原价、月份、和头等舱或经济舱
        按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入机票原价:");
        int ticket = sc.nextInt();
        System.out.println("请输入购买月份:");
        int month = sc.nextInt();
        System.out.println("请输入购买的舱位:0表示头等舱,1表示经济舱");
        int seat = sc.nextInt();
        if (month >= 5 && month <= 10) {
            //旺季
           ticket=getPrice(ticket,seat,0.9,0.85);
​
        } else if (month >= 1 && month <= 4 || (month >= 11 && month <= 12)) {
            //淡季
            ticket=getPrice(ticket,seat,0.7,0.65);
        }else{
            System.out.println("键盘录入的月份不合法");
        }
        System.out.println(ticket);
    }
    //1.我要干嘛?根据舱位和折扣来计算最终的票价
    //2.我干这件事,需要什么才能完成?原价 舱位 头等舱的折扣 经济舱的折扣
    //3.方法的调用处是否需要继续使用这个结果
    public static int getPrice(int ticket,int seat,double v0,double v1) {
        if (seat == 0) {
            ticket = (int) (ticket * v0);
        } else if (seat == 1) {
            ticket = (int) (ticket * v1);
        } else {
            System.out.println("没有这个舱位");
        }
        return ticket;
    }
}

2.找质数

package lianxi;
public class Demo2 {
    public static void main(String[] args) {
        //判断101~200之间有多少个素数,并打印所有素数,统计个数
        int count=0;
        for(int i=101;i<=200;i++){
            boolean flag=true;
            for(int j=2;j<i;j++){
                if(i%j==0){
                    flag=false;
                    break;
                }
            }
            if(flag){
                System.out.println(i+"是质数");
                count++;
            }
        }
        System.out.println("一共有"+count+"个质数");
    }
}

3.开发验证码

package lianxi;
import java.util.Random;
public class Demo3 {
    public static void main(String[] args) {
        /*需求:
            定义一个方法实现随机产生一个5位的验证码
            验证码格式
            长度5
            前四位是大写字母或者小写字母
            最后一位是数字
        */
        //1.大写字母和小写字母都放在数组中
        char[] chs=new char[52];
        for(int i=0;i<chs.length;i++) {
            if (i <= 25) {
                chs[i] = (char) (97 + i);
            } else {
                chs[i] = (char) (65 + i - 26);
            }
        }
       //随机抽取四次
        String result="";
        Random r=new Random();
        for(int i=0;i<4;i++) {
            int randomIndex=r.nextInt(chs.length);
            chs[i]=chs[randomIndex];
            result+=chs[i];
        }
        //最后一位是数字0~9
        int number=r.nextInt(10);
        result+=number;
        System.out.println(result);
    }
}

4.数组元素的复制

package lianxi;
public class Demo4 {
    public static void main(String[] args) {
        /*需求:
        把一个数组的元素复制到另一个新数组中去*/
        int[] arr={1,2,3,4,5};
        int[] newArr=new int[arr.length];
        for(int i=0;i<arr.length;i++){
            newArr[i]=arr[i];
        }
        for(int i=0;i<arr.length;i++){
            System.out.println(newArr[i]);
        }
    }
}

5.评委打分

package lianxi;
import java.util.Scanner;
public class Demo5 {
    public static void main(String[] args) {
        //在唱歌比赛中,有6名评委给选手打分,分数范围是[0-100]直接的整数
        //选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分
        //1.定义一个数组,用来存储6名评委的打分(0~100)
        //5.(总和-最大值-最小值)/4
        int[] arr=getScores();
      /*
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
        */
        int max=getMax(arr);
        int min=getMin(arr);
        int sum=getSum(arr);
        System.out.println((sum - max - min) / (arr.length - 2));
    }
    public static int getSum(int[] arr) {
        int sum=0;
        for(int i=0;i<arr.length;i++) {
            sum=sum+arr[i];
        }
        return sum;
    }
    public static int getMax(int[] arr){
        int max=arr[0];
        for(int i=1;i<arr.length;i++){
            if(arr[i]>max){
                max=arr[i];
            }
        }
        return max;
    }
    public static int getMin(int[] arr){
        int min=arr[0];
        for(int i=1;i<arr.length;i++){
            if(arr[i]<min){
                min=arr[i];
            }
        }
        return min;
    }
    public static int[] getScores() {
        //定义数组
        int[] scores = new int[6];
        //使用键盘录入的形式,输入分数:0~100
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < scores.length; ) {
            System.out.println("请给第" + (i + 1) + "个评委" + "的打分");
            int score = sc.nextInt();//100
            if (score >= 0 && score <= 100) {
                scores[i] = score;
                i++;
            }else{
                System.out.println("超出了范围,继续录入,当前的i为:"+i);
            }
        }
        return scores;
    }
}

6.数字加密

package lianxi;
public class Demo6 {
    public static void main(String[] args) {
        /*某系统的数字密码(大于0)。比如1983,采用加密方式进行传输
         * 规则如下:
         * 每位数加上5
         * 在对10求余
         * 最后将所以数字反转
         * 得到一串新数
         *
         * */
        //分析
        //1.把整数里面的每一位放到数组当中
        int[] arr={1,9,8,3};
        //2.加密码
        for(int i=0;i<arr.length;i++){
            arr[i]=arr[i]+5;
            arr[i]=arr[i]%10;
        }//6438
        //反转
        for(int i=0,j=arr.length-1;i<j;i++,j--){
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        //3.把数组里面的每一个数字进行拼接,变成加密之后的结果
        int number=0;
        for(int i=0;i<arr.length;i++){
            arr[i]=number*10+arr[i];
        }
        for(int t:arr){
            System.out.print(t+" ");
        }
    }
}
package lianxi;
public class Demo7 {
    public static void main(String[] args) {
        //把整数里面的每一位放到数组当中
        // 某系统的数字密码(大于0)
        int number=123456;
        int count=0;
        int temp=number;
        while(number!=0) {
            number=number/10;
            count++;
        }
        int[] arr=new int[count];
        int index=arr.length-1;
        while(temp!=0) {
            int ge=temp%10;
            temp=temp/10;
            arr[index]=ge;
            index--;
        }
        for(int t:arr){
            System.out.print(t+" ");
        }
    }
}

7.数字解密

package lianxi;
public class Demo8 {
    public static void main(String[] args) {
        /*
        * 某系统的数字(大于0)。比如1983,采用加密方式进行传输,
        * 规则如下:
        * 每位数加上5
        * 在对10求余
        * 最后将所以数字反转
        * 按照以上规则进行解密
        * 比如1983加密之后变成8346,解密之后变成1983
       */
        //1.定义数组记录解密后的结果
        int[] arr={8,3,4,6};
        //2.反转
        for(int i=0,j=arr.length-1;i<j;i++,j--){
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        //3.解密:0~4之间+10 5~9之间数字不变
        for(int i=0;i<arr.length;i++){
            if(arr[i]>=0 && arr[i]<=4){
                arr[i]=arr[i]+10;
            }
        }
        //4.每位数减5
        for(int i=0;i<arr.length;i++){
            arr[i]=arr[i]-5;
        }
        //5.拼接数字
        int number=0;
        for(int i=0;i<arr.length;i++){
            number=number*10+arr[i];
        }
        System.out.println(number);
    }
}

8.抢红包

package lianxi;
​
import java.util.Random;
​
public class Demo9 {
    public static void main(String[] args) {
        /*需求:
        * 一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}
        * 请用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
        * 打印效果如下:(随机顺序,不一定是下面的顺序)
        * 888元的奖金被抽出
        * 588元的奖金被抽出
        * 888元的奖金被抽出
        * 1000元的奖金被抽出
        * 10000元的奖金被抽出
         */
        int[] arr={2,588,888,1000,10000};
        int[] newArr=new int[arr.length];//定义数组用于存储抽奖后的结果
        Random r=new Random();
        for(int i=0;i<arr.length;){
            int randomIndex=r.nextInt(arr.length);
            int price=arr[randomIndex];
            //判断当前的奖项是否存在,如果存在则重新抽取,不存在就是有效奖项
            boolean flag=contains(newArr,price);
            if(!flag){
                newArr[i]=price;
                //添加完毕后,移动索引
                i++;
            }
        }
        for(int i=0;i<newArr.length;i++){
            System.out.println(newArr[i]);
        }
    }
    //判断price在数组中是否存在
    public static boolean contains(int[] arr,int price){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==price){
                return true;
            }
        }
        return false;
    }
​
}

优化:

package lianxi;
​
import java.util.Random;
​
public class Demo10 {
    public static void main(String[] args) {
        /*需求:
         * 一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}
         * 请用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。
         * 打印效果如下:(随机顺序,不一定是下面的顺序)
         * 888元的奖金被抽出
         * 588元的奖金被抽出
         * 888元的奖金被抽出
         * 1000元的奖金被抽出
         * 10000元的奖金被抽出
         * 2元的奖金被抽出
         */
        int[] arr={2,588,888,1000,10000};
        Random r=new Random();
        for(int i=0;i<arr.length;i++){
            int randomIndex=r.nextInt(arr.length);
            int temp=arr[i];
            arr[i]=arr[randomIndex];
            arr[randomIndex]=temp;
        }
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}

9.模拟双色球

package lianxi;
import java.util.Random;
import java.util.Scanner;
public class Demo11 {
    public static void main(String[] args) {
        //1.生成中奖号码
        int[] arr = createNumber();
        System.out.println("====================");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        System.out.println("====================");
        //2.用户输入彩票号码
        int[] userInputeArr = userInputNumber();
        for (int i = 0; i < userInputeArr.length; i++) {
            System.out.print(userInputeArr[i] + " ");
        }
        System.out.println();
        //判断用户的中奖情况
        //红球 蓝球
        int redNumber = 0;
        int blueNumber = 0;
        //判断红球
        for (int i = 0; i < userInputeArr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1; j++) {
                if (userInputeArr[i] == arr[j]) {
                    redNumber++;
                    break;
                }
            }
        }
        if (userInputeArr[userInputeArr.length - 1] == arr[arr.length - 1]) {
            blueNumber++;
        }
        System.out.println(redNumber);
        System.out.println(blueNumber);
        if (redNumber >= 6 && blueNumber == 1) {
            System.out.println("恭喜你中奖1000万");
        } else if (redNumber >= 6 && blueNumber == 0) {
            System.out.println("恭喜你中奖500万");
        } else if ((redNumber >= 5 && blueNumber == 1) || (redNumber >= 5 && blueNumber == 0)) {
            System.out.println("恭喜你中奖3000元");
        } else if ((redNumber >= 3 && blueNumber == 1) || (redNumber >= 2 && blueNumber == 1)) {
            System.out.println("恭喜你中奖10元");
        } else if ((redNumber >= 1 && blueNumber == 1) || (redNumber >= 0 && blueNumber == 1)) {
            System.out.println("恭喜你中奖5元");
        }
    }
    public static int[] userInputNumber() {
        //创建数组用于添加用户购买的彩票号码
        //6个红球 1个篮球 数组长度:7
        int[] arr=new int[7];
        Scanner sc=new Scanner(System.in);
        for(int i=0;i<6;){
            System.out.println("请输入第"+(i+1)+"个中奖号码:");
            int redNumber=sc.nextInt();
            boolean flag=contains(arr,redNumber);
            if(redNumber>=1 && redNumber<=33){
                if(!flag){
                    arr[i]=redNumber;
                    i++;
                }else{
                    System.out.println("号码已经存在请重新输入");
                }
            }else{
                System.out.println("号码超出范围,请重新输入");
            }
        }
        //蓝球中奖号码
        while(true){
            System.out.println("请输入篮球中奖号码:");
            int blueNumber=sc.nextInt();
            if(blueNumber>=1 && blueNumber<=16){
                arr[arr.length-1]=blueNumber;
                break;
            }else{
                System.out.println("蓝球号码超出范围,请重新输入");
            }
        }
        return arr;
​
    }
    public static int[] createNumber(){
        //创建数组用于添加中奖号码
        //6个红球 1个蓝球 数组长度:7
        int[] arr=new int[7];
        Random r=new Random();
        for(int i=0;i<6;){
            int redNumber =r.nextInt(33)+1;
            boolean flag=contains(arr, redNumber);
            if(!flag){
                arr[i]= redNumber;
                i++;
            }
        }
        arr[6]=r.nextInt(16)+1;
        return arr;
    }
    public static boolean contains(int[] arr,int number){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==number){
                return true;
            }
        }
        return false;
    }
}

双色球系统效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值