11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(上)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题

前言

一、数组的遍历

1.注意点:输出语句的用法

System.out.println("abc");  //先打印abc,再进行换行
        System.out.print("abc");    //只打印abc,不换行
        System.out.println();       //不打印任何数据,只做换行处理

2.题目正解

import java.sql.SQLOutput;
public class MethodTest1 {
    public static void main(String[] args) {
        int[] arr={11,22,33,44,55};
        printArr(arr);
        //输出语句的用法
   /* System.out.println("abc");  //先打印abc,再进行换行
        System.out.print("abc");    //只打印abc,不换行
        System.out.println();       //不打印任何数据,只做换行处理
    */
    }
    public static void  printArr(int[] arr){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                System.out.print(arr[i]);
            }else{
                System.out.print(arr[i]+",");
            }
        }
        System.out.print("]");
    }
}

二、数组最大值

public class MethodTest2 {
    public static void main(String[] args) {
        int[] arr={1,0,9,5,4,2,6};
        System.out.println("数组的最大值是:"+getMax(arr));
    }
    public static int getMax(int[] arr){
        int max=arr[0];      //max必须是数组中的数值
        for (int i = 1; i+1< arr.length; i++) {
            if(arr[i]>max){
                max=arr[i];
            } 
        }
        return max;
    }
}

三、判断是否存在

import java.util.Scanner;
public class MethodTest3 {
    public static void main(String[] args) {
       int[] arr={1,2,3,4,5};
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num=sc.nextInt();
        System.out.println("整数存在吗?"+getExisit(num,arr));
    }
    public static boolean getExisit(int num,int[] arr){
        for (int i = 0; i < arr.length; i++) {
            if(num==arr[i]){
                 return true;
            }
        }
        return false;
    }
}

四、复制数组

比如说想要下标3~7之间的数据

分析结果如下:

public class MethodTest4 {
    public static void main(String[] args) {
        //1.定义原始数组
        int[] arr={1,2,3,4,5,6,7,8,9};
        //2.调用方法拷贝数据
        int[] copyArr=copyOfRange(arr,3,7);
        //3.遍历copyArr
        for (int i = 0; i < copyArr.length; i++) {
            System.out.print(copyArr[i]+" ");
        }
    }
    public static int[] copyOfRange(int[] arr,int from,int to){  
        //1.定义数组
        //静态:知道所有元素
        //动态:不知道所有元素,但是知道要存几个元素,这个可以用to-from算出来
        int[] newArr=new int[to-from];
        //2.把原始数组arr中的from到to上对应的元素,直接拷贝到newArr中
        //格式:数组名[索引]=数据值;
        //伪造索引的思想:没有一个变量能表示当前索引的范围用
        int index=0;
        for(int i=from;i<to;i++){
            newArr[index]=arr[i];
            index++;
        }
        //3.把新数组返回,注意要将方法的返回类型改为int[]
        return newArr;
    }
}

五、案例一:卖飞机票

import java.util.Scanner;
public class Test3 {
    public static void main(String[] args) {
        //分析:
        //1.键盘录入机票,月份,头等舱或者经济舱
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入机票的原价:");
        int price=sc.nextInt();
        System.out.println("请输入购买机票的月份:");
        int month=sc.nextInt();
        System.out.println("请输入购买机票的舱位(0代表头等舱,1代表经济舱):");
        int seat=sc.nextInt();
        //2.判断是淡季还是旺季
        if(month>=5&&month<=10){  //3.继续判断当前机票是经济舱还是头等舱
            //旺季
            if(seat==0){
                //头等舱
                price=(int)(price*0.9);   //机票一般是整数,这里将最终机票的价格强转成整数
            }else if(seat==1){
                //经济舱
                price=(int)(price*0.85);  //注意强制转换类型的时候要在后面式子的整体加小括号
            }else{
                System.out.println("没有这个舱位");
            }
        }else if(month>=1&&month<=4||month>=11&&month<=12){
            //淡季
            if(seat==0){
                //头等舱
                price=(int)(price*0.7);   //机票一般是整数,这里将最终机票的价格强转成整数
            }else if(seat==1){
                //经济舱
                price=(int)(price*0.65);  //注意强制转换类型的时候要在后面式子的整体加小括号
            }else{
                System.out.println("没有这个舱位");
            }
        }else{
            //表示键盘录入的月份是一个非法数据
            System.out.println("键盘输入的月份不合法");
        }
        //4.根据实际情况计算出相应的价格
        System.out.println(price);
    }
}

