请用java实现生成10000000~99999999 用户会员号 要求: 请认真听取第一条要求 1.剔除豹子号,例如:其中含有 666,555,888(请注意这里是举例,需要剔除类似所有的豹子号) 2.所有数字中不能有4 3.剔除连号567,123,678等 4.输出时乱序不要连号 5.需要考虑内存消耗
时间: 2023-11-28 11:50:56 浏览: 71
以下是Java实现的代码:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MembershipNumberGenerator {
private static final int MIN_NUM = 10000000;
private static final int MAX_NUM = 99999999;
private static final int[] PATTERN_NUMBERS = {666, 555, 888}; // 要剔除的豹子号
private static final int[] DISALLOWED_NUMBERS = {4, 567, 123, 678}; // 要剔除的数字和连号
public static void main(String[] args) {
List<Integer> numbers = generateMembershipNumbers();
System.out.println("生成的会员号数量:" + numbers.size());
System.out.println("前 10 个会员号:" + numbers.subList(0, 10));
}
private static List<Integer> generateMembershipNumbers() {
List<Integer> numbers = new ArrayList<>();
for (int i = MIN_NUM; i <= MAX_NUM; i++) {
if (isInvalidNumber(i)) {
continue;
}
numbers.add(i);
}
Collections.shuffle(numbers); // 打乱顺序
return numbers;
}
private static boolean isInvalidNumber(int number) {
if (hasPatternNumber(number)) {
return true;
}
if (hasDisallowedNumber(number)) {
return true;
}
return false;
}
private static boolean hasPatternNumber(int number) {
for (int pattern : PATTERN_NUMBERS) {
if (String.valueOf(number).contains(String.valueOf(pattern))) {
return true;
}
}
return false;
}
private static boolean hasDisallowedNumber(int number) {
String str = String.valueOf(number);
for (int disallowed : DISALLOWED_NUMBERS) {
if (str.contains(String.valueOf(disallowed))) {
return true;
}
if (str.contains(String.valueOf(disallowed + 1)) && str.contains(String.valueOf(disallowed + 2))) {
return true; // 连号
}
}
return false;
}
}
```
该程序使用了一个 `generateMembershipNumbers()` 方法来生成会员号。该方法循环从 10000000 到 99999999,对于每个数字,判断是否为无效的会员号(即豹子号、含有数字 4、连号),若不是,则将其加入到结果列表中。最后,使用 `Collections.shuffle()` 方法打乱顺序,返回结果列表。
判断一个数字是否为无效的会员号,使用了两个辅助方法:`hasPatternNumber()` 和 `hasDisallowedNumber()`。`hasPatternNumber()` 方法检查数字中是否含有要剔除的豹子号,`hasDisallowedNumber()` 方法则检查数字中是否含有要剔除的数字和连号。
为了避免内存消耗过大,程序使用了一个 `List` 来存储合法的会员号,而不是一开始就将所有会员号存储在一个数组或列表中。
阅读全文