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

简介: 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]+" ");
        }
    }
}

相关文章
|
10月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
9月前
|
移动开发 监控 小程序
java家政平台源码,家政上门清洁系统源码,数据多端互通,可直接搭建使用
一款基于Java+SpringBoot+Vue+UniApp开发的家政上门系统,支持小程序、APP、H5、公众号多端互通。涵盖用户端、技工端与管理后台,支持多城市、服务分类、在线预约、微信支付、抢单派单、技能认证、钱包提现等功能,源码开源,可直接部署使用。
679 24
|
9月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
545 18
|
9月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
651 8
|
9月前
|
安全 前端开发 Java
使用Java编写UDP协议的简易群聊系统
通过这个基础框架,你可以进一步增加更多的功能,例如用户认证、消息格式化、更复杂的客户端界面等,来丰富你的群聊系统。
325 11
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
Java与生成式AI:构建内容生成与创意辅助系统
生成式AI正在重塑内容创作、软件开发和创意设计的方式。本文深入探讨如何在Java生态中构建支持文本、图像、代码等多种生成任务的创意辅助系统。我们将完整展示集成大型生成模型(如GPT、Stable Diffusion)、处理生成任务队列、优化生成结果以及构建企业级生成式AI应用的全流程,为Java开发者提供构建下一代创意辅助系统的完整技术方案。
427 10
|
10月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
283 11
|
9月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
375 4
|
9月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
1094 4
|
9月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
499 5