【JAVA模块六------ 综合案例基础巩固】

news2024/9/21 22:45:59

JAVA模块六------ 综合案例基础巩固

  • 1 逢7跳过
  • 2 数组元素求和
  • 3 判断两个数组的内容是否相同
  • 4 查找某个数组元素索引
  • 5 数组元素反转输出:(逆序输出)
  • 6 评委打分
  • 7 随机产生验证码
  • 其他:
    • 方法抽取:

1 逢7跳过

要求:
数字包含7或者是7的倍数的,跳过
控制台打印1-100满足的数字

my:
在这里插入图片描述

百位的判断是不必要的:百位最高是1
continue也不必要:continue语句后没有其他语句了,会自动进行下次循环判断,可以省略

修改后:
在这里插入图片描述

2 数组元素求和

题目要求
在这里插入图片描述

my:
在这里插入图片描述
缺点:只针对该数组的方法,局限性过强(不具有普适性)

使用方法传参(传址)后:
在这里插入图片描述

3 判断两个数组的内容是否相同

题目要求
在这里插入图片描述

在这里插入图片描述

输出结果是:true

4 查找某个数组元素索引

题目要求:
在这里插入图片描述

我的:
在这里插入图片描述

优化后(前提假设,找到后break,后面不再进行遍历):
在这里插入图片描述

但是,如果元素在数组中多次出现

注意:return只能返回一个结果数据,需要返回多个结果怎么办

可以将多个结果存放在一个数组容器当中,将这个数组返回去

那么这个用于存放结果的数组使用哪种初始化

(1)静态初始化:需要知道存放的内容,显然不可能

(2)动态初始化需要知道数组的长度(元素个数):

可以定义一个计数器,对数组中的元素进行遍历
在这里插入图片描述

完整代码:

public class FindSuoyin {
    public static void main(String[] args) {
        int[] arr={19,28,37,46,50,19,19};
        //          0  1  2  3  4  5  6
        int[] results=findSuoyin(19,arr);
        if(results.length==0){
            System.out.println("你要查找的数字在该数组中不存在");
        }else{
            for (int i = 0; i < arr.length; i++) {
                System.out.println(results[i]);
            }
        }
    }
//    查找索引位置
    public static int[] findSuoyin(int number,int[] arr){
//      1 先统计要查找的元素,在数组中出现的个数
        int count=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==number)
                count++;
        }
//      2 根据统计的个数动态初始化数组
        int[] results=new int[count];
//      3 查找并且存储要找元素的索引值
        int index=0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]==number){
             results[index]=i;
             index++;
            }
        }
//       整个结束之后,result数组中存放的就是要找的数字的全部索引值
//       将这个数组返回
        return results;
    }
}

5 数组元素反转输出:(逆序输出)

题目要求
在这里插入图片描述

我的:

在这里插入图片描述

思路:首尾互换
在这里插入图片描述

数组长度为5,需要交换2次(5/2=2)

数组长度为6(偶数次),需要交换3次(6/2=3)

交换的动作重复执行:可以使用循环(循环条件为i<arr.length)

实现方法1:

public class Test5 {
   /*
       已知一个数组arr为{11,22,33,44,55,}
       交换后{55,44,33,22,11}

       1 确定好谁跟谁换:
           第一个和倒数第一个
           第二个和倒数第二个
           第三个和倒数第三个
           arr[i]和arr[arr.length-1-i]
   */
   public static void main(String[] args) {
       int[] arr={11,22,33,44,55};
       for (int i = 0; i < arr.length / 2; i++) {
           int temp=arr[i];
           arr[i]=arr[arr.length-1-i];
           arr[arr.length-1-i]=temp;
       }
       for (int i = 0; i < arr.length; i++) {
           System.out.println(arr[i]);
       }
   }
}

方法二:

设置两个指针:其中一个指向首元素,另一个指向最后一个元素
在这里插入图片描述

指针所指向的位置就进行交换动作,交换之后,两指针分别都向中间移动

思路步骤:

1 定义两个变量,模拟开始和结束两个指针

2 交换

3 每一次交换完成,指针向中间移动(只要首地址所指向的位置<=尾地址所指向的位置就继续移动)

public static void main(String[] args) {
    int[] arr={11,22,33,44,55};

    //模拟首尾两个指针
    int start=0,end=arr.length-1;
    //交换动作
    for(;start<end;start++,end--){
        int temp=arr[start];
        arr[start]=arr[end];
        arr[end]=temp;
    }
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}

6 评委打分

题目要求:
在这里插入图片描述

思路:
1 键盘录入这六个数据(读取)

2 求和,找到最大值,最小值,并减去