为了提高代码的复用性,可以将下面圈出来的写成方法.

优化后的代码:

import java.util.Scanner;
public class Test3 {
    public static void main(String[] args) {
        //分析:
        //1.键盘录入机票,月份,头等舱或者经济舱
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入机票的原价:");
        int price=sc.nextInt();
        System.out.println("请输入购买机票的月份:");
        int month=sc.nextInt();
        System.out.println("请输入购买机票的舱位(0代表头等舱,1代表经济舱):");
        int seat=sc.nextInt();
        //2.判断是淡季还是旺季
        if(month>=5&&month<=10){  //3.继续判断当前机票是经济舱还是头等舱
            //旺季
 price=getPrice(price,seat,0.9,0.85);
        }else if(month>=1&&month<=4||month>=11&&month<=12){
            //淡季
                       price=getPrice(price,seat,0.7,0.65);
        }else{
            //表示键盘录入的月份是一个非法数据
            System.out.println("键盘输入的月份不合法");
        }
        //4.根据实际情况计算出相应的价格
        System.out.println(price);
    }
    //1.我要干嘛?根据舱位和折扣计算最终的票价
    //2.我干这件事,需要什么?票的原价,舱位,头等舱的折扣,经济舱的折扣
    //3.方法的使用是否需要这个结果?需要
    public static int getPrice(int price,int seat,double v0,double v1){
        if(seat==0){
            //头等舱
            price=(int)(price*0.9);   //机票一般是整数,这里将最终机票的价格强转成整数
        }else if(seat==1){
            //经济舱
            price=(int)(price*0.85);  //注意强制转换类型的时候要在后面式子的整体加小括号
        }else{
            System.out.println("没有这个舱位");
        }
        return price;
    }
}

idea中快捷键的小扩展:

ctrl+alt+M 选中代码,自动抽取方法

ctrl+p 使用方法时在小括号中点击,可以看到该方法的形参内容

六、案例二:找质数

public class Test5 {
    public static void main(String[] args) {
        //判断101-200之间有多少个质数,并输出所有质数
        //怎么判断质数?
        //方法1.循环判断2~x-1之间有没有数字能被它整除
        //方法2.循环判断2~这个数的平方根
        //方法一:
        //定义变量:赋值100
        //判断i是否为质数
        for (int i = 101; i <= 200; i++) {
            //i依次表示循环中的每一个数字
            boolean flag=true;
            for(int j=2;j<i;j++){
                //j表示2-99之间的每一个数字
                if(i%j==0){
                    flag=false;
                    break;
                }
            }
            if(flag){
                System.out.println("当前数字"+i+"是质数");
            }
        }
    }
}

注意上面代码中break跳出的是单层循环,这里跳出的是内循环,跳出之后执行下面的语句.

七、案例三:开发验证码

分析:

题目核心:随机

在以后如果要在一堆没有规律的数据中抽取,可以先把数据放到数组中,再随机抽取一个索引

1.大写字母和小写字母都放到数组中

2.随机抽取四次

3.随机抽取一个数字0~9

