JavaSE——基于案例的基础语法练习(买飞机票、验证码、评委打分、数组拷贝、找素数)

简介: JavaSE——基于案例的基础语法练习(买飞机票、验证码、评委打分、数组拷贝、找素数)

买飞机票

需求

用户购买机票时,机票原价会按照淡季、旺季,头等舱还是经济舱的情况进行相应的优惠,优惠方案如下:5-10月为旺季,头等舱9折,经济舱8.5折;11月到来年4月为淡季,头等舱7折,经济舱6.5折,请开发程序计算出用户当前机票的优惠价。

参考写法:

package user.helloworld;
 
public class Test
{
    public static void main(String[] args)
    {
        System.out.println("优惠之后的票价为:" + calculate(8,1000,"经济舱"));
 
    }
 
    public static double calculate(int mouth,double price,String type)
    {
        if(mouth >= 5 && mouth <= 10)
        {
            switch(type) {
                case "头等舱":
                    price = price * 0.9;
                    break;
                case "经济舱":
                    price = price * 0.85;
                    break;
            }
        }
        else
        {
            switch (type) {
                case "头等舱":
                    price = price * 0.7;
                    break;
                case "经济舱":
                    price = price * 0.65;
                    break;
            }
        }
        return price;
    }
}

验证码

需求

开发一个程序,可以生成指定位数的验证码,每位可以是数字、大小写字母。

  • 方法需要接收一个整数,控制生成验证码的位数。
  • 方法需要返回生成的验证码。
  • 方法内部的业务:使用for循环依次生成每位随机字符,并使用一个编辑String类的变量把每个字符连接起来,最后返回该变量即可。

参考写法:

package user.helloworld;
 
import java.util.Random;
 
public class Test
{
    public static void main(String[] args) {
        System.out.println(CreateCode(6));
    }
 
    public static String CreateCode(int n){
        Random r =  new Random();  //取随机数
        int type;  //用于确定字符类型
        String code = "";   //建立我们接收验证码的字符串变量
        for(int i = 0; i < n; i++){   //根据接收的n参数,每循环一次就多一位字符
            type = r.nextInt(4);      //这里随机取4个值,给数字字符较大的概率
            switch(type){
                case 0:
                case 1:
                    code += r.nextInt(10);  //随机一个数字字符
                    break;
                case 2:
                    code += (char)(r.nextInt(26) + 65);  //随机一个大写字母字符
                    break;
                case 3:
                    code += (char)(r.nextInt(26) + 97);  //随机一个小写字母字符
                    break;
            }
        }
        return code;
    }
}

评委打分

需求

在唱歌比赛中,可能有多名评委要给选手打分,分数是[0-100]之间的整数。选手最后得分为:去掉最高分、最低分后剩余分数的平均分,请编写程序能够录入多名评委的分数,并算出选手的最终得分。

  • 方法需要接收评委的人数。
  • 方法需要返回计算出的选手最终得分
  • 方法内部的业务:定义数组,录入评委的分数存入到数组中去,接着,我们就需要遍历数组中的分数,计算出总分,并找出最高分,最低分、最后按照这些数据算出选手最终得分并返回即可。

或者直接在录入过程中直接找出一个最高分和一个最低分,并求和。

参考写法:

package user.helloworld;
 
import java.util.Scanner;
 
public class Test
{
    public static void main(String[] args) {
        System.out.println("当前选手的得分是:" + getAverageScore(6));
    }
 
    public static double getAverageScore(int number){
        //首先要有变量来录入评委的分数
        Scanner sc = new Scanner(System.in);
        int[] scores = new int[number];
        //然后要计算平均值,要有一个累加值,再除以评分的数量
        int sum = 0;  //评委打分只有0-100的整数
        //利用已知需求,可以先把存储最高分和最低分的变量建立
        int max = 0,min = 101;
        //开始录入
        for(int i = 0; i < number; i++){
            System.out.println("请您输入第" + (i + 1) + "位评委的评分:");
            scores[i] = sc.nextInt();
            if(scores[i] > max)
                max = scores[i];
            if(scores[i] < min)
                min = scores[i];
            sum += scores[i];
        }
 
        return (double) ((sum - max - min) / (number - 2));
    }
}

数组拷贝

需求

请把一个整型数组,例如存了数据:11,22,33,拷贝成一个一模一样的新数组出来。

  • 方法需要接收一个整型数组(原数组)
  • 方法需要返回一个新的、一模一样的整型数组。
  • 方法内部的业务:创建一个长度一样的整型数组做为新数组,并把原数组的元素对应位置赋值给新数组,最终返回新数组即可。

