java尝试性二维码设计

java尝试性二维码设计,第1张

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					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5671284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存