3 除法求平均值

初始代码:有bug

public static void main(String[] args) {
    int[] arr=new int[6];
    //1 键盘录入,召唤精灵
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入六个打分:");
    //键盘录入6个数组中于数组中
    for (int i = 0; i < arr.length; i++) {
        System.out.println("请输入第"+(i+1)+"位评委的打分:");
        arr[i]= sc.nextInt();
    }
    //2 求和
    int sum=0;
    for (int i = 0; i < arr.length; i++) {
        sum+=arr[i];
    }
    //3 找最大值
    int max=arr[0];
    for (int i = 1; i < arr.length; i++) {
        if(arr[i]>max)
            max=arr[i];
    }
    //4 找最小值
    int min=arr[0];
    for (int i = 1; i < arr.length; i++) {
        if(arr[i]<min)
            min=arr[i];
    }
    //5 求平均分=(总和-最大值-最小值)/4
    double aver=(sum-max-min)/((arr.length-2)*1.0);
    System.out.println("选手的最终得分为"+aver);
}

精进后:防止录入过大或者负数(分数校验)

public static void main(String[] args) {
    int[] arr=new int[6];
    //1 键盘录入,召唤精灵
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入六个打分:");
    //键盘录入6个数组中于数组中
    for (int i = 0; i < arr.length; i++) {
        System.out.println("请输入第" + (i + 1) + "位评委的打分:");
        int score = sc.nextInt();
        if (score > 0 && score < 100) {
            arr[i] = score;
        } else {
            System.out.println("您的输入有误,请重新输入:");
            i--;
        }
    }
    //求和
    int sum=0;
    for (int i = 0; i < arr.length; i++) {
        sum+=arr[i];
    }
    //3 找最大值
    int max=arr[0];
    for (int i = 1; i < arr.length; i++) {
        if(arr[i]>max)
            max=arr[i];
    }
    //4 找最小值
    int min=arr[0];
    for (int i = 1; i < arr.length; i++) {
        if(arr[i]<min)
            min=arr[i];
    }
    //5 求平均分=(总和-最大值-最小值)/4
    double aver=(sum-max-min)/((arr.length-2)*1.0);
    System.out.println("选手的最终得分为"+aver);
}

再次精进:将各个逻辑放到独立的方法当中去(方法抽取)

public static void main(String[] args) {
    //1 初始化数组
    int[] arr = initDate();
    //2 求和
    int sum = getSum(arr);
    //3 找最大值
    int max = getMax(arr);
    //4 找最小值
    int min = getMin(arr);
    //5 求平均分=(总和-最大值-最小值)/4
    double aver=(sum-max-min)/((arr.length-2)*1.0);
    System.out.println("选手的最终得分为"+aver);
}

private 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;
}

private 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;
}

private static int getSum(int[] arr) {
    int sum=0;
    for (int i = 0; i < arr.length; i++) {
        sum+= arr[i];
    }
    return sum;
}

private static int[] initDate() {
    int[] arr=new int[6];
    //1 键盘录入,召唤精灵
    Scanner sc=new Scanner(System.in);
    System.out.println("请输入六个打分:");
    //键盘录入6个数组中于数组中
    for (int i = 0; i < arr.length; i++) {
        System.out.println("请输入第" + (i + 1) + "位评委的打分:");
        int score = sc.nextInt();
        if (score > 0 && score < 100) {
            arr[i] = score;
        } else {
            System.out.println("您的输入有误,请重新输入:");
            i--;
        }
    }
    return arr;
}

7 随机产生验证码

题目要求
在这里插入图片描述

思路:考虑从数组中随机取出元素

代码实现

public static void main(String[] args) {

    String[] sArr={"noodles","rice","soup"};
                    //0        1       2
    Random r=new Random();

    int i=r.nextInt(sArr.length);//i读取的随机数的范围是0-5但不包含5

    //将随机数当作索引去数组中获取对应的元素
    System.out.println(i);
    System.out.println(sArr[i]);
}

可以用于制作自己吃什么饭,抽奖等…

问题实现:

思路:

1 随机生成验证码

2 将生成的验证码拼接到一个字符串上

3 键盘录入用户输入的字符串

4 和随机生成的字符串进行比较

public static void main(String[] args) {
        char[] chs={
                'a','b','c','d','e',
                'A','B','C','D','R',
                '1','4','8'
        };
        Random r=new Random();
        String checkCode="";

        //产生5个随机字符组成的验证码
        for(int i=1;i<=5;i++){
            int index=r.nextInt(chs.length);
            checkCode+=chs[index];
        }
        System.out.println("产生的验证码为"+checkCode);

        //校验验证码
        System.out.println("请输入验证码");
        Scanner sc=new Scanner(System.in);
        //字符串变量来接收用户键盘录入的验证码
        String inputCode=sc.next();

        //将用户输入和随机生成的验证码进行比对
//        if(checkCode==inputCode){
//
//        }
    }

