Java循环综合案例

news2024/11/17 3:29:55

文章目录

  • Java循环综合案例
    • 案例一:逢 7 跳过
    • 案例二:数组元素求和
    • 案例三:判断两个数组是否相同
    • 案例四:查找元素在数组中的索引
    • 案例五:数组元素反转
    • 案例六:评委打分
    • 案例七:随机产生验证码

Java循环综合案例

案例一:逢 7 跳过

需求:

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

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

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

分析:

  • 通过循环获取到1~100之间的每一个数字
  • 数值拆分,拆分出个位和十位
  • 格局规则加入 if 判断
  • 打印满足规则的数据

代码实现:

package cn.edu.hgu.test;

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

    /*
        在控制台打印出1-100之间的满足逢七必过规则的数据
     */
    public static void knockSeven() {
        for (int i = 1; i <= 100; i++) {
            int ge = i % 10;
            int shi = i / 10 % 10;

            if (ge == 7 || shi == 7 || i % 7 == 0) {
                System.out.println(i);
            }
        }
    }
}

输出结果为:

image-20230126164023558

案例二:数组元素求和

需求:

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

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

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

代码实现:

package cn.edu.hgu.test;

public class Test2 {
    public static void main(String[] args) {
        int[] arr = {68, 27, 95, 88, 171, 996, 51, 210};
        int sum = getEvenNumberSum(arr);
        System.out.println("满足条件的元素和为:"+sum);
    }


    public static int getEvenNumberSum(int[] arr) {
        int sum = 0;

        for (int i = 0; i < arr.length; i++) {
            int ge = arr[i] % 10;
            int shi = arr[i] / 10 % 10;

            if (ge != 7 && shi != 7 && arr[i] % 2 == 0) {
                sum += arr[i];
            }
        }
        return sum;
    }


}

输出结果为:

image-20230126165926478

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

需求:

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

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

分析:

==

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

代码实现:

package cn.edu.hgu.test;

public class Test3 {
    public static void main(String[] args) {
        int[] arr1 = {11, 22, 33};
        int[] arr2 = {11, 22, 33};

        boolean b = checkArrayContent(arr1, arr2);
        System.out.println(b);
    }

    public static boolean checkArrayContent(int[] arr1, int[] arr2) {
        if (arr1.length != arr2.length) {
            return false;
        }

        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i] != arr2[i]) {
                return false;
            }
        }

        return true;
    }
}

输出结果为:

image-20230126171417611

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

需求:

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

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

键盘录入一个数据,查找该数据在数组中的索引,并在控制台输出找到的索引值,如果没有查找到,则输出-1。

代码实现:

package cn.edu.hgu.test;

import java.util.Scanner;

public class Test4 {

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

    private static int getIndex(int num, int[] arr) {
        int index = -1;

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == num) {
                index = i;
                break;
            }
        }

        return index;

    }

}

输出结果为:

image-20230126194208382

但是这样只能查找在元素第一次在数组中出现的位置,下面对代码进行改进:

package cn.edu.hgu.test;


public class Test4_2 {

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

        int[] results = getIndex(28, arr);

        if (results.length == 0) {
            System.out.println("您要查找的元素,在数组中不存在");
        } else {
            for (int i = 0; i < results.length; i++) {
                System.out.println(results[i]);
            }
        }
    }

    private static int[] getIndex(int num, int[] arr) {
        int count = 0;

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == num) {
                count++;
            }
        }

        int[] results = new int[count];

        int index = 0;

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == num) {
                results[index] = i;
                index++;
            }
        }

        return results;

    }

}

输出结果为:

image-20230126200903477

思路积累:

问题:当一个方法运行结束后,有多个结果需要返回,怎么处理?

回答:可以将多个结果,存入一个数组容器,将数组返回。

案例五:数组元素反转

需求:

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

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

需求: 实现两个变量的数据交换

int a = 10;

int b = 20;

方法一:定义中间变量:

image-20230126211627540

代码:

package cn.edu.hgu.demo;

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

        int a = 10;
        int b = 20;
        System.out.println("交换前:");
        System.out.println("a = " + a);
        System.out.println("b = " + b);

        int temp = a;
        a = b;
        b = temp;

        System.out.println("交换后:");
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

输出结果为:

image-20230126212322453

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

方法二:使用 ^(异或) 运算符

特点:

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

代码

package cn.edu.hgu.demo;

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

        System.out.println("交换前:");
        System.out.println("a = " + a);
        System.out.println("b = " + b);

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

        System.out.println("交换后:");
        System.out.println("a = " + a);
        System.out.println("b = " + b);

    }
}

案例实现:

