IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java尝试性二维码设计 -> 正文阅读

[Java知识库]java尝试性二维码设计

先附上要求

请设计一款存储空间为8个字节的二维码,用于为自己设计的APP进行扫码支付;
要求:
1)绘制此二维码的至少2个例子,并截图(截图1.1);
2)详细讲述每一个字节、每一位的编码原理、含义;
3)详细讲述采用此二维码的优势,可从用户使用方便程度、开发人员的程序设计方便程度、辨识难易程度等方面着手。

实现

  1. 两个例子
    在这里插入图片描述

2.简单的逻辑是,按照long的二进制形式的01表达,0代表白块,1代表黑块。
实现细节:
因为要8字节存储的二维码,而在java中,long型变量占据8字节,所以我的想法是二维码实例使用long型变量存储,再将long型变量解析为二进制,进行绘制二维码。
而8字节则拥有64bit,每个bit要么是0要么是1。所以我通过生成随机数的方式来生成这个二进制码。
为什么不通过生成十进制的long呢,因为经过实验,想刚好生成long范围的随机数,极易造成溢出,所以我放弃了这一写法。
在这里插入图片描述
至于为什么使用StringBuffer而不使用String,那是因为String是不可变的,至于StringBuffer与StringBuilder的选择,这里无所谓,毕竟我的项目作业不是多线程的。
不过,StringBuilder有速度优势,但是不是线程安全的。
这样我就得到了long型变量的二进制形式。
这里我将StringBuffer改成了String
在这里插入图片描述
这其实是没啥必要的,只是简单的因为我对于String的运用熟练度更高。

我们知道,在二进制表达中,首位0表示是正数,1表示是负数。
这里的d,就是用来判断数据的正负的,因为我再最后,将StringBuffer存储的二进制码的首位,无论如何,直接改成0.
为什么我要这么做呢?
因为Long.parseUnsignedLong方法,是无符号运算,所以我必须把最前面的1单独提出。
最后,我得到了long型变量f,用于存储我生成的二维码。
接下来就是绘图了。
在这里插入图片描述
为了看起来更像一个二维码,我提供了50*50的JPanel。
通过不断的64周期来创建黑白块,即形成了我上述的二维码样式。
3.
①程序设计方便程度:极度方便,通过随机数来生成,根据用户流量,可以更改为多线程模式,也可以在以后客流量更大后,通过时间戳来生成,扩大存储空间,生成更加复杂的二维码。
②辨识难度:因为是周期性重复,所以其实仅仅需要某一段就可以辨识,大大提高辨识效率。
③用户使用:随机数,后端内存占用小,生成的快,用户使用更舒畅,不用全部展现,只需要某一段出现即可,大大提高用户的使用体验感。

Ps:附上源码,不过,图片调用路径需要更改,以及图片需要自己存储。

import java.util.Scanner;

public class jugde {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        long x = scan.nextLong();
        boolean flag = true;
        if(x<1){
            System.out.println("输入错误");
            return;
        }
        if(x>=10000000000L){
            System.out.println("超过计算范围,输入不正确");
            return;
        }
        if(x==1){
            flag = false;
        }
        for(int i = 2;i<x;i++){
            if(x%i==0){
                flag = false;
                break;
            }
        }
        if(flag){
            System.out.println("是");
        }else{
            System.out.println("不是");
        }
    }

}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:32:20  更:2021-12-16 17:33:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:20:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码