Java 我应该选择I>;1或i>;=1用于随机洗牌
我正在尝试以随机方式洗牌整数数组列表。我已经想出了下面的代码。不过,我怀疑这是否正确的做法。我在某个地方读到过关于(int I=list.size();I>=1;I--)的Java 我应该选择I>;1或i>;=1用于随机洗牌,java,arraylist,random,collections,Java,Arraylist,Random,Collections,我正在尝试以随机方式洗牌整数数组列表。我已经想出了下面的代码。不过,我怀疑这是否正确的做法。我在某个地方读到过关于(int I=list.size();I>=1;I--)的forin: public static void shuffling(List<?> list, Random rnd){ for(int i = list.size(); i >= 1; i--){ swap(list, i - 1, rnd.nextInt(i)); }
for
in:
public static void shuffling(List<?> list, Random rnd){
for(int i = list.size(); i >= 1; i--){
swap(list, i - 1, rnd.nextInt(i));
}
}
但是,如果我选择将它写成I>1
,而不是I>=1
,我不是忽略了数组列表中的第一项吗?有人对解决这个问题的正确方法有什么建议吗
我的代码:
public class TheCollectionInterface {
public static <E> void swap(List<E> a, int i, int j){
E temp = a.get(i);
a.set(i, a.get(j));
a.set(j, temp);
}
public static void shuffling(List<?> list, Random rnd){
for(int i = list.size(); i >= 1; i--){
swap(list, i - 1, rnd.nextInt(i));
}
}
public static void main(String[] args) {
List<Integer> li1 = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9));
Random r1 = new Random();
TheCollectionInterface.shuffling(li1, r1);
System.out.println(li1);
}
}
public类集合接口{
公共静态无效交换(列表a、int i、int j){
E温度=a.get(i);
a、 set(i,a.get(j));
a、 设置(j,温度);
}
公共静态无效洗牌(列表、随机rnd){
对于(int i=list.size();i>=1;i--){
掉期(清单,i-1,rnd.nextInt(i));
}
}
公共静态void main(字符串[]args){
List li1=新的ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9));
Random r1=新的Random();
collectioninterface.shuffling(li1,r1);
系统输出打印Ln(li1);
}
}
在这个循环中,当i=1
时,唯一要选择的元素是第0个元素,将第0个元素与第0个元素交换很简单,不会产生任何效果。因此,您不需要使用i=1
进入循环,您可以编写i>1
作为条件。存在集合。当然,如果您不想滚动自己的集合,可以使用shuffle
public class TheCollectionInterface {
public static <E> void swap(List<E> a, int i, int j){
E temp = a.get(i);
a.set(i, a.get(j));
a.set(j, temp);
}
public static void shuffling(List<?> list, Random rnd){
for(int i = list.size(); i >= 1; i--){
swap(list, i - 1, rnd.nextInt(i));
}
}
public static void main(String[] args) {
List<Integer> li1 = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9));
Random r1 = new Random();
TheCollectionInterface.shuffling(li1, r1);
System.out.println(li1);
}
}