参考写法:

package user.helloworld;
 
 
public class Test
{
    public static void main(String[] args) {
        int[] arr = {10,20,30,40};
        int[] arr2 = copy(arr);
        printIntArray(arr2);
    }
 
    public static int[] copy(int[] arr){
        int[] arr_copy = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            arr_copy[i] = arr[i];
        }
        return arr_copy;
    }
 
    public static void printIntArray(int[] arr){
        System.out.print("[" + " ");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i == (arr.length - 1) ? arr[i] + " " + "]" : arr[i] + " ");
        }
    }
}

找素数

需求

判断某个整数区间内有多少个素数,并输出所有素数。

说明:除了1和它本身以外,不能被其他正整数整除,就叫素数。比如:3、7就是素数,而9、21等等不是素数。

  • 方法需要接收一个区间,以便找该区间中的素数。
  • 方法需要返回找到的素数个数。
  • 方法内部的实现逻辑:使用for循环来产生如101到200之间的每个数;每拿到一个数,判断该数是否是素数;判断规则是:从2开始遍历到该数的一半的数据,看是否有数据可以整除它,有则不是素数,没有则是素数;根据判定的结果来决定是否输出这个数据(是素数则输出);最后还需要统计素数的个数并返回。

参考写法1

public class Test
{
    public static void main(String[] args) {
        System.out.println("素数的个数为:" + search(101,200) + "个素数");
    }
 
    public static int search(int start,int end){
        int count = 0;  // 用于记录素数的个数
 
        //第一种方法可以用标识符来帮助判断
        boolean flag = true;
 
        //开始循环判断素数
        for (int i = start; i <= end; i++) {
            flag = true;
 
            for(int j = 2; j <= i/2; j++){
                if(i % j == 0){
                    //不是素数
                    flag = false;
                    break;
                }
            }
            if(flag == true){
                System.out.println(i);
                count++;
            }
        }
        return count;
    }
}


运行结果:

参考写法2

public class Test
{
    public static void main(String[] args) {
        System.out.println("素数的个数为:" + search(101,200) + "个");
    }
 
    public static int search(int start,int end){
        int count = 0;  // 用于记录素数的个数
        //第二种方法就是用continue语句,类似于C语言中的goto语句
        OUT:
        //开始循环判断素数
        for (int i = start; i <= end; i++) {
 
            for(int j = 2; j <= i/2; j++){
                if(i % j == 0){
                    //不是素数
                    continue OUT;
                }
            }
                System.out.println(i);
                count++;
        }
        return count;
    }
}


运行结果:


END



目录
相关文章
layui框架实战案例(10):短信验证码60秒倒计时
layui框架实战案例(10):短信验证码60秒倒计时
332 0
|
3月前
|
数据采集 自然语言处理 API
Python反爬案例——验证码的识别
Python反爬案例——验证码的识别
53 2
|
3月前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
358 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
7月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
126 5
|
7月前
|
存储 缓存 前端开发
综合性练习(验证码案例)
综合性练习(验证码案例)
73 6
|
机器人 UED Python
基于Python+Flask实现一个简易网页验证码登录系统案例
基于Python+Flask实现一个简易网页验证码登录系统案例
228 0
|
Ubuntu Python
23 Django模板 - 验证码案例
23 Django模板 - 验证码案例
77 0
|
安全 数据安全/隐私保护
SpringSecurity5.7+最新案例 -- 用户名密码+验证码+记住我······
根据最近一段时间的设计以及摸索,对SpringSecurity进行总结,目前security采用的是5.7+版本,和以前的版本最大的差别就是,以前创建SecurityConfig需要继承WebSecurityConfigurerAdapter,而到了5.7以后,并不推荐这种做法,查了网上一些教程,其实并不好,绝大多数用的都是老版本,所以出此文案。一些原理什么的,就不过多说明了,一般搜索资料的,其实根本不想你说什么原理 T·T。
193 0
SpringSecurity5.7+最新案例 -- 用户名密码+验证码+记住我······
|
NoSQL Java Redis
【案例实战】SpringBoot整合Redis连接池生成图形验证码
【案例实战】SpringBoot整合Redis连接池生成图形验证码
【案例实战】SpringBoot整合Redis连接池生成图形验证码
|
前端开发 Java 测试技术
【案例实战】高性能SpringBoot整合短线验证码发送(池化思想+异步结合)
【案例实战】高性能SpringBoot整合短线验证码发送(池化思想+异步结合)