日常代码分享(Java)

日常代码分享(Java)

都是详解,好好看,肯定有收获,不是我吹自己,详细看了就清楚了

分享1:

随机生成用户指定的个整数(1-100)保存到数组
并倒叙打印出来以及求平均值、求最大值和最大值下标
并查找里面是否有 8

        思路分析
        
        由于此次代码比较简单,以及化繁为简以及先死后活一体讨论
    
        1. 首先提示用户输入需要打印的随机数个数
        2. 定义数组
        3. 随机产生用户指定的随机数个数,并保存到数组当中
        4. 倒叙排序并打印
        5. 求平均值、最大值和最大值下标、最小值和最小值下标
        6. 判断并查找里面是否有客户指定的随机数,给出提示
import java.util.Scanner;

public class HomeWorkSix
{
    public static void main(String[] args) 
    {
        /*
            随机生成用户指定的个整数(1-100)保存到数组
            并倒叙打印出来以及求平均值、求最大值和最大值下标
            并查找里面是否有 8  
        
            思路分析
            
            由于此次代码比较简单,以及化繁为简以及先死后活一体讨论
        
            1. 首先提示用户输入需要打印的随机数个数
            2. 定义数组
            3. 随机产生用户指定的随机数个数,并保存到数组当中
            4. 倒叙排序并打印
            5. 求平均值、最大值和最大值下标、最小值和最小值下标
            6. 判断并查找里面是否有客户指定的随机数,给出提示
        */

        byte[] arr; // 定义数组
        System.out.print("请输入需要产生的随机数个数:");
        Scanner mydScanner = new Scanner(System.in);  // 定义扫描仪从键盘接收
        byte individual = mydScanner.nextByte();  // 定义-接收开空间大小
        arr = new byte[individual]; //开空间

        for(byte i=0;i<arr.length;i++)
        {
            arr[i] = (byte) (Math.random() * 100 + 1); // 产生用户指定的随机个数
        }

        byte Maxnum = arr[0];       // 必须赋初值
        byte Minnum = arr[0];       // 必须赋初值
        byte temp = 0;              // 统计次数,用于控制每行个数
        byte Maxindex = 0, Minindex = 0; // 下标
        float And = 0;     // 求和  注意:byte最大存储 -124~123 之间的数用于求和属实不妥

        // 排序 注意,由于有i+1,故会少进行一步,需要注意,应为 i < individual-1;
        for (byte i = 0; i < arr.length-1; i++)   外层循环是(Array.length - 1)
        {
            for (byte j = 0; j < arr.length - 1 - i; j++) // 内层比较 = (Array.length - 1 - i)次比较
            {
                // 如果前面一个数小于后面一个数,就交换
                if (arr[j] < arr[j + 1])    // 将最小的放到最后
                {
                    // 注意:此处强转需要整体强转,不可以单独全部(个别)或者单个进行强转
                    arr[j] = (byte) (arr[j] ^ arr[j + 1]);
                    arr[j + 1] = (byte) (arr[j] ^ arr[j + 1]);     // 注意:应该为内层 arr[j] 不是外层 arr[i]
                    arr[j] = (byte) (arr[j] ^ arr[j + 1]);
                }
            }
        }
        
        System.out.println("===排序后的数组如下===");
        for (byte i = 0; i < individual; i++)
        {
            System.out.print("arr[" + i + "]=" + arr[i] + "\t");
            temp++;
            if (temp % 5 == 0)
                System.out.println(); // 每输出5个就换行
        }
   
         for (byte i = 0; i < individual; i++)
         {
             And += (byte)arr[i]; // 求和

             if (arr[i] > Maxnum) // 求最大值和最大值下标、最小值和最小值下标
             {
                 Maxnum = arr[i];
                 Maxindex = i;
             }
             if (arr[i] < Minnum) // 注意;此处不可以用 else。一点一点需要注意
             {
                 Minnum = arr[i];
                 Minindex = i;
             }
         }

         System.out.println("\n平均数为:" + (And / arr.length));
         System.out.print("最大值为:" + Maxnum + "\t最大值下标为:" + Maxindex + "\n最小值为:" + Minnum + "\t最小值下标为:" + Minindex);
     }
}