package cn.edu.hgu.test;

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

        reverseArray2(arr);

    }

    /*
        方法二:双指针
     */
    private static void reverseArray2(int[] arr) {
        int start = 0;
        int 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]);
        }
    }

    /**
     * 方法一:循环遍历
     */
    private static void reverseArray1(int[] arr) {
        int len = arr.length;

        for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[i];
            arr[i] = arr[len - 1 - i];
            arr[len - 1 - i] = temp;
        }

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

案例六:评委打分

需求:

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

选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值

代码如下:

package cn.edu.hgu.test;

import java.util.Scanner;

public class Test6 {
    public static void main(String[] args) {
        int[] arr = initData();

        double sum = getSum(arr);

        int max = getMax(arr);
        System.out.println("最大值为:" + max);

        int min = getMin(arr);
        System.out.println("最小值为:" + min);

        //5.求平均分
        double avg = (sum - max - min) / (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 (min > arr[i]) {
                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 (max < arr[i]) {
                max = arr[i];
            }
        }
        return max;
    }

    /**
     * 此方法用于数组求和
     */
    private static double getSum(int[] arr) {
        //2.求和
        double 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.键盘录入成绩
        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;
    }
}

输出结果为:

image-20230126220621450

案例七:随机产生验证码

image-20230123220758811

需求:

请从26个英文字母(大小写都包含),以及数字0-9中,随机产生一个5位的字符串验证码并打印在控制台

效果:uYq8I,3r4Zj

代码实现:

package cn.edu.hgu.test;

import java.util.Random;

public class Test7 {
    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 index = r.nextInt(chs.length);
            checkCode += chs[index];
        }
        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;
    }
}

输出结果为:

image-20230126222037399

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

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

相关文章

那些年我们拿下了 Zynq

小菜鸟的 Zynq 学习经验分享~ 资料来源&#xff1a;黑金 Zynq7035 开发板配套资料&#xff0c;完全适合于 Zynq 学习。 获取方式&#xff1a;【51爱电子】回复【Zynq7000】即可获取资料链接&#xff01;本资料仅供学习使用&#xff0c;切勿商用。 另外四个是关于 Altera FPGA…

跨域和cookie

本文以前端的视角来探讨浏览器的跨域和cookie问题。 一、跨域 跨域简介&#xff1a; 为什么会出现跨域&#xff1f; 出于浏览器的同源策略限制&#xff0c;浏览器会拒绝跨域请求。 什么情况下出现跨域&#xff1f; 不同源就会跨域。同源即&#xff1a;协议、域名、端口号…

图文详解:箭头函数与常规函数的this指向问题

函数中this的指向问题特别容易让人迷糊&#xff0c;这里用示例来指点迷津&#xff0c;走出迷茫。 常规函数下的this指向 1. 纯粹的函数调用 function test(name) { console.log(name) console.log(this) } test(zjcopy) ; test.call(zjcopy, cuclife-2) ; test.call(fal…

pytesseract 安装错误总结

项目场景&#xff1a; 使用eclipse调用pytesseract接口&#xff0c;进行OCR识别。 在anaconda的python3.6.4版本&#xff0c;安装配置pytesseract 问题描述 pip install pytesseract 报错 错误提醒&#xff1a;pytesseract requires Python >3.7 but the running Python…

【数据结构】顺序栈的原理及实现

【数据结构】顺序栈的原理及实现 1.什么是栈 栈它是一种先进后出的有序列表数据结构。栈是线性表里的元素插入和删除只能在该线性表的同一端进行的一种特殊线性表。该线性表的插入和删除都叫栈顶&#xff0c;也就是变化的一端。另一端是固定不变的成为栈底。根据下图可以看出…

《高性能MySQL》——架构与历史(笔记)

文章目录一、MySQL架构与历史1.1.1 连接管理与安全性1.1.2 优化与执行1.2 并发控制1.2.1 读写锁1.2.2 锁粒度&#xff08;锁模式&#xff09;表锁(table lock)行级锁(row lock)1.3 事务1.3.1 隔离级别READ UNCOMITTED (读未提交)READ COMMITTED (读提交)REPEATABLE READ (可重复…

初识C++(学习计划)

前言 基于对C语言的学习&#xff0c;我将进一步学习C的相关知识。 我们在使用C语言时创建的是.c文件&#xff0c;使用C使用的是.cpp文件&#xff0c;其中p——plus&#xff08;加&#xff0c;的意思&#xff09;&#xff0c;所以cpp就是c。 C是为了解决一些C语言不能解决的问题…

SpringBatch使用(一)

