我想替换存储在ArrayList中的重复数字(如果有的话)。我认为随机变量的数字。这是班级。
import java.util.*;
public class RandomNumbers {
// instance variables
private ArrayList<Integer> randomNumberList = new ArrayList<Integer>();
private Random randomNums = new Random();
public RandomNumbers(){
// generating and adding random numbers to the list
for (int i=0; i<MemoryGame.totalAnswers; i++)
randomNumberList.add(randomNums.nextInt(32));
System.out.println("Numbers in the list: " + randomNumberList);
System.out.println("");
}
public ArrayList<Integer> getRandomNumbers(){
return randomNumberList;
}
}
我的学校书籍告诉我如何添加,删除和检索数字,而不是如何替换重复的数字。
感谢。
答案 0 :(得分:2)
如果您不限于ArrayList
,请使用HashSet<Integer>
代替(或更好的是LinkedHashSet)。 HashSet<Integer>
会保证您不会在集合中包含重复的值,LinkedHashSet<Integer>
将执行相同的操作并保留项目的排序。
如果您坚持使用ArrayList
,请执行以下操作:
public RandomNumbers(){
HashSet<Integer> set = new HashSet<Integer>();
// generating and adding random numbers to the list
//for (int i=0; i<MemoryGame.totalAnswers; i++)
while (set.size()<MemoryGame.totalAnswers)
set.add(randomNums.nextInt(32));
randomNumberList.addAll(set); // dump the set in your ArrayList
System.out.println("Numbers in the list: " + randomNumberList);
System.out.println("");
}
此外,如果MemoryGame.totalAnswers == 32
,那么您可以使用random list来加快此过程:
public RandomNumbers(){
// generating and adding random numbers to the list
for (int i=0; i<MemoryGame.totalAnswers; i++)
randomNumberList.add(i);
Collections.shuffle(randomNumberList);
System.out.println("Numbers in the list: " + randomNumberList);
System.out.println("");
}
** 更新 **
自MemoryGame.totalAnswers == 8
以来,请忘记最后一段。如果有人愿意,我会把它留在那里。您可以完全按照pst的建议跳过Set
的使用:
public RandomNumbers(){
// generating and adding random numbers to the list
for (int i=0; i<32; i++)
randomNumberList.add(i);
Collections.shuffle(randomNumberList);
// keep only the first ones we need
randomNumberList.removeRange(MemoryGame.totalAnswers + 1, 32);
System.out.println("Numbers in the list: " + randomNumberList);
System.out.println("");
}
答案 1 :(得分:1)
要替换位置中的元素,请使用set()
方法:
randomNumberList.set(index, element);
当然,首先找出哪些元素重复的逻辑取决于你;如果您的问题有重复的数字没有意义,最好使用Set
数据结构(例如:HashSet或LinkedHashSet,如果在迭代时保留插入顺序很重要you)并继续向集合添加随机元素,直到它具有所需的大小。
答案 2 :(得分:1)
如果最终目标是不同数字的随机列表,并且可能数字的范围不比所需结果的数量大很多,请考虑shuffle而不是替换重复项。
答案 3 :(得分:0)
如果你想要的只是你最后的评论
0个随机,非重复数字0-31
您不需要任何实例变量,随机数生成代码或实例方法 所有你需要的只是这个:
public static List<Integer> getRandomNumbers() {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 32; i++)
list.add(i);
Collections.shuffle(list);
return list.subList(0, 8);
}