分享2:

 定义数组  可以采取 用户输入 + 排序,也可以采取随机生成 + 排序,本次采取 用户输入 + 排序,更加接近生活习惯
    
        面临的问题有:
            1. 用户有原始数组,原始数组的输入问题,主要是如何开空间
            2. 如何没有原始数组,直接插入,开空间的问题
            3. 主要问题就是客户开空间问题
            4. 未能使用函数的调用
            5.  byte[] Array = null;
                if (Array == null || Array.length == 0)  必须需要初始化数组问题
        
        解决方案:
        1. 目前使用较为好的方法,使用 (do + while) 循环 + (if + else) 完成客户的持续输入,决定权在客户手里
    
        思路分析:
        
        先死后活
    
        1. 先使得客户端输入原始数组,当然也可以直接插入,这对初始来说,意义不大,不必钻牛角尖
        2. 如果硬要钻牛角尖,可以采取 swith 来实现效果,这里不在啰嗦
    
        拓展
        
        更多细节请看下一篇博客
        提示:采取 arraylist 的方法,更加灵活
    
        注意:初始化数组且未使用数据库,程序每次重新启动 arr都为 null
import java.util.Scanner;

public class HomeWorkFive
{
    public static void main(String[] args) 
    {
        Scanner mysScanner = new Scanner(System.in);
        
        /*
            定义数组  可以采取 用户输入 + 排序,也可以采取随机生成 + 排序,本次采取 用户输入 + 排序,更加接近生活习惯
        
            面临的问题有:
                1. 用户有原始数组,原始数组的输入问题,主要是如何开空间
                2. 如何没有原始数组,直接插入,开空间的问题
                3. 主要问题就是客户开空间问题
                4. 未能使用函数的调用
                5.  byte[] Array = null;
                    if (Array == null || Array.length == 0)  必须需要初始化数组问题
            
            解决方案:
            1. 目前使用较为好的方法,使用 (do + while) 循环 + (if + else) 完成客户的持续输入,决定权在客户手里
        
            思路分析:
            
            先死后活
        
            1. 先使得客户端输入原始数组,当然也可以直接插入,这对初始来说,意义不大,不必钻牛角尖
            2. 如果硬要钻牛角尖,可以采取 swith 来实现效果,这里不在啰嗦
        
            拓展
            
            更多细节请看下一篇博客
            提示:采取 arraylist 的方法,更加灵活
        
            注意:初始化数组且未使用数据库,程序每次重新启动 arr都为 null
        */
        byte[] arr;
        arr = null;
        System.out.print("是否需要给数组随机生成数(Y/N):");
        char tempnum = mysScanner.next().charAt(0);
        if(tempnum=='Y')
        {
            System.out.print("请输入需要随机生成数的个数:");
            byte temp = mysScanner.nextByte();
            for (byte i = 0; i < temp; i++) 
            {
                arr = new byte[temp];
                arr[i] = (byte) (Math.random() * 100 + 1);
                System.out.print("arr[" + (i + 1) + "]=" + arr[i] + " ");
            }
        }
        // else
        // {
        //     arr = null;
        // }
        if (arr == null || arr.length == 0) 
        {
            do {
                byte temp = 0;
                System.out.print("\n请输入需要输入数的个数:");
                byte Usernum = mysScanner.nextByte(); // Usernum 初始化数组的长度
                arr = new byte[Usernum]; // 给数组开空间

                for (byte i = 0; i < arr.length; i++) 
                {
                    System.out.print("请输入第" + (i + 1) + "个数:");
                    byte Uservalue = mysScanner.nextByte(); // Uservalue 为数组赋值
                    arr[i] = Uservalue;
                }
                System.out.println("输入完毕!感谢使用");

                // System.out.println("===输入后,对arr排序===");
                // 输入后,对arr排序
                for (byte i = 0; i < arr.length; i++) // 外层循环是(Array.length - 1)
                {
                    for (byte j = 0; j < arr.length - i - 1; j++) // 内层比较 = (Array.length - 1 - i)次比较
                    {
                        // 如果前面一个数大于后面一个数,就交换
                        if (arr[j] > arr[j + 1]) 
                        {
                            temp = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = temp;
                        }
                    }

                    /*
                        System.out.println("\t\t\t\t===第" + (i + 1) + "轮===");
                        for (byte j = 0; j < arr.length; j++) 
                        {
                            System.out.print("arr[" + (j + 1) + "]=" + arr[j] + "\t");
                        }
                        System.out.println();
                    */
                }

                System.out.println("=====排序后,arr数组的情况=====");
                for (byte i = 0; i < arr.length; i++) {
                    System.out.print("arr[" + (i + 1) + "]=" + arr[i] + " ");
                }
                System.out.println("\n是否需要重复输入(Y/N):" + " ");
                char tempnumber = mysScanner.next().charAt(0);
                if (tempnumber == 'N') {
                    System.out.println("欢迎下次使用!");
                    break;
                }
            } while (true);
        }
        
        do
        {
            /*
                已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序
                比如:[10,12,45,90],添加 23 后,该数组为[10,12,23,45,90]
            
                思路分析
                
                本质 数组扩容 + 定位
            
                1. 我们先确定 添加数应该插入到那个索引
                2. 然后扩容
            */

            byte index = -1; // index就是要插入到位置

            /*
                定位
            
                遍历 arr 数组,如果发现 insernum <= arr[i],说明 i 就是要插入的位置
                使用 index 保留 index = -i;
                如果遍历完后,没有发现 insernum <= arr[i],说明 index = arr.length
                即:添加到 arr 到最后
            */

            System.out.print("\n请输入需要插入的个数:");
            byte num=mysScanner.nextByte();
            for (byte count = 1; count <= num; count++)
            {
                System.out.print("请输入需要插入的第" + count + "个数:");
                byte Userinsert = mysScanner.nextByte(); // Uservalue 为数组赋值
                for (byte i = 0; i < arr.length; i++) 
                {
                    if (Userinsert < arr[i]) {
                        index = i;
                        break; // 找到就退出,因为数组为升序排列
                    }
                }

                // 判断 index 到值,以确定输入到数的位置
                if (index == -1) // 说明还没有找到位置,则insernum大于整个数组元素,位置在最后一个
                {
                    index = (byte) arr.length;
                }

                // 扩容
                // 创建一个新的数组,大小 arr.length + 1
                byte[] arrnew = new byte[arr.length + 1];
                /*
                    下面将 arr 的元素拷贝到 arrnew,并且要跳过 index 位置
                    分析
                    byte[] arr = { 10, 12, 45, 90 };
                    arrnew = {[10],[12],[ ],[45],[90]};
                */

                // i 用来控制 arrnew的下标,j 用来控制 arr的下标
                for (byte i = 0, j = 0; i < arrnew.length; i++) 
                {
                    if (i != index) // 说明可以把 arr 的元素拷贝到 arrnew
                    {
                        arrnew[i] = arr[j];
                        j++;
                    } 
                    else // i 这个位置就是要插入的数
                    {
                        arrnew[i] = Userinsert;
                    }
                }

                // 让 arr 指向 arrnew,原来的数组,就成为垃圾,被销毁
                arr = arrnew;
            }
            System.out.println("=====插入后,arr数组的情况=====");
            for (byte i = 0; i < arr.length; i++) 
            {
                System.out.print("arr[" + (i + 1) + "]=" + arr[i] + " ");
            }
            System.out.println("\n是否需要重复输入(Y/N):" + " ");
            char tempnumber = mysScanner.next().charAt(0);
            if (tempnumber == 'N') {
                System.out.println("欢迎下次使用!");
                break;
            }
        } while (true);
    }
}