import java.util.Random;
public class Test6 {
    public static void main(String[] args) {
        /*
        需求:定义方法实现随机产生一个五位的验证码
        验证码格式:
        长度为5
        前四位是大写字母或者小写字母
        最后一位是数字
         */
        /*
        1.大写字母和小写字母都放到数组中
        2.随机抽取四次
        3.随机抽取一个数字0~9
         */
        char[] chs=new char[52];
        for (int i = 0; i < chs.length; i++) {
            //chs[i]='a';
            //ASCII码表
            if(i<=25){
                //添加小写字母
                //a----97
                chs[i]=(char)(97+i);
            }else{
                //添加大写字母
                //A----65
                //这里要减去26,因为如果i是26,当65+26时就不是想要的大写字母A
                chs[i]=(char)(65+i-26);
            }
        }
        //遍历
       /* for (int i = 0; i < chs.length; i++) {
            System.out.print(chs[i]+" ");
        }
        */
        //定义一个字符串类型的变量,用来记录最终的结果
        String result="";    //长度为0,什么都没有的字符串
        //2.随机抽取四次
        //随机抽取数组中的索引
        Random r=new Random();
        //循环四次
        for (int i = 0; i < 4; i++) {
            //想要的索引是0-51
            int randomIndex=r.nextInt(chs.length);
            //利用随机索引,获取对应的元素
            //System.out.println(chs[randomIndex]);
            //将四个字符拼接起来
            result=result+chs[randomIndex];
        }
        //3.随机抽取一个数字0-9
        int number= r.nextInt(10);
        //将result和number拼接,将结果赋值给reuslt
        result=result+number;
        System.out.println(result);
    }
}

八、案例四:数字元素的复制

分析:

1.定义一个老数组并存储一些元素

2.定义一个新数组的长度和老数组一样

3.遍历老数组,得到老数组里面的每一个元素,依次存入到新数组中

public class Test7 {
    public static void main(String[] args) {
        /*
        需求:
        把一个数组里面的元素复制到另一个数组里
         */
//        分析:
//        1.定义一个老数组并存储一些元素
        int[] arr={1,2,3,4,5};
//        2.定义一个新数组的长度和老数组一样
        int[] newArr=new int[arr.length];
//        3.遍历老数组,得到老数组里面的每一个元素,依次存入到新数组中
        for (int i = 0; i < arr.length; i++) {
            newArr[i]=arr[i];
        }
        //4.数组里面已经存满元素了
        for (int i = 0; i < newArr.length; i++) {
            System.out.println(newArr[i]);
        }
    }
}

九、案例五:评委打分

分析:

1.定义一个数组,用来存储6名评委的打分(0-100)键盘录入

2.求出数组中的最大值

3.求出数组中的最小值

4.求出数组的总和

5.(总和-最大值-最小值)/4

方法:

1.我要干嘛?

定义一个数组,用来存储6名评委的打分(0-100)

2.我需要干什么?

什么也不需要

3.干完了这件事,需不需要返回?

需要返回

注意点:

1.键盘录入评委的打分时,判断打出的分数是不是在0-100之间,如果在这个范围内存这个数据,不在这个范围内,不存这个数据且不做其他的改变.所以要注意存放数据的数组下标++的放置位置.

2.第五步/4,最好不要写死,当数组长度变化时该代码还需要修改,所以最好写成:数组.length-2

小技巧:

变量的批量修改:

选中变量名,点击shift+f6,在修改变量名,就可对变量名批量修改

