2013-07-16 60 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到這個數字進行迭代,而不是整個數組的大小。