(day2)自学java综合练习

目录

1.卖飞机票

2.找质数

3.开发验证码

4.数组元素的复制

5.评委打分

6.数字加密

7.数字解密

8.抢红包

9.模拟双色球

10.二维数组


 

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.print("请输入机票原价:");
        int ticket = sc.nextInt();
        System.out.print("请输入机票月份(示例:1):");
        int month = sc.nextInt();
        System.out.print("头等舱请输入:1,经济舱请输入:2 :");
        int planeSeat = sc.nextInt();
        if (month >= 5 && month <= 10) {
            if (planeSeat == 1) {
                ticket = (int) (ticket * 0.9);
            } else if (planeSeat == 2) {
                ticket = (int) (ticket * 0.85);
            }else {
                System.out.println("不存在此舱位");
            }
            System.out.println("价格为:" + ticket);
        } else if ((month >= 1 && month <= 4) || (month >= 11 && month <= 12)) {
            if (planeSeat == 1) {
                ticket = (int) (ticket * 0.7);
            } else if (planeSeat == 2) {
                ticket = (int) (ticket * 0.65);
            }else {
                System.out.println("不存在此舱位");
            }
            System.out.println("价格为:" + ticket);
        }else {
            System.out.println("不存在此月份");
        }
    }
}

2.找质数

  • 判断101~200之间有多少个素数,并输出所有素数。
public class Test1 {
    public static void main(String[] args) {
        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){
                count++;
                System.out.println("当前数字"+i+"是质数");
            }
        }
        System.out.println("有"+count+"个质数");
    }
}

3.开发验证码

  • 定义方法实现随机产生一个5位的验证码
  • 验证码格式:长度为5,前四位是大写字母或者小写字母,最后一位是数字
import java.util.Random;

public class Test1 {
    public static void main(String[] args) {
        char[]arrEnglish=new char[52];
//向数组中添加大小写字母
        for (int i = 0; i < arrEnglish.length; i++) {
            arrEnglish[i]=(char)(97+i);
            if(i>25){
                arrEnglish[i]=(char)(65+i-26);
            }
        }
        Random r=new Random();
//定义一个字符串类型的变量,来记录最终结果
        String result="";
        for (int i = 0; i < 4; i++) {
            int randomIdenx=r.nextInt(arrEnglish.length);
//利用随机索引,获取相应元素
            result=result+arrEnglish[randomIdenx];
        }
        int number=r.nextInt(10);
        String resultLast=result+number;
        System.out.println(resultLast);
    }
}

4.数组元素的复制

  • 把一个数组的元素复制到一个新的数组中去。
public class Test1 {
    public static void main(String[] args) {
        int[]arr={1,2,3,4,5,6,7,8,9};
        int[]arrNew=new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arrNew[i]=arr[i];
        }
        for (int i = 0; i < arrNew.length; i++) {
            System.out.print(arrNew[i]);
        }
    }
}

5.评委打分

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

import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        int[]score=scoreArr();
        int max=getMax(score);
        int min=getMin(score);
        int avg=getAvg(max,min,score);
        System.out.println(avg);
    }
//获取最大值
    public static int getMax(int[] score) {
        int max=0;
        for (int i = 0; i < score.length; i++) {
            if(max<score[i]){
                max=score[i];
            }
        }
        return max;
    }
//获取最小值
    public static int getMin(int[]score) {
        int min=score[0];
        for (int i = 0; i < score.length; i++) {
            if(min>score[i]){
                min=score[i];
            }
        }
        return min;
    }
//计算去掉最高分和最低分的平均成绩
    public static int getAvg(int max,int min,int[]score) {
        int sum=0;
        for (int i = 0; i < score.length; i++) {
            sum=sum+score[i];
        }
        int avg=(sum-max-min)/4;
        return avg;
    }
    //获取数组
    public static int[] scoreArr(){
        int[] score =new int[6];
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i < score.length; ) {
            System.out.print("请评委打分(1~100):");
            int temp=sc.nextInt();
            if(temp>=1&&temp<=100){
                score[i]=temp;
                i++;     //只有输入数据正确时i才加1
            }
            else {
                System.out.println("数字范围有误");
            }

        }
        return score;
    }
}

6.数字加密

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

public class Test1 {
    public static void main(String[] args) {
        int number1=1983;
        int temp1=number1;
        int count=0;
//将数字的每一位写入数组
        while(number1!=0){
            number1=number1/10;
            count++;
        }
        int[] arr=new int[count];
        int index= arr.length-1;
        while (temp1!=0){
            int ge=temp1%10;
            temp1=temp1/10;
            arr[index]=ge;
            index--;
        }
//以下是加密过程
        for (int i = 0; i < arr.length; i++) {
            arr[i]=(arr[i]+5)%10;
        }
        for (int i = 0, j= arr.length-1; i < j; i++,j--) {
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        int number=0;
        for (int i = 0; i < arr.length; i++) {
            number=number*10+arr[i];
        }
        System.out.println(number);
    }
}

//加密结果8346

7.数字解密

public class Test1 {
    public static void main(String[] args) {
        int number1=8346;
        int temp1=number1;
        int count=0;
//将数字分别写入数组
        while(number1!=0){
            number1=number1/10;
            count++;
        }
        int[] arr=new int[count];
        int index= arr.length-1;
        while (temp1!=0){
            int ge=temp1%10;
            temp1=temp1/10;
            arr[index]=ge;
            index--;
        }
//解密过程
        for (int i = 0, j= arr.length-1; i < j; i++,j--) {
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
//此步骤加密是通过取余得到,解密就是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;
            }
        }
//拼接结果
        int number=0;
        for (int i = 0; i < arr.length; i++) {
            arr[i]=arr[i]-5;
            number=number*10+arr[i];
        }
        System.out.print(number);
    }
}