import java.util.Scanner;
public class Test8 {
    public static void main(String[] args) {
        //1.定义一个数组,用来存储6名评委的打分
        int[] scoreArr=getScores();
        for (int i = 0; i < scoreArr.length; i++) {
            System.out.println(scoreArr[i]);
        }
        //2.求出数组的最大值
        int max=getMax(scoreArr);
        //3.求数组的最小值
        int min=getMin(scoreArr);
        //4.求出数组中6个分数的总和
        int sum=getSum(scoreArr);
        //5.(总和-最大值-最小值)/(长度-2)
        int avg=(sum-max-min)/(scoreArr.length-2);
        //打印结果
        System.out.println("选手的最终得分是:"+avg);
    }
    //求出数组中6个分数的总和
    public static int getSum(int[] scoreArr){
        int sum=0;
        for (int i = 0; i < scoreArr.length; i++) {
            sum=sum+scoreArr[i];
        }
        return sum;
    }
    //求数组的最大值
    public static int getMax(int[] scoreArr){
        int max=scoreArr[0];
        for (int i = 1; i < scoreArr.length; i++) {
            if(scoreArr[i]>max){
                max=scoreArr[i];
            }
        }
        return max;
    }
    //求数组的最小值
    //变量的批量修改
    //选中变量名,点击shift+f6,在修改变量名,就可对变量名批量修改
    public static int getMin(int[] scoreArr){
        int min=scoreArr[0];
        for (int i = 1; i < scoreArr.length; i++) {
            if(scoreArr[i]<min){         //注意在将求最大值的代码复制过来之后,要将这里改为<
                min=scoreArr[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; ) {     //这里的条件控制为空,表示如果录入错误,下标不进行修改,继续在当前下标录入,当录入成功后再进行i++,所以写在下面
            System.out.println("请输入评委的打分:");
            int score=sc.nextInt();
            if(score>=0&&score<=100){
                scores[i]=score;
                i++;            //只有录入了一个合法的数据,才录入,录入成功后才往下录入下一个成绩
            }else{
                System.out.println("成绩超出了范围,继续录入,当前的i为:"+i);
            }
        }
        return scores;
    }
}

十、案例六:数字加密

针对这种数字的批量计算,我们的思路是把这些数字放到数组中,然后再对里面的元素进行运算

分析:

1.把整数中的每一位放到数组中

2.加密

3.把数组里面的每一个数字进行拼接,变成加密之后的结果

public class Test9 {
    public static void main(String[] args) {
        /*
        需求:
        某系统的数字密码(大于0).比如1983,采用加密方式进行传输
        规则如下:
        每位数+5
        再对10求余
        最后将所有数字反转
        得到一串新数字
         */
//        分析:
//        1.把整数中的每一位放到数组中
        int[] arr={1,9,8,3};
//        2.加密(为了让思路更加清晰,我们让每个循环干一件事情)
        //(1)每一位数字+5
        for (int i = 0; i < arr.length; i++) {
            arr[i]=arr[i]+5;
        }
        //(2)再对10求余
        for (int i = 0; i < arr.length; i++) {
            arr[i]=arr[i]%10;
        }
        //(3)将所有数字反转
        //定义两个索引变量,左右两边相互交换,直到左边的索引比右边的索引大或者相等时停止
        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=number*10+arr[i];
        }
        System.out.println(number);
    }
}

接下来针对这道题中的难点进行讲解:

如何将一个整数中的数字每一位放到数组里面?

public class Test10 {
    public static void main(String[] args) {
        /*
        需求:
        把整数每一位都添加到数组中
        大于0的整数
        反向推导
         */
        //需要有一个数组
        //动态初始化(不知道数组元素的时候,但是知道有几个)  静态初始化(知道数组元素)
        //使用动态初始化  int[] arr=new int[数组的长度];
        //数组的长度不知道,所以要计算出
        //1.计算出数组的长度
        int number=12345;
        int temp=number;
        //定义一个变量进行统计
        int count=0;
        while (number!=0){        //当number不等于0时就要去掉
            //每一次循环去掉右边的一个数字
            number=number/10;
            //去掉一次计数器就自增一次
            count++;
             //循环结束之后,count就是数字的个数
        }
        //2.定义数组
        //动态初始化
        int[] arr=new int[count];
        //3.把整数每一位都添加到数组中
        //不能从number中获取数字,因为上面的循环结束后,number的值为0
        //所以还要定义一个变量,临时记录number的值
        int index=arr.length-1;    //注意要把5放到最大索引,所以这里index不是0,而是最大索引
        while(temp!=0){
            //获取temp里面的每一位都添加到数组中
            int ge=temp%10;
            //再去掉右边的那位数字
            temp=temp/10;
            //再把当前获取的个位数添加到数组当中
            //arr[索引]=ge;    所以这里要定义变量索引
            arr[index]=ge;
            index--;
        }
        //验证结果是不是:1 2 3 4 5
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

相关文章
|
11天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
22天前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
42 17
|
13天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
45 3
|
15天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
32 2
|
17天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
19天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
25天前
|
存储 安全 Java
|
23天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
17 3
|
25天前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
|
22天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。