代码优化:

1 数组进行动态初始化

注意:打印字符数组数组名,输出的结果是字符数组的内容,不是地址(源代码会对字符串进行遍历输出)

2 将模块化的逻辑抽取为方法

public static void main(String[] args) {
        char[] chs = getConents();

        String checkCode = getCheckCode(chs);
        System.out.println("产生的验证码为"+checkCode);

        //校验验证码
        System.out.println("请输入验证码");
        Scanner sc=new Scanner(System.in);
        //字符串变量来接收用户键盘录入的验证码
        String inputCode=sc.next();

        //将用户输入和随机生成的验证码进行比对
//        if(checkCode==inputCode){
//
//        }
    }

    private static String getCheckCode(char[] chs) {
        Random r=new Random();

        String checkCode="";

        //产生5个随机字符组成的验证码
        for(int i=1;i<=5;i++){
            int index=r.nextInt(chs.length);
            checkCode+= chs[index];
        }
        return checkCode;
    }

    private static char[] getConents() {
        char[] chs=new char[26+26+10];
        int index=0;
//        使用循环将数组动态初始化
        for(char c='a';c<='z';c++) {
            chs[index]=c;
            index++;
        }

        System.out.println();

        for(char c='A';c<='Z';c++){
            chs[index]=c;
            index++;
        }

        for(char c='0';c<='9';c++){
            chs[index]=c;
            index++;
        }
        return chs;
    }

其他:

方法抽取:

抽取某段逻辑为独立的方法快捷键:ctrl+alt+m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/494568.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国产光伏仪器 6581太阳能电池板伏安特性测试仪

6581太阳能电池板伏安特性测试仪主要用于太阳能电池板生产的最终测试&#xff0c;也可以作为层压前测试使用&#xff0c;能大大提高一次封装成品率。该测试仪适合于单晶、多晶、薄膜等多种电池组件&#xff0c;可进行I-V曲线、P-V曲线、短路电流、开路电压、峰值功率等全部参数…

Hive SQL on Flink 构建流批一体引擎

摘要&#xff1a;本文整理自阿里巴巴开发工程师罗宇侠、阿里巴巴开发工程师方盛凯&#xff0c;在 Flink Forward Asia 2022 流批一体专场的分享。本篇内容主要分为五个部分&#xff1a; 1. 构建流批一体引擎的挑战 2. Hive SQL on Flink 3. 流批一体引擎的收益 4. Demo 5. 未来…

做到“有效沟通”,帮你达到这3个目的

在项目管理中&#xff0c;团队沟通是至关重要的。团队成员之间应该建立良好的沟通机制&#xff0c;及时沟通和协调问题&#xff0c;避免出现问题后甩锅的情况。 在实际项目中&#xff0c;很多问题出现的原因是团队沟通不畅&#xff0c;项目经理需要加强团队沟通的重要性&…

K8S二进制安装报错及各个组件功能介绍

目录 一、K8S安装二、安装时遇到的几个问题2.1、Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kuberne…

C语言复习笔记2

1.变量命名只能以数字、字母、下划线组成并且不能以数字开头。 #include<stdio.h> #include<unistd.h>//变量名只能由数字字母下划线组成&#xff0c;不能以数字开头 int main() {//int 2b;return 0; }2.内存中保存的是补码 0的补码取反得补码再求源码是-1。 源码…

提升论文影响力的方法

论文发表后&#xff0c;还有一些重要的工作去做&#xff0c;那就是去积极宣传和推广自己的论文&#xff0c;提高自己论文的影响力。这类似于一个电影上映后&#xff0c;主演们还得去做宣传一样&#xff0c;要想办法推销自己的作品。本文将介绍提升论文影响力的方法。 1. 开源数…

xray简单使用指南

前言收到需求如下 用户还需要一个报告 询问了群里的小伙伴推荐使用xray进行扫描 一、下载 https://github.com/chaitin/xray/releases windows下载amd64即可 解压后进入其目录下执行exe程序&#xff0c;帮我们生成一些yaml文件 生成 ca 证书 .\xray_windows_amd64.exe g…

创客匠人:五月,爱成长的力量,有爱必赢