分享3:

已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序
比如:[10,12,45,90],添加 23 后,该数组为[10,12,23,45,90]

        思路分析
        
        本质 数组扩容 + 定位
    
        1. 我们先确定 添加数应该插入到那个索引
        2. 然后扩容
public class HomeWorkFour
{
    public static void main(String[] args) 
    {
        /*
            已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序
            比如:[10,12,45,90],添加 23 后,该数组为[10,12,23,45,90]
        
            思路分析
            
            本质 数组扩容 + 定位
        
            1. 我们先确定 添加数应该插入到那个索引
            2. 然后扩容
        */

        // 先定义原数组
        byte[] arr = { 10, 12, 45, 90 };
        byte insernum = 23;
        byte index = -1; // index就是要插入到位置
        
        /*
            定位

            遍历 arr 数组,如果发现 insernum <= arr[i],说明 i 就是要插入的位置
            使用 index 保留 index = -i;
            如果遍历完后,没有发现 insernum <= arr[i],说明 index = arr.length
            即:添加到 arr 到最后
        */

        for(byte i=0;i<arr.length;i++)
        {
            if(insernum<arr[i])
            {
                index = i;
                break;  // 找到就退出,因为数组为升序排列
            }
        }
        
        // 判断 index 到值,以确定输入到数的位置
        if(index==-1)  // 说明还没有找到位置,则insernum大于整个数组元素,位置在最后一个
        {
            index = (byte) arr.length;
        }
        
        // 扩容
        // 创建一个新的数组,大小 arr.length + 1
        byte[] arrnew = new byte[arr.length + 1];
        /*
            下面将 arr 的元素拷贝到 arrnew,并且要跳过 index 位置
            分析
            byte[] arr = { 10, 12, 45, 90 };
            arrnew = {[10],[12],[ ],[45],[90]};
        */

        // i 用来控制 arrnew的下标,j 用来控制 arr的下标
        for(byte i=0,j=0;i<arrnew.length;i++)
        {
            if (i != index) // 说明可以把 arr 的元素拷贝到 arrnew
            {
                arrnew[i] = arr[j];
                j++;
            } 
            else // i 这个位置就是要插入的数
            {
                arrnew[i] = insernum;
            }
        }
        
        // 让 arr 指向 arrnew,原来的数组,就成为垃圾,被销毁
        arr = arrnew;

        System.out.println("=====插入后,arr数组的情况=====");
        for (byte i = 0; i < arr.length;i++)
        {
            System.out.print("arr[" + (i + 1) + "]=" + arr[i]+" ");
        }
    }
}

