2013-07-16 53 views
0

昨天我发布了一个关于数组中索引排序的问题。我得到了奇怪的结果,这在一定程度上是正确的。我找出原因,但我不知道如何解决。为什么打印方法从数组索引打印空数据?

我声明了一个数组,其最大索引值为50.将数据读入一个文件后,只有24个左右填充了实际数据,其余都填充了0。当我打印时,所有50个索引都按升序排列。我无法弄清楚如何只用数据打印索引。

这里是链接到我的问题昨天:Sorting double arrays into ascending order

下面是我的代码数组声明和初始化,排序环,印刷等。任何帮助将是伟大的!

private double[] x; 


x = new double[50]; 

int index, j = x.length - 1,double temp; 

for (j = x.length - 1; j >= 0; j--) { 
    for (index = 0; index <= j - 1; index++) { //start for 
     if (x[index] > x[index + 1]) { //start if 
      temp = x[index]; 
      x[index] = x[index + 1]; 
      x[index + 1] = temp; 
     } 
    } 
} 

for (index = 0; index < x.length; index++) { 
    System.out.printf("%3d. \t\t%5.1f%%\n", (index + 1), x[index]); 
} 
+0

只是为了澄清,一个0,不管什么代表没有数据是正确的? –

+0

是的,0代表没有数据。 –

回答

1

由于所有的数组索引被初始化为0,你的排序算法会将所有的指标没有数据(基本上0)到阵列的前端,该值,然后added--其作为所指出的,可也包含0。然后,您的打印方法将打印整个阵列,因为您从index=0开始并一直移动到阵列的末尾。

我建议如下:将数据添加到阵列时,保持count变量,跟踪你已经添加了多少个值(即做的每添加一个新的值时count++),则数组排序。

然后打印这样的:

for (index = x.length-count; index < x.length; index++) { 
    System.out.printf("%3d. \t\t%5.1f%%\n", (index + 1), x[index]); 

}

因此,你打印出来只有你自己加入的数据,而不是空洞的指标。

+0

在0是数据的情况下,这应该有所帮助。 –

1

使用ArrayList而不是数组。跟踪添加的项目,以便您不需要重新创建标准库。如果你确实需要使用一个数组,那么保持物品数量并只打印你拥有的物品数量。

1

我看到两个选项:

  1. 您可以使用ArrayList。这是一个动态的数据结构,它会随着你投入的物品越多而不断增加。完成后,您只需遍历ArrayList并打印其内容即可。或

  2. 填充数组时,您会记录您实际添加的项目数。然后从0到这个数字进行迭代,而不是整个数组的大小。