我正在通过Java创建密码:
假设您在安全销售公司工作,并且您的经理要求您创建一个包含0000000000和9999999999之间所有十位数字的列表,而不重复相同数字的数字。在JAVA中执行此算法的方法是什么?
这是我到目前为止所做的:
public static long generateNumber()
{
String s1 = "33333";
double d = Math.random();
d=d*100000.0;
int i = (int) d;
String s2 = String.valueOf(i);
String s3=s1+s2;
long m = Long.parseLong(s3);
return m;
}
答案 0 :(得分:4)
如果您正在寻找没有任何重复数字的十位数字,那么您实际上是在生成所有数字的所有排列,即字符串"0123456789"
。
SO上有其他线程可以帮助您解决此问题,例如这些
答案 1 :(得分:1)
使用少量代码的简单方法是:
List<Long> combos = new ArrayList<>();
Set<Character> chars = new HashSet<>();
for (long i = 1000000000; i < 9999999999L; i++) {
chars.clear();
for (char c : String.valueOf(i).toCharArray()) {
chars.add(c);
}
if ((chars).size() == 10) {
combos.add(i);
}
}
效率不高,但能胜任。
答案 2 :(得分:0)
使用改组技术:
public static void main(String[] args) {
List<Integer> passwords = Arrays.asList( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 );
for (int i = 0; i < 10; i ++)
{
Collections.shuffle(passwords);
String p = toFlatString(passwords);
System.out.println(p);
}
}
private static String toFlatString(List<Integer> list) {
StringBuilder sb = new StringBuilder();
for (int i : list)
sb.append(i);
return sb.toString();
}
<强>输出:强> 2651803497 2936745018 7064918235 1594670823 4035872619 6432971850 6387925401 7103649285 9712380645 9321574806