2013-11-28 44 views
1

我试图从数组中删除重复项。我在数组大小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); 
    } 
+0

你的索引是什么?我想这里可能会有一些误解。 'int [5001]'有5001个元素,而不是5000.不知道为什么当x <5000'或更好的时候使用'x <4999',或者更好,'x Zong

回答

2

原因无限循环,因为你在你的for回路设置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循环进入x的值等于到0

另外声明

int array [] = new int [5001]; 

所以该阵列的所有元件将具有默认值为0,因此条件if(array[x]==array[x+1])总是为真,然后将上面的场景即x总是0会引起问题。改变逻辑!

在一个侧面说明: -

这是更好地使用array.length而不是硬编码数组的长度for循环。

+0

谢谢,但它确实有效。如果它们不相等,它将移动到下一个。 x = 0只是将计数器保持在同一点上的一种方式,直到没有重复为止。我将使用array.length。我试图找出为什么它不能正确缩放。当我使用小号码时,它运行良好。 –

1

为什么无限循环发生的情况:

int array [] = new int [5001]; 

每个元件具有一个0值defalut:

1您如下声明int数组。

2在for循环中,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; 
     } 

    } 

其结果是,该程序总是只比较第一2层的元件。

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 
... ... 

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

+0

为什么它使用小数字呢?看到你说什么不应该工作,为什么呢? –

+0

如果我在数组上做了这个算法,但数组已经被随机数填充,那么你认为它会起作用吗? –