8.抢红包

  • 一个大V直播抽奖。奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。

第一种:

import java.util.Random;

public class Test1 {
    public static void main(String[] args) {
        int[] arr = {2, 588, 888, 1000, 10000};
        int[] arrNew = new int[arr.length];
        Random r=new Random();
//有5种奖金,所以抽5次
        for (int i = 0; i < 5; ) {
            int randomIndex= r.nextInt(arr.length);
            int price=arr[randomIndex];
            boolean flag=contains(arrNew,price);
//当方法contains返回false,说明arrNew里不存在抽取的奖金数,所以将其添加进去
            if(!flag){
                arrNew[i]=price;
                i++;
            }
        }
//打印结果
        for (int i = 0; i < arrNew.length; i++) {
            System.out.println(arrNew[i]);
        }
    }

//判断抽到的奖金数,是否存在于arrNew数组
    public static boolean contains(int[] arrNew, int price) {
        for (int i = 0; i < arrNew.length; i++) {
            if(arrNew[i]==price){
                return true;
            }
        }
        return false;
    }
}

第二种:

import java.util.Random;

public class Test1 {
    public static void main(String[] args) {
        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.模拟双色球

  • 投注号码由六个红球,一个蓝球号码组成。红球号码从1-33中选择,蓝球号码从1-16中选择。

 

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

public class Test1 {
    public static void main(String[] args) {
    //生成中奖号码
        int arrCreate[]=createNumber();
    //用户输入号码
        int arrUser[]=userInput();
    //校验号码
        int redcount=0;
        int bluecount=0;
    //校验红球个数
        for (int i = 0; i < arrCreate.length-1; i++) {
            for (int i1 = 0; i1 < arrUser.length-1; i1++) {
                if(arrCreate[i]==arrUser[i1]){
                        redcount++;
                        //如果找到了,后面的数字就没必要比较了,跳出这一层循环
                        break;
                }
            }
        }
//校验蓝球个数,并输出红球和蓝球正确个数
        if(arrCreate[arrCreate.length-1]==arrUser[arrUser.length-1]){
            bluecount++;
        }
        System.out.println("红球中奖"+redcount+"个");
        System.out.println("蓝球中奖"+bluecount+"个");
//中奖类型
        if(redcount==6&&bluecount==1){
            System.out.println("一等奖,最高1000万");
        }
        else if(redcount==6&&bluecount==0){
            System.out.println("二等奖,最高500万");
        }
        else if(redcount==5&&bluecount==1){
            System.out.println("三等奖,3000元");
        }
        else if(redcount==5&&bluecount==0||redcount==4&&bluecount==1){
            System.out.println("四等奖,200元");
        }
        else if(redcount==4&&bluecount==0||redcount==3&&bluecount==1){
            System.out.println("五等奖,10元");
        }
        else if(redcount==2&&bluecount==0||redcount==1&&bluecount==1||redcount==0&&bluecount==1){
            System.out.println("六等奖,5元");
        }
        else {
            System.out.println("谢谢参与");
        }

    }
//----------------------------------------------------------------------------
    public static int[] userInput(){
        int[]arr=new int[7];
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i <arr.length-2 ; ) {
            System.out.print("请输入第"+(i+1)+"个红球号码:");
            //输入号码后进行判断,数字范围是否正常,数字是否在数组中重复(调用contains)。
            int redNumber=sc.nextInt();
            if(redNumber>=1&&redNumber<=33){
                boolean flag=contains(arr,redNumber);
                if(!flag){
                    arr[i]=redNumber;
                    i++;
                }
                else {
                    System.out.println("数字重复");
                }
            }
            else {
                System.out.println("红球数字范围出错");
            }

        }
        while (true){
            System.out.print("请输入蓝球号码:");
            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(){
        int[]arr=new int[7];
        Random r=new Random();
        for (int i = 0; i < arr.length-1; ) {
            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 redNumber){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==redNumber){
                return true;
            }
        }
        return false;
    }
}

10.二维数组

二维数组:数组中存数组 (数据分组管理)

 

 

 

 

练习: 二维数组练习

 

public class Test1 {
    public static void main(String[] args) {
        int[][] arr = {
                {22, 66, 44},
                {77, 33, 88},
                {25, 45, 65},
                {11, 66, 99},
        };
        int sum = 0;

        for (int i = 0; i < arr.length; i++) {
            int sumQuarter = 0;
            for (int j = 0; j < arr[i].length; j++) {
                sumQuarter = sumQuarter + arr[i][j];
            }
            System.out.println("第" + (i + 1) + "季度总营业额为:" + sumQuarter);
            sum = sum + sumQuarter;
        }
        System.out.println("全年总营业额为:" + sum);
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值