注:本期文主要为读者自己看,希望读者可以好好读读

喜欢来个一键三连,让我们一起期待下一篇博客

感谢各位🙏

为了巩固知识,做的一个网站。基于struts2+spring+springjdbc开发代码分享网,所有源码已开源。 网站功能介绍: 1、邮件注册(采用阿里云企业邮箱),为了让大家体验一下邮箱注册功能。我已经在分享的源码中,为大家配置好了测试账户,大家可以在自己电脑上进行测试。 2、md5加密,注册用户,所有密码会以密文保存在数据库,可以保证安全。 3、代码分享功能(核心功能),该功能的主要特色是集成了优秀的文本编辑器,支持插入代码、插入链接、插入表情、插入图片、支持在线预览。同时也实现了文件上传(基于struts2的文件上传功能)。 4、代码下载,下载功能会判断用户是否下载过该代码,若下载过则不扣积分。下载功能也是基于struts2的下载模块实现的。 5、代码评论,该功能是我仿照qq空间评论功能实现的,在本站中,我是以时间倒叙方式显示的(也支持正序)。 6、代码收藏,用户可以收藏代码。 7、消息中心,分为了0系统消息、1评论消息、2兑换消息、3上传图片消息、4上传文件消息、5下载消息(用户扣除积分)、6下载消息。 8、代码中心,分为了分享代码、下载代码、评论代码、收藏代码。 9、设置功能,支持修改昵称、城市、性别、座右铭、密码、头像。 10、赞助兑换功能,支持1个赞助兑换10个积分,也支持用赞助升级称号。 11、其他功能包括:图片压缩处理功能(即使是几M的图片,压缩后也只有几十kb)。通用json处理功能(向方法中传递任何参数,int、string等,都会返回json数据,而且速度很快)。分词功能(点击某一个分享,进入详情页的时候,会对该分享名称进行分词,并且加入到head中,利于网站seo)。 可能还有一些其他功能,通过查看源码可了解。 网站技术介绍: 1、采用语言java 2、后台框架,struts2+spring+spring JDBC 3、前台技术,layui+jquery+ajax 网站设计思路: 前台渲染是采用的jsp技术,为了保证网站的速度,我使用了几种方法: 1、我将重复的代码保存成单独的jsp文件然后引入(这样的好处就是重复的jsp文件只会加载一次,然后浏览器缓存,下次加载速度会提升)。比如,我将link和header单独提取出来,然后在其他页面进行引入: 2、所有的业务功能,我都放在了html加载完成之后,利用jquery+ajax获取数据后再渲染界面(这样的好处就是给用户的感觉是网站速度很快。因为用户打开后,立马渲染html代码,此时网站结构已经出现,接着用jqury+ajx去后台获取数据。由于我的sql语句严格控制在ms级别,所以只需要几百ms,数据即可拿到,此时渲染在页面上给用户的感觉很快) 3、sql语句的控制,本站的所有sql语句,均控制在1s以下。这块我花了很长时间进行sql优化,我举个例子:为了减少数据库的访问次数,我会想方设法通过一条语句获取所有信息,并且严格控制它的执行速度,绝对不可以超过1s。首页的下载榜、评论榜、收藏榜,这三个功能的数据就是通过一条sql语句获取的: #优化联合查询用户评论、下载、收藏的资源列表 select a.sort,a.id,r.name,a.nowtime,r.isjing,r.isyuan, ifnull(c.res_comments_num,0) as res_comments_num, ifnull(d.res_download_num,0) as res_download_num, ifnull(kp.res_keep_num,0) as res_keep_num from #sort为1代表用户评论的代码列表 (select 1 as sort,c.resources_id as id,c.nowtime as nowtime from comments c #需要指定用户 where c.user1_id = 1 group by c.resources_id union all #sort为2代表用户下载的代码列表 select 2 as sort,d.resources_id as id,d.nowtime as nowtime from download d #需要指定用户 where d.user_id = 1 group by d.resources_id union all #sort为3代表用户收藏的代码列表 select 3 as sort,k.resources_id as id,k.nowtime as nowtime from keep
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值