2023年5月4日&#xff0c;创客匠人第六十九届铁军训练营在厦门举办&#xff0c;由创客匠人CEO蒋洪波、CSO张潇峰及HRM何巧婷为厦门总部的伙伴们带来精彩的回顾总结及主题分享。 一、四月总结 为了明确前进奋斗的方向&#xff0c;进一步提升团队战斗力&#xff0c;从而更好地帮助…

Altium Designer中如何在顶层中添加对应端口

转载说明&#xff1a; 大众深度科普 https://jingyan.baidu.com/article/c33e3f4889f327ea15cbb584.html 版权归原作者所有&#xff1b;感谢原作者的分享&#xff1b; 转载到此&#xff0c;主要为了后期查看方便&#xff1b; 本经验简要介绍Altium Designer中如何在顶层中添…

SpringBoot【开发实用篇】---- 热部署

SpringBoot【开发实用篇】---- 热部署 1. 手动启动热部署2. 自动启动热部署3. 参与热部署监控的文件范围配置4. 关闭热部署 什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄…

人类创新发展的四个阶段:三个核心和一个扩展

纵观人类的发展史&#xff0c;始终伴随着人类的创新过程&#xff0c;这也是人类与其他生物体的最大的区别&#xff0c;别的生物体也就是可以使用工具或者模仿别的生物的动作来制造简单的工具&#xff0c;对工具进行简单的拼接&#xff0c;只有人类是可以进行真正的创造出这个自…

记录-Symbol学习笔记

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 Symbol是JavaScript中的原始数据类型之一&#xff0c;它表示一个唯一的、不可变的值&#xff0c;通常用作对象属性的键值。由于Symbol值是唯一的&#xff0c;因此可以防止对象属性被意外地覆盖或修改。…

Word下划线怎么打?速速get这5个实用方法!

案例&#xff1a;Word下划线怎么打&#xff1f; 【朋友们&#xff0c;最近在写毕业论文&#xff0c;封面文字的下划线打了好久都打不出来&#xff0c;请问大家Word下划线是怎么打的呀&#xff1f;】 在Microsoft Word中&#xff0c;打下划线是一种常见的操作&#xff0c;它可…

Python小姿势 - ## Python与数据库

Python与数据库 简介 当今&#xff0c;数据库是计算机应用中最重要的部分。几乎所有的大型应用都要用到数据库&#xff0c;比如银行、电商、航空、政府、医疗、教育、科研等。数据库的目的是存储数据&#xff0c;并且能够根据用户的需求提供数据。 数据库管理系统&#xff08;D…

QQ音乐银河音效技术实践——音乐重放效果的补偿与修饰

音效渲染是音频或音乐播放器最为重要的后处理模块之一。LiveVideoStackCon 2022 北京站邀请到腾讯音乐银河音效开发负责人——闫震海&#xff0c;为大家介绍银河音效在QQ音乐播放器中的创新应用&#xff0c;包括空间环绕效果和音效制作工具等内容。 文/闫震海 编辑/LiveVideoSt…

取代你的可能不是AI,而是比你更会使用AI的人

1、背景 从开始了解AI到现在已经1个月了&#xff0c;最明显的就是&#xff0c;产品层出不穷&#xff0c;以前只有技术人员才关系AI&#xff0c;现在各行各业都在关系AI&#xff0c;都希望通过它提高生产力和创造力&#xff1b; 在当今大数据和人工智能时代&#xff0c;职场和企…

MySQL基础(一)数据库概述

1. 为什么要使用数据库 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多通过各种关系数据库…

Linux网络基础-2

在之前的网络基础博客中&#xff0c;我们对网络的基本概念进行了一个简单的介绍&#xff0c;那么接下来的网络内容中&#xff0c;我们将对网络通信中的典型协议进行详细解释。 我们根据网络协议中的分层来对典型协议进行注意介绍&#xff0c;不过对于物理层的传输我们不做考究…

docker安装mongodb出现bash: mongo: command not found

安装MongoDB容器 -e MONGO_INITDB_ROOT_USERNAME创建管理员账号 -e MONGO_INITDB_ROOT_PASSWORD123456创建密码 映射容器服务的 27017 端口到宿主机的 27017 端口 docker run -d -p 27017:27017 --name mongodb -e MONGO_INITDB_ROOT_USERNAMEadmin -e MONGO_INITDB_ROOT_PAS…

简单分享微信里怎么添加投票活动

今天小编要分享是投票活动&#xff0c;怎么做投票活动&#xff0c;首先要做投票活动是需要用到第三方平台&#xff0c;这样我们才可以快速的制作出投票活动链接&#xff0c;其次我们是在微信小程序上添加投票活动的话&#xff0c;我们需要有微信小程序平台&#xff0c;然后把二…