-3

我有一个大小为 5 的数组,如果任何索引都没有,我想从随机函数中分配值。

while(positionXtoStart==array1[0] || positionXtoStart==array1[1] || 
      positionXtoStart==array1[2] || positionXtoStart==array1[3] || 
      positionXtoStart==array1[4])
{    
    positionXtoStart = (rand1.nextInt(400) + 1)+30;  
}

此解决方案适用于小尺寸数组,但如果我有大小为 1000 的数组,我无法在 while 循环中输入 1000 个条件。

我尝试了带有 if-else 条件的 For 循环,但问题是,我想同时检查所有数组索引。

请试着理解我在问什么。我想同时检查所有数组索引值(一次)

在 For 循环中,我们一次只能检查一个值。

4

4 回答 4

1

如果我理解正确,您只需要遍历数组,检查每个值。

for (int i = 0; i < array1.length; i++)
{
    if (array1[i] == positionXtoStart)
    {
         positionXtoStart = (rand1.nextInt(400) + 1)+30;

         break; // exit the loop
    }
}
于 2013-04-22T21:02:09.857 回答
1

你在找这样的东西吗?

for(int i=0; i<array1.length; i++)
    if(array[i] == whatever)
    {
        // do stuff
    }
于 2013-04-22T21:03:31.470 回答
0

如果您必须检查每个条目,则必须遍历整个数组。一个无序数组并不适合通过它进行搜索。也许您应该考虑将数据结构更改为 BST 之类的东西,这样您就可以保证 O(logn) 搜索。

要比较无序数组中的所有元素,您需要线性时间。

于 2013-04-22T21:06:58.273 回答
0

不幸的是,你问的是不可能的。即使在您的代码中:

while(positionXtoStart==array1[0] || positionXtoStart==array1[1] || 
  positionXtoStart==array1[2] || positionXtoStart==array1[3] || 
  positionXtoStart==array1[4])

计算机一次检查一个条件。它并没有像您想象的那样一次完成所有条件。您发布的代码等同于 @Supericy 和 @Samiam 发布的代码。

除非有原因 forloops 不适用于您的情况,否则我会说使用此处发布的答案。

于 2013-04-22T21:43:44.443 回答