随机生成九宫格图形密码-实现
时间:2020-05-12
本文章向大家介绍随机生成九宫格图形密码-实现,主要包括随机生成九宫格图形密码-实现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
无意看到某次面试没有通过后,在家苦练基本功后重新写的一串代码。
方法千万种,以下是我印象最深的,回头看还是觉得挺有学习意义的,所以发出来共享学习。
原问题条件不记得太清,大致实现的是:随机生成九宫格图形(手势)密码
读题,有几个点需要主要:
1、密码长度可设置
2、手势密码的路径必须可直达
用两种方式实现:
1、canArr 判断前后数值是否可直达
2、getNum 根据前一个数值获取下一个数值
package com.maomao; import org.testng.annotations.Test; import java.util.HashMap; import java.util.Map; //随机生成九工格图形密码,随机数范围1~9 public class RandomScret { //9工格中,1~9可直达的数值,发现规律 //除了5 //奇数,1,3,7,9,四个角无法直达 //偶数,2,4,6,8,对角无法直达,并且对角和5的差值相同 // int[] num_1={2,4,5,6,8}; // int[] num_2={1,3,4,5,6,7,9}; // int[] num_3={2,4,5,6,8}; // int[] num_4={1,2,3,5,7,8,9}; // int[] num_5={1,2,3,4,6,7,8,9}; // int[] num_6={1,2,3,5,7,8,9}; // int[] num_7={2,4,5,6,8}; // int[] num_8={1,3,4,5,6,7,9}; // int[] num_9={2,4,5,6,8}; //获取1~9的随机整数 //( n~m随机数公式:(int)(Math.random()*(m-n+1) +n))) public static int getRandomNum(){ int num=(int)(Math.random()*9+1); return num; } //判断是否可以抵达 -----这种方式需要不停试错,花费时间较长 public Boolean canArr(int preNum,int randomNum){ //做标记,默认不可以抵达 boolean flag = false; //前后值不能相等 if (preNum!=randomNum){ if (preNum==5 ) { flag = true; }else if (randomNum==5){ flag = true; }else if (preNum%2==0){ //是偶数 int n=Math.abs(preNum-5); int m=Math.abs(randomNum-5); if (n!=m){ flag=true; } }else if (preNum%2==1){ //preNum是除了5以外的奇数 if (randomNum%2==0){ flag=true; } } } return flag; } //构造可直达路径 ------这种方式占用内存,花费时间短 public Map<Integer,int[]> All() { Map<Integer, int[]> map = new HashMap<>(); map.put(1,new int[]{2,4,5,6,8}); map.put(2,new int[]{1,3,4,5,6,7,9}); map.put(3,new int[]{2,4,5,6,8}); map.put(4,new int[]{1,2,3,5,7,8,9}); map.put(5,new int[]{1,2,3,4,6,7,8,9}); map.put(6,new int[]{1,2,3,5,7,8,9}); map.put(7,new int[]{2,4,5,6,8}); map.put(8,new int[]{1,3,4,5,6,7,9}); map.put(9,new int[]{2,4,5,6,8}); return map; } public int getNum(int preNum){ // int tag=(int)(Math.random()*10); int[] nextArr=All().get(preNum); int tag=(int)(Math.random()*10+1);//1~10 int next=nextArr[tag%nextArr.length]; return next; } @Test public void test1(){ RandomScret rs=new RandomScret(); //设置密码长度length int length=6; int[] scret=new int[length]; //指定生成 int preNum=getRandomNum(); for (int i=0;i<length;i++){ scret[i]=rs.getNum(preNum); preNum=scret[i]; } for (int num:scret){ System.out.println(num); } } @Test public void test2(){ RandomScret rs=new RandomScret(); //设置密码长度length int length=6; int[] scret=new int[length]; //随机生成 int preNum=getRandomNum(); for (int i=0;i<length;){ int randomNum=getRandomNum(); if (rs.canArr(preNum,randomNum)){ scret[i]=randomNum; preNum=scret[i]; i++; }else { continue; } } for (int num:scret){ System.out.println(num); } } }
原文地址:https://www.cnblogs.com/fatCat1/p/12877420.html
- 基本线程同步(一) 同步方法
- uva514(trail)(模拟栈)
- zoj3822 Domination(概率dp)
- Veeam Backup & Replication(三):创建备份与还原备份
- 使用Go开发一个简单的服务器程序
- C++ 与设计模式学习(其一)
- xz文件压缩工具的用法
- Java 中正确使用 hashCode 和 equals 方法
- C/C++ 关于生成静态库(lib)/动态库(dll)文件如何使用(基于windows基础篇)
- openwrt将LAN口改为WAN方法
- c/c++----网站及其后门(CGI应用程序)
- C/C++深度copy和浅copy
- pycharm2016版汉化方法
- 8张图理解Java
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android实现按钮获取焦点延迟加载
- Devtools 老师傅养成[1] - Chrome Devtools介绍
- Android4.4开发之电池低电量告警提示原理与实现方法分析
- 浅谈android性能优化之启动过程(冷启动和热启动)
- Android拖动条的实现代码
- Devtools 老师傅养成[3] - Console 面板
- Android开发中数据库升级且表添加新列的方法
- Android冷启动实现app秒开的实现代码
- Devtools 老师傅养成[4] - Sources 面板
- android中使用Html渲染的方式实现必填项前面的*号示例
- android视频播放简单实现示例(VideoView&MediaPlayer)
- Android中SharedPreference详解及简单实例
- Devtools 老师傅养成[5] - Network 面板
- android实现上传本地图片到网络功能
- android音乐播放简单实现的简单示例(MediaPlayer)