有没有办法可以使用$.noConflict();
jQuery( document ).ready(function( $ ) {
alert("safe to use jQuery's $ here");
$( "button" ).click(function() {
$( "div.showMobile" ).toggleClass( "showMobileNav" );
});
});
打印给定数组中的元素?
Math.random
所以输出就像
int[] list = new int[] {1,2,3};
或
2,1,3
或
3,1,2
答案 0 :(得分:0)
也许你可以通过洗牌然后打印来接近它。如果不应修改原件,您可以制作副本,然后随机播放副本。
有一些众所周知的洗牌阵列(或一副牌)算法。可以找到一个here。 java中的实现如下所示:
static void shuffleArray(int []array) {
int length = array.length;
for (int i = length -1; i > 0; i--) {
// generate a random 0 <= j < i
int j = (int)(Math.random() * i);
// swap elements at i and j
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
答案 1 :(得分:0)
大多数答案中提出的方法效率极低,因为它在O(N 2 )时间内起作用。想一想:首先,你将通过一次尝试生成未使用的索引,但是接近结束时,当几乎所有数组都被处理时,它将需要几乎N步才能生成下一个未使用的索引。
最佳O(N)方法是创建混洗的索引数组(0..N),其中每个索引只出现一次,然后按混洗索引的顺序处理原始数组。每一步都需要O(N)时间,因此整个算法都是O(N)。
int[] input = new int[]{5, 4, 3, 6, 2, 1};
int []indices = new int[input.length];
//Fisher-Yates shuffle
Random rnd = new Random();
for (int i = 0; i < indices.length; i++) {
int j = rnd.nextInt(i + 1);
indices[i] = indices[j];
indices[j] = i;
}
for (int i : indices) {
System.out.println(input[i]);
}
我没有使用Collections.shuffle
,因为它需要使用Collection
并因此包装Integer
元素,与普通int
数组相比效率非常低。
另外,如果您可以修改原始阵列,可以将其随机播放(使用相同的Fisher-Yates shuffle),然后在遍历时使用它。
UPD:用洗牌初始化替换了shuffling索引数组。
答案 2 :(得分:0)
由于你有java 8,你可以利用漂亮的Stream API。
简而言之,您可以这样做:
new Random().ints(1, 500).limit(500).forEach(p -> System.out.println(list[p]));
其中1
是生成的最低int(包括),500
是最高的(不包括)。 limit
表示您的信息流的长度为500
,可能在您想要放置list.length
的参数中。
对于你的情况:
int[] list = new int[] {1,2,3,4,5,6};
new Random().ints(0, list.length).limit(10).forEach(p -> System.out.println(list[p]));
打印:5 2 5 4 6 3 3 5 6 4
(显然不会为您打印相同的数字)
答案 3 :(得分:-1)
void printRandom(int[] array) {
if (array.length == 0)
return;
Random rand = new Random();
int rnd = rand.nextInt(array.length);
int element = array[rnd];
array = ArrayUtils.removeElement(array, element);
System.out.print(element);
printRandom(array);
}
只需重复此过程,直到删除所有元素。显然添加检查以防止错误,请记住我很久没有使用过JAVA,所以如果你有问题可以回复!
最后请记住这会删除数组,因此您可能希望将此代码包装在函数中,然后将该数组复制为局部变量,以便您可以根据需要重用原始数据
答案 4 :(得分:-1)
创建一个可能与数组长度一样高的随机整数 - 1.如果随机整数等于先前使用的随机整数 - 通过在数组中存储使用的整数而知道 - 创建一个新的随机整数。否则,打印与随机整数指定的索引相关的字符串。如果存储使用的随机整数的数组的长度等于字符串数组的长度,则停止该过程。
这应该只打印所有字符串一次并随机打印。
答案 5 :(得分:-1)
在这种情况下,我们可以使用如下方式从数组中打印随机值:
<强>步骤:强>
如果列表大小和数组长度相等,则终止循环
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class RandomIndices {
public static void main(String[] args) {
int[] list = new int[]{1, 2, 3};
Random random = new Random();
List<Integer> randomIndices = new ArrayList<>(); //to hold indices which are already printed
boolean isRemain = true;
while (isRemain) {
int randomIndex = random.nextInt(list.length);
if (!randomIndices.contains(randomIndex)) { //check random index value of array is printed or not
randomIndices.add(randomIndex);
System.out.println(list[randomIndex]);
}
if (randomIndices.size() == list.length) {
isRemain = false;
}
}}
}
答案 6 :(得分:-1)
这是解决方案
public static void main(String[] args) {
int[] list = new int[] { 1, 2, 3 };
int[] aux = new int[list.length];
int countTimes = 0;
while (countTimes < list.length) {
int position = new Random().nextInt(list.length);
if (aux[position] != list[position]) {
System.out.println(list[position]);
aux[position] = list[position];
countTimes++;
}
}
}
答案 7 :(得分:-1)
实施一个简单的&#34; do while&#34;声明,以防止重复数字显示出你的数组(我使用StringArray - 但IntegerArray将以相同的方式工作 - 作为旁注,我可以在这里放置完整的代码,但不想这样做如果它不适用。我使用下拉列表选择要生成多少个随机单词 - 然后显示那组真正的随机单词(非重复):
final Random rand1 = new Random();
final Random rand2 = new Random();
final int rndInt1 = rand1.nextInt(getResources().getStringArray(R.array.words).length);
int rndInt2 = rand2.nextInt(getResources().getStringArray(R.array.words).length);
if (rndInt1 == rndInt2){
do {
rndInt2 = rand2.nextInt(getResources().getStringArray(R.array.words).length);
}while (rndInt1 == rndInt2);//if indexes are equal - re-run the array search
}
outString = getResources().getStringArray(R.array.words)[rndInt1];
outString += ", " + getResources().getStringArray(R.array.words)[rndInt2];//concatenate the list
textWord = (TextView) findViewById(R.id.textWords);//An empty text field in my layout
textWord.setText(outString);//Set that empty text field to this string of random array elements