请用java实现生成10000000~99999999 用户会员号 要求: 1.剔除豹子号,例如:其中含有 666,555,888 2.所有数字中不能有4 3.剔除连号567,123,678等 4.输出时乱序不要连号 5.需要考虑内存消耗
时间: 2023-11-28 18:50:54 浏览: 154
以下是使用Java实现生成10000000~99999999用户会员号的代码:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MemberNumberGenerator {
public static void main(String[] args) {
List<Integer> numbers = generateMemberNumbers();
Collections.shuffle(numbers);
for (Integer number : numbers) {
System.out.println(number);
}
}
private static List<Integer> generateMemberNumbers() {
List<Integer> numbers = new ArrayList<>();
for (int i = 10000000; i <= 99999999; i++) {
if (!hasForbiddenDigits(i) && !hasDuplicateDigits(i) && !hasConsecutiveDigits(i)) {
numbers.add(i);
}
}
return numbers;
}
private static boolean hasForbiddenDigits(int number) {
return String.valueOf(number).contains("4") ||
String.valueOf(number).contains("666") ||
String.valueOf(number).contains("555") ||
String.valueOf(number).contains("888");
}
private static boolean hasDuplicateDigits(int number) {
String digits = String.valueOf(number);
for (int i = 0; i < digits.length() - 1; i++) {
if (digits.charAt(i) == digits.charAt(i + 1)) {
return true;
}
}
return false;
}
private static boolean hasConsecutiveDigits(int number) {
String digits = String.valueOf(number);
for (int i = 0; i < digits.length() - 2; i++) {
if (digits.charAt(i) + 1 == digits.charAt(i + 1) && digits.charAt(i) + 2 == digits.charAt(i + 2)) {
return true;
}
}
return false;
}
}
```
代码中使用了三个辅助方法:
- `hasForbiddenDigits` 方法用于判断是否包含禁止的数字,即 4,666,555,888。
- `hasDuplicateDigits` 方法用于判断是否存在重复的数字。
- `hasConsecutiveDigits` 方法用于判断是否存在连续的数字。
`generateMemberNumbers` 方法则用于生成符合要求的会员号,并将其保存在一个数组中。最后使用 `Collections.shuffle` 方法将数组中的元素乱序,然后遍历数组输出即可。
阅读全文