删除重复项会扩大错误

时间:2013-11-28 15:33:20

标签: java arrays duplicates

我正在尝试从数组中删除重复项。我的数据大小为10([11])。然后我不得不把它扩大到5000([5001])。我觉得这很简单。它编译但是当我运行它时它运行一个无限循环。我不确定它是否只需要很长时间或者某些东西不起作用。 sort.sorting有效。

public class work_on_it5
{
    public static void main(String [] args)
    {
        int array [] = new int [5001];
        int LB = 1;//declare the lower bound
        int UB = 5000;//declare the upper bound
        for(int x = 0; x < 4999; x++)
        {
            if(array[x]==array[x+1])
            {
                array[x+1] = (int)(Math.random()*50) + 1;
                sort.sorting(array);
                x=0;
            }

        }
        sort.sorting(array);
        for(int x = 0; x < 4999; x++) 
        {
            System.out.println(array[x]);
        }
        //median(LB, UB, array);
        //mean(array);
    } 

2 个答案:

答案 0 :(得分:2)

无限循环的原因是因为您正在设置x=0;

for(int x = 0; x < 4999; x++)
        {
      if(array[x]==array[x+1])
            {
                array[x+1] = (int)(Math.random()*50) + 1;
                sort.sorting(array);
                x=0; //Here you are setting the value of x which is never changed resulting in infinite loop
            }
}
在您的for循环中

因此,每当它进入for循环时,x的值等于0

还有声明

int array [] = new int [5001];

所以数组的所有元素都将默认值为0,因此条件if(array[x]==array[x+1])将始终为true,然后x始终为0的上述方案将导致问题。改变逻辑!

旁注: -

最好使用array.length而不是在for循环中对数组的长度进行硬编码。

答案 1 :(得分:1)

为什么会发生无限循环:

1您按如下方式声明一个int数组:

 int array [] = new int [5001];

每个元素的defalut值为0

在for循环中

2, if(array[x]==array[x+1]) 始终为TRUE。然后 x = 0

 for(int x = 0; x < 4999; x++)
    {
        if(array[x]==array[x+1])
        {
            array[x+1] = (int)(Math.random()*50) + 1;
            Arrays.sort(array);
            x=0;
        }

    }

因此,程序始终只比较前两个元素。

Compare array[0] and array[1], they are equal. 
Reset x = 0
Compare array[0] and array[1], they are equal. 
Reset x = 0
Compare array[0] and array[1], they are equal. 
Reset x = 0
... ... 

这会导致无限循环。做一些改变并继续。 :)