【发布时间】:2014-12-07 05:28:34
【问题描述】:
我目前正在学习 Java,到目前为止一直在使用普通数组。下学期我们将使用 ArrayList 等数据结构,但我决定提前阅读。我已经读过,对于存储不能重复的数据,Sets 是首选的数据结构,但是在下面的代码中,用户仍然可以输入重复的条目吗?任何人都可以向我解释这个过程,也许可以解决我的问题吗?
public class Lotto {
private static final int INPUT_SIZE = 6;
private static final int MIN_NUMBER_POSSIBLE = 0;
private static final int MAX_NUMBER_POSSIBLE = 25;
private Set<Integer> userNumbers = new HashSet<Integer>();
private Set<Integer> randomNumbers = new HashSet<Integer>();
public static void main(String[] args) {
Lotto c = new Lotto();
c.generateRandomNumbers();
System.out.println("Pick " + INPUT_SIZE + " numbers from "
+ MIN_NUMBER_POSSIBLE + " to " + MAX_NUMBER_POSSIBLE + ".");
c.readUserNumbers();
if (c.doUserNumbersMatchRandomNumbers()) {
System.out.println("You win :) !");
} else {
System.out.println("Sorry you failed :( !");
c.showRandomNumbersToUser();
}
}
private void generateRandomNumbers() {
Random random = new Random();
for (int i = 0; i < INPUT_SIZE; i++) {
randomNumbers.add(random.nextInt(MAX_NUMBER_POSSIBLE));
}
}
private void showRandomNumbersToUser() {
System.out.println("\nRandom numbers where : ");
for (Integer randomNumber : randomNumbers) {
System.out.println(randomNumber + "\t");
}
}
private void readUserNumbers() {
Scanner input = new Scanner(System.in);
int inputSize = 1;
while (input.hasNextInt() && inputSize < INPUT_SIZE) {
int numberChoosen = input.nextInt();
if (numberChoosen < MIN_NUMBER_POSSIBLE
|| numberChoosen > MAX_NUMBER_POSSIBLE) {
System.out.println("Your number must be in "
+ MIN_NUMBER_POSSIBLE + " - " + MAX_NUMBER_POSSIBLE
+ " range.");
} else {
userNumbers.add(numberChoosen);
inputSize++;
}
}
}
private boolean doUserNumbersMatchRandomNumbers() {
for (Integer userNumber : userNumbers) {
if (!randomNumbers.contains(userNumber)) {
return false;
}
printMatchingNumber(userNumber);
}
return true;
}
private void printMatchingNumber(int num) {
System.out.println("Your number, " + num + ", has been called.");
}
}
【问题讨论】:
-
您预计会发生什么,而会发生什么?你读过 Set 的 javadoc 吗?
-
我认为如果我尝试存储重复的号码会引发异常。我想避免用户在 HashSet 中输入存储重复项。
-
好的。所以你还没有阅读javadoc。阅读。这是了解类/方法作用的最佳方式:docs.oracle.com/javase/7/docs/api/java/util/Set.html#add%28E%29。 如果该集合已经包含该元素,则调用将保持该集合不变并返回 false。 看到了吗?没有抛出异常。
标签: java arrays set duplicates hashset