一、SpringBatch简介 1、Spring Batch是一个轻量级&#xff0c;全面的批处理框架&#xff0c;旨在开发对企业系统日常运营至关重要的强大批处理应用程序。Spring Batch构建了人们期望的Spring Framework特性&#xff08;生产力&#xff0c;基于POJO的开发方法和一般易用性&…

docker安装elasticsearch kibana 8.6.0(设置密码+汉化+ik分词器)

安装eskibana安装:拉取镜像并安装设置密码汉化配置ik分词器安装: 记得开放使用的端口,或者关闭防火墙 提示:需要提升虚拟机或者服务器的内存到8G以上 拉取镜像并安装 docker pull elasticsearch:8.6.0 docker pull kibana:8.6.0docker network create es-netdocker run -it…

Itext7在PDF指定位置添加电子公章

目录 1. 电子公章的制作 2. java工具keytool生成p12数字证书文件 3. pom依赖 4. 实体类 5. 工具类及测试示例 6. 效果 1. 电子公章的制作 做章网站&#xff1a;http://seal.biaozhiku.com/ 我们选择圆形印章 然后输入公司名&#xff0c;输入章名输入编码然后点击395生成&…

快速幂及矩阵快速幂分析及代码实现

文章目录前言一、认识快速幂二、快速幂思路及代码三、矩阵快速幂3.1、矩阵乘法代码实现3.2、矩阵快速幂代码实现参考资料前言 在学习Acwing c蓝桥杯辅导课第九讲复杂DP-AcWing 1303. 斐波那契前 n 项和时有使用到矩阵快速幂算法&#xff0c;这里来记录下知识点正好也将快速幂部…

车载以太网 - SomeIP测试专栏 - 详细解析 - 01

对于介绍SomeIP协议&#xff0c;我还是想从最基础的协议解析来&#xff0c;所以今天还是先将SomeIP协议详解给大家列举一下&#xff0c;也方便大家在工作中如果不记得哪些信息随时可以查看学习&#xff0c;也算是留给我自己的笔记吧&#xff0c;毕竟确实容易忘记。 SomeIP数据&…

分布式数据库中间件——Mycat2

一、Mycat2 概述 Mycat是基于java语言编写的数据库中间件&#xff0c;核心功能是分库分表和读写分离&#xff0c;可以将大表水平分割为N个小表。 可以看做为Mysql的数据库服务器&#xff0c;可以用连接Mysql的方式去连接Mycat&#xff0c;端口为8066 二、Mycat的三大作用 2.…

Node 项目中常见的问题及解决方法

1. window和mac下设置NODE_ENV变量的问题 我们都知道在前端项目中会根据不同的环境变量来处理不同的逻辑&#xff0c;在node后端中也一样&#xff0c;我们需要设置本地开发环境、测试环境、 线上环境等&#xff0c;此时有一直设置环境变量的方案是在package.json中的script属性…

Python学习笔记——错误和异常

错误的分类编写程序过程中遇到的错误都分为两类&#xff1a;语法错误与运行时错误。语法错误&#xff1a;当代码不符合Python语法规则时, 在解析过程中会报SyntaxError。运行时错误&#xff1a;即语句或表达式在语法上都是正确的, 但在运行时发生了错误。当程序发生异常时&…

从零搭建完整python自动化测试框架(UI自动化和接口自动化

从零搭建完整python自动化测试框架&#xff08;UI自动化和接口自动化&#xff09; 文章目录 总体框架 PO模式、DDT数据驱动、关键字驱动 框架技术选择 框架运行结果 各用例对应的定义方式&#xff08;PO/DDT&#xff09; 测试执行结果 从零开始搭建项目 一、开发环境搭…

Vue-Vuex

前言 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库 官网介绍&#xff1a;https://vuex.vuejs.org/zh/ 以下主要讲解的是如何定义与使用&#xff0c;如果还没有对vuex进行了解的话&#xff0c;请先查看官网&#xff0c;了解其功能、用法及用途。 关于vuex&#xff0c…

代码随想录算法训练营第五十二天_第九章_动态规划 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

LeetCdoe 121. 买卖股票的最佳时机给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可…

verilog 数字系统设计读书笔记-------持久更新

Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们所对应的模型类型共有以下5种&#xff1a;系统级、算法级、RTL级、门级、开关级‘bz :表示高阻态&#xff0c; ’bx表示不定值&#xff08;0或1均可&#xff09;include "muxtwo.v" 将文件引进{$ ra…

【Linux】怎么理解进程

✍作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Liunx系统编程 本文通过冯诺依曼体系结构&#xff08;硬件部分&#xff09;和操作系统&#xff08;软件部分&#xff09;为基础来介绍我们应该如何理解进程&#xff0c;为后续的学习做铺垫。 本文目录一、预备知识1.建…