我正在尝试从数组中删除重复项。我的数据大小为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 :(得分: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
。
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
... ...
这会导致无限循环。做一些改变并继续。 :)