恐怕我对集合和数据结构的理解不够,无法处理有关哈希集的类似问题。我目前有一个循环,该循环在程序中将数组内的索引随机化。传递给该方法的原始数组由所有小于1000的质数组成。
不包括完整的程序,因为它是较大的作业的一部分。
我的问题是我创建的if语句重复打印出数字,即使我以为我将其编码为仅在数字已经不在数组中时才打印出数字。
有人可以指出我的逻辑错误吗?
public static void shuffle(int[] intArray, String name)
{
assert intArray != null : "null!";
long seed = name.hashCode();
Random random = new Random(seed);
for(int i = 0; i < 1000; i++)
{
int random_m = random.nextInt(intArray.length);
int random_n = random.nextInt(intArray.length);
int temp = intArray[random_m];
intArray[random_m] = intArray[random_n];
intArray[random_n] = temp;
int zeroIndex = intArray[0];
List<Integer> myList = new ArrayList<Integer>();
if(!myList.contains(zeroIndex))
{
System.out.println(zeroIndex);
}
myList.add(zeroIndex);
}
}
部分输出示例:
5821 5821 5821 5821 5821 5821 5821 5821 5821 5821 5821 5821
答案 0 :(得分:3)
List<Integer> myList = new ArrayList<Integer>();
此代码行为myList创建新的memorySpace,因此每次迭代时都会重置myList值。
因此在循环之外定义myList。
答案 1 :(得分:0)
使用int zeroIndex = intArray[i];
希望您现在就知道了:-)