请设计一款存储空间为8个字节的二维码,用于为自己设计的APP进行扫码支付;
要求:
1)绘制此二维码的至少2个例子,并截图(截图1.1);
2)详细讲述每一个字节、每一位的编码原理、含义;
3)详细讲述采用此二维码的优势,可从用户使用方便程度、开发人员的程序设计方便程度、辨识难易程度等方面着手。
- 两个例子
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欢迎分享,转载请注明来源:内存溢出
评论列表(0条)