JAVA基础知识巩固训练

news2024/10/5 13:59:11

目录

1. 案例一:逢 7 跳过 

2. 案例二:数组元素求和

3. 案例三:判断两个数组是否相同⭐

4. 案例四:查找元素在数组中的索引

5. 案例五:数组元素反转

6. 案例六:评委打分

7. 案例七:随机产生验证码

8. 面试题⭐ 


1. 案例一:逢 7 跳过 

需求:

朋友聚会的时候可能会玩一个游戏:逢七过。​       

规则是:从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过。​       

为了帮助大家更好的玩这个游戏,这里我们直接在控制台打印出1-100之间的满足逢七必过规则的数据。​

public class Test1 {

    public static void main(String[] args) {
        knockSeven();
    }

    /*
        需求: 在控制台打印出 1~100 之间满足逢七过规则的数据

        分析:
                1. 通过循环获取到1~100之间的每一个数字
                2. 数值拆分, 拆分出个位和十位
                3. 根据规则加入if判断
                        if(ge == 7 || shi == 7 || i % 7 == 0)
                4. 打印出满足规则的数据
     */

    public static void knockSeven() {
        // 1. 通过循环获取到1~100之间的每一个数字
        for(int i = 1; i <= 100; i++){
            // 2. 数值拆分, 拆分出个位和十位
            int ge = i % 10;
            int shi = i / 10 % 10;
            // 3. 根据规则加入if判断
            if(ge == 7 || shi == 7 || i % 7 == 0){
                // 4. 打印出满足规则的数据
                System.out.println(i);
            }
        }
    }
}

 

2. 案例二:数组元素求和

需求:

有这样的一个数组,元素是 {68,27,95,88,171,996,51,210}

求出该数组中满足要求的元素和

要求是:求和的元素个位和十位都不能是7,并且只能是偶数

public class Test2 {
    public static void main(String[] args) {

        int[] arr = {68, 27, 95, 88, 171, 996, 51, 210};

        int evenNumberSum = getEvenNumberSum(arr);

        System.out.println(evenNumberSum);
    }

    /*
        需求 :
                有这样的一个数组,元素是 {68,27,95,88,171,996,51,210}
                求出该数组中满足要求的元素和
                要求是:求和的元素个位和十位都不能是7,并且只能是偶数
     */
    public static int getEvenNumberSum(int[] arr) {

        // 1. 定义求和变量
        int sum = 0;

        // 2. 遍历数组, 获取到内部的每一个元素
        for (int i = 0; i < arr.length; i++) {
            // arr[i] : 数组中的每一个元素
            // 3. 将每一个元素, 拆分出个位, 十位
            int ge = arr[i] % 10;
            int shi = arr[i] / 10 % 10;
            // 4. 判断
            if(ge != 7 && shi != 7 && arr[i] % 2 == 0){
                // 5. 求和
                sum += arr[i];
            }
        }

        return sum;
    }
}

 

3. 案例三:判断两个数组是否相同

  1. 基本数据类型 : 比较数据值
  2. 引用数据类型 : 比较地址值

需求:

定义一个方法,用于比较两个数组的内容是否相同

要求 :  长度, 内容, 顺序完全相同

package com.itheima.test;

public class Test3 {
    /*
        == :
                1. 基本数据类型 : 比较数据值
                2. 引用数据类型 : 比较地址值
     */
    public static void main(String[] args) {
        int[] arr1 = {11, 22, 33};
        int[] arr2 = {11, 22, 33, 44};

        boolean result = checkArrayContent(arr1, arr2);

        System.out.println(result);
    }

    /*
        需求: 定义一个方法, 比较两个数组的内容是否相同
        要求: 长度, 内容, 顺序完全相同
     */
    public static boolean checkArrayContent(int[] arr1, int[] arr2) {
        // 1. 比较两个数组的长度
        if (arr1.length != arr2.length) {
            return false;
        }

        // 2. 比较两个数组的元素内容
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]) {
                return false;
            }
        }

        // 3. 如果代码能够走到这里, 代表两个数组长度, 内容, 顺序完全相同
        return true;
    }
}

 

4. 案例四:查找元素在数组中的索引

需求:

设计一个方法, 查找元素在数组中的索引位置

已知一个数组 arr = {19, 28, 37, 46, 50};  

键盘录入一个数据,查找该数据在数组中的索引。

并在控制台输出找到的索引值。

如果没有查找到,则输出-1

public class Test4_1 {
    public static void main(String[] args) {
        int[] arr = {19, 28, 37, 46, 50};

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要查找的元素:");
        int num = sc.nextInt();

        int index = getIndex(num, arr);

        System.out.println(index);
    }

    /*
        需求:
            设计一个方法, 查找元素在数组中的索引位置

            查找元素, 在数组中第一次出现的索引位置.

            已知一个数组 arr = {19, 28, 37, 46, 50};
            键盘录入一个数据,查找该数据在数组中的索引。
            并在控制台输出找到的索引值。
            如果没有查找到,则输出-1
     */
    public static int getIndex(int num, int[] arr) {
        // 1. 假设要查找的元素, 在数组中就是不存在的
        int index = -1;
        // 2. 遍历数组, 获取内部的每一个元素
        for (int i = 0; i < arr.length; i++) {
            // 3. 比较
            if (arr[i] == num) {
                // 4. 找到了, 让index变量记录正确的索引位置
                index = i;
                break;
            }
        }

        return index;
    }
}

 

5. 案例五:数组元素反转

需求:

已知一个数组 arr = {11, 22, 33, 44, 55}; 用程序实现把数组中的元素值交换,

交换后的数组 arr = {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。

public class Test5 {
    /*
        已知一个数组 arr = {11, 22, 33, 44, 55}; 用程序实现把数组中的元素值交换,
        交换后的数组 arr = {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。

        1. 确定好谁跟谁换

                第一个和倒数第一个 :  arr[0]  arr[arr.length-1-0]
                第二个和倒数第二个 :  arr[1]  arr[arr.length-1-1]
                第三个和倒数第三个 :  arr[2]  arr[arr.length-1-2]
                ...

                arr[i]  arr[arr.length-1-i]

        2. 定义三方变量, 套入公式
     */
    public static void main(String[] args) {

        int[] arr = {11, 22, 33, 44, 55};

        reverseArray2(arr);


        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    private static void reverseArray2(int[] arr) {
        for(int start = 0, end = arr.length - 1; start < end; start++, end--){
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
    }

    private static void reverseArray1(int[] arr) {
        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;
        }
    }
}

6. 案例六:评委打分

需求:

在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。​       

选手的最后得分为:去掉一个最高分和一个最低分后

import java.util.Scanner;

public class Test6 {
    /*
        需求:
              在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
              选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值

              1. 基本实现 (不考虑分数校验)
              2. 校验键盘录入的分数是否是0~100之间
              3. 抽取方法
     */
    public static void main(String[] args) {

        int[] arr = initData();

        int sum = getSum(arr);

        int max = getMax(arr);

        int min = getMin(arr);

        // 5. 求平均分 (总合 - 最大值 - 最小值) / 4
        double avg = ((sum - max - min) * 1.0) / (arr.length - 2);

        System.out.println("选手的最后得分为:" + avg);

    }

    /**
     * 数组中找最小值
     */
    private static int getMin(int[] arr) {
        // 4. 求最小值
        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) {
        // 3. 求最大值
        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) {
        // 2. 求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }

    /**
     * 此方法用于键盘录入6个评委的分数
     */
    private static int[] initData() {
        int[] arr = new int[6];

        // 1. 键盘录入6个评委的打分
        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("您的分数输入有误, 请检查是否是0~100之间的");
                i--;
            }
        }
        return arr;
    }
}

 

7. 案例七:随机产生验证码

 

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

public class Test7 {
    /*
        需求: 请从26个英文字母(大小写都包含),以及数字0-9中,随机产生一个5位的字符串验证码并打印在控制台
        效果: uYq8I,3r4Zj

        注意事项: 打印字符类型数组名, 不会看到地址值, 而是元素的内容
     */
    public static void main(String[] args) {

        char[] chs = getContents();

        String checkCode = getCheckCode(chs);

        System.out.println("产生的验证码为:" + checkCode);

    }

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

        String checkCode = "";

        for(int i = 1; i <= 5; i++){
            int randomIndex = r.nextInt(chs.length);
            checkCode += chs[randomIndex];
        }
        return checkCode;
    }

    private static char[] getContents() {
        char[] chs = new char[26 + 26 + 10];

        int index = 0;

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

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

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

 

8. 面试题⭐ 

 面试题: 实现两个变量的数据交换, 不允许定义第三方变量

 

 使用异或实现

 /*
        ^ 异或 :

                特点:
                        1. 相同为false, 不同为true
                        2. 一个数字, 被另外一个数字异或两次, 该数本身不变

        异或操作数值的运算过程 :

            1. 将需要运算的数据, 转换为二进制数据

                    0000 1010       10
                    0000 0101       5

            2. 将二进制数据的0当做为false, 1当做为true, 运算

                    0000 1010
                ^   0000 0101
            --------------------
                    0000 1111

            3. 将运算后的二进制数据, 转换为十进制
     */
public class SwapDemo1 {

    /*
        思路: 今后只要涉及到数据交换, 联想到第三方的变量

                int a = 10;
                int b = 20;

                int c = a;
                a = b;
                b = c;

                System.out.println("a=" + a);   // 20
                System.out.println("b=" + b);   // 10

       
     */

 
    public static void main(String[] args) {
        int a = 10;
        int b = 20;

        a = a ^ b;  // a = 10 ^ 20;
        b = a ^ b;  // b = 10 ^ 20 ^ 20;            b = 10
        a = a ^ b;  // a = 10 ^ 20 ^ 10;            a = 20

        System.out.println("a=" + a);   // 20
        System.out.println("b=" + b);   // 10
    }
}

import java.util.Random;

public class RandomDemo {
    /*
        从数组中随机取出一个元素

            根据数组的长度, 产生一个随机数, 拿着这个随机数, 当做索引去数组中获取元素
     */
    public static void main(String[] args) {

        String[] sArr = {"米饭", "馒头", "包子", "麻花", "面条"};
                       //  0      1      2       3       4

        Random r = new Random();

        int i = r.nextInt(sArr.length);           //  0  1  2  3  4

        System.out.println(i);

        System.out.println(sArr[i]);


    }
}

 

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

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

相关文章

后端人眼中的Vue(五)

七、Vue生命周期 ​ Vue的生命周期指的是Vue实例在页面中创建到销毁整个过程。Vue提供了在各个生命周期的钩子&#xff0c;钩子也叫Vue生命周期函数。这些生命周期函数是伴随着Vue实例创建、销毁的过程中自动触发的&#xff08;不需要人为手动触发&#xff09;。Vue实例生命周期…

产业互联网:补齐互联网的「短板」,重启互联网的「进化」

尽管在互联网时代出现了诸多的乱象&#xff0c;但是&#xff0c;我们依然无法否认互联网时代给人们的生产和生活带来的影响和改变。即使如此&#xff0c;我们依然无法否认互联网本身其实是存在着诸多的问题和弊病的&#xff0c;这些问题和弊病所导致的一个最为直接的结果&#…

【opencv】二维面找角点/关键点 实现

every blog every motto: You can do more than you think. 0. 前言 二维面找角点/关键点 实现 1. 正文 1.1 前提 1.1.1 显示函数 def show(arr):plt.imshow(arr)plt.show()def cvshow(arr):cv2.namedWindow(a, 0)cv2.imshow(a, arr)cv2.waitKey(0)cv2.destroyAllWindows…

通关算法题之 ⌈链表⌋

链表 删除元素 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]c…

2022 IoTDB Summit:宝武智维徐少锋《Apache IoTDB 在宝武装备远程智能运维平台中的使用案例》...

12 月 3 日、4日&#xff0c;2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本&#xff0c;并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例&#xff0c;深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态&#…

01【Vector CP】- 详解PN局部网络管理

Partial Networking概述 Partial Networking适用的ECU类型: 总线上依然有通信ECU关闭通信堆栈ECU要求降低功耗 Note:Partial Networking功能及其所有子功能是可选的,必须进行配置。为了控制此类ECU的关断和唤醒,CAN NM提供了一种额外的算法: NM PDU 消息中的用户数据部分…

java命名规范

Java总体命名规范1、项目名全部小写2、包名全部小写3、类名首字母大写&#xff0c;其余组成词首字母依次大写&#xff0c;驼峰命名4、变量名&#xff0c;方法名首字母小写&#xff0c;如果名称由多个单词组成&#xff0c;除首字母外的每个单词的首字母都要大写&#xff0c;保证…

企业数字化转型的关键一步,建立数据意识

数字化给社会带来的巨大的科技革命和产业革命&#xff0c;让数字经济成为新的高速增长的国民经济支柱&#xff0c;让数据变为第五大生产要素&#xff0c;发挥巨大价值&#xff0c;成为企业重要资产。不仅如此&#xff0c;在数字化的影响下&#xff0c;数字化转型成为了个人、机…

ue4.27空项目打包不卡ue5.1空项目打包运行卡的要命研究测试

知乎上有人提问 lumen是如何做到不卡顿的,我却不以为然,我的显卡虽然算不上好显卡,但是也不至于独立显卡一个空项目都玩不起吧,打个cf,玩腾讯模拟器和平精英吃鸡肯定还是会很流畅的. 一个空项目都卡,怎么能说是我电脑配置问题呢??? 再来看提示 image.pngimage.png反射设置的…

2023 过春年,烟花依然了无缘;这能难倒程序猿?一键三连过大年!

效果图镇楼 序 不知道是在什么时候&#xff0c;济南就开始都在传&#xff1a;“今年不再限制放烟花啦&#xff01;”。一些集市上也开始有了售卖烟花的摊子 大家都很兴奋&#xff0c;很多小伙伴开始购买烟花。特别是今年特别火的 “加特林 &#x1f631;” 但是大家兴奋劲还没…

<C++>红黑树

文章目录1. 红黑树的概念2. 红黑树的性质3. 红黑树节点定义4. 红黑树的插入操作5. 红黑树的验证6. 红黑树与AVL树的比较7. 红黑树模拟实现STL中的map与set1. 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xf…

小程序管理还能这样做,让小程序管理更高效

说起小程序&#xff0c;作为开发者或者企业用户不得不面临一个问题就是&#xff0c;需要小程序承载的业务越来越多的时候&#xff0c;小程序的数量也呈现增长&#xff0c;随之而来的就是小程序开发、维护等一系列管理中会出现的问题。 包括到小程序的代码包管理、小程序上下架…

Toolwtech Graphics3D.NET 2.0.x专业版Crack

您是否正在寻找一种易于使用、功能强大且 100% 托管的 .NET 组件来快速开发 3D 图形或 3D 数据可视化应用程序&#xff1f;请尝试 Graphics3D.NET。使用 Graphics3D.NET&#xff0c;您可以在几分钟内开发出专业的 3D 可视化应用程序。 Graphics3D.NET 特点&#xff1a; * 100% …

点亮 LED

1.在 Linux 系统下&#xff0c;一切皆文件&#xff01;应用层如何操控底层硬件&#xff0c;同样也是通过文件 I/O 的方式来实现。设备文件通常在/dev/目录下&#xff0c;我们也把/dev 目录下的文件称为设备节点。设备节点并不是操控硬件设备的唯一途径&#xff0c;除此之外&…

Vue模板语法(二)

Vue条件语句 1、v-if、v-else、v-else-if v-if、v-else、v-else-if用于根据条件来渲染某一块的内容&#xff1a; 这些内容只有在条件为true时&#xff0c;才会被渲染出来&#xff1b;这三个指令与JavaScript的条件语句if、else、else if类似&#xff1b; v-if的渲染原理&a…

单片机开发---ESP32-S3模块上手

背景介绍 想起来之前做的半成品单片机游戏机&#xff0c;又想继续做一个&#xff0c;不过之前那个单片机驱动屏幕速率太低&#xff0c;已经无法改进了。所以这次斥巨资购买了一款顶配的ESP32S开发板&#xff0c;做个简单的游戏机&#xff0c;没问题。 完整介绍链接 这花花绿绿…

通过logstash将Redis数据写入ElasticSearch

点击上方蓝字关注我使用logstash将Redis中数据自动同步至ES中1. 部署Redis上传编译好的Redis二级制安装包&#xff0c;使用redis用户启动redis即可具体编译安装过程可参考https://mp.weixin.qq.com/s/RaWy0sqRxcAti1qbv-GbZQ2. 部署logstash下载二进制安装包wget https://ar…

HTTP FLV交互流程及实例解析

HTTP FLV交互流程及实例解析 文章目录HTTP FLV交互流程及实例解析HTTP FLV传输方式HTTP FLV 抓包分析结束语HTTP FLV传输方式 前文已经介绍过&#xff0c;HTTP FLV利用了一个HTTP的协议约定&#xff0c;http 的content-length头字段如果不存在&#xff0c;则客户端就会一直接收…

ESP32-Camera性能(简单)测试评估

TOC 1. ESP32-Camera简介 最近因为接触了ESP32摄像头相关的资料和信息&#xff0c;稍微简单整理下&#xff0c;希望对该方案有兴趣的朋友可以有所帮助。 1.1 资料&信息 The Internet of Things wit ESP32ESP32-S Series开发模组Github: ESP32-Camera 1.2 ESP-EYE摄像头…

别忘记我:通过局部-全局内容建模进行文本擦除方法

本文简要介绍了发表于ECCV 2022的论文“Don’t Forget Me: Accurate Background Recovery for Text Removal via Modeling Local-Global Context”的相关工作。该论文针对文本擦除中存在的复杂背景修复的问题&#xff0c;提出了CTRNet&#xff0c;它利用局部和全局的语义建模提…