簡體   English   中英

從不同類中的其他方法調用數組

[英]Calling arrays from other methods in a different class

我需要有關在Java程序中處理數組的幫助。 在我的第一個類“測試”中,我設置了4個變量,然后將它們發送到另一個類(test2)。

arr[i] = new test2(id, fname, lname, case);

那時設置了變量,然后我想返回這些變量。 所以在test2類中,我有一個嚴格返回這些變量之一的方法

public int getId(){
return id;
}

我知道這有點愚蠢,但是教授猜到了教授想要的東西。 我現在想做的是在“測試”的主要方法中,我想檢索該變量並根據該int對數組進行排序。 不幸的是,我必須創建自己的排序函數,但是我認為這可以滿足我的需要。

for(j = 0; j < arr.length; j++){
   int indexMin =j;

   for(i = j; i < arr.length;i++){
    if(arr[i] < arr[indexMin]){
     indexMin = i;
    }
   }
   int tmp = arr[j];
   arr[j] = arr[indexMin];
   arr[indexMin] = tmp;
  }

感謝任何人可以提供的幫助。 謝謝

所以一些評論:

-您的循環如下所示:

for(i = j; i < arr.length; i++)

你應該宣布

for(int i = j; i< arr.length; i++);

要么您尚未聲明i,否則將導致編譯錯誤,或者您先前聲明了i,這不理想...通過盡可能在局部聲明變量,可以更好地避免bug。

-在這一行中,您直接比較對象:

if(arr[i] < arr[indexMin]){

但是,如果我正確理解了您的意圖,則希望比較ID,因此看起來應該像

if(arr[i].getId() < arr[indexMin].getId()){

-看起來arr是一個test2對象的數組,但是您為交換代碼分配了一個int:

int tmp = arr[j];

這應該是

test2 tmp = arr[j];

至於您的算法,為什么不啟動並運行代碼,然后嘗試測試一些結果。 那么ID為1、2、3和4的4個對象呢? 4、3、2和1怎么樣? 與我在這里告訴您一種算法相比,通過手動操作它會學到更多。 不要害怕添加一些語句,這些語句可以幫助您准確了解何時發生了什么。 例如,也許您可​​以將最后4行更改為:

System.out.println("About to swap id " + arr[j].getId() + " from index " + j + " with minimum " + arr[indexMin].getId() + " at index " + indexMin);
test2 tmp = arr[j];
arr[j] = arr[indexMin];
arr[indexMin] = tmp;

這將幫助您更快地了解程序中所發生的事情,並且不要害怕添加更多類似的內容。

使Test2 implements Comparable<Test2>並改用java.util.Arrays.sort(Object[])

compareTo(Test2)看起來像這樣:

@Override int public compareTo(Test2 other) {
   return
     (this.id < other.id) ? -1 :
     (this.id > other.id) ? +1 :
     0;
}

更好的是,如果您可以切換到List<Test2>有效的Java 2nd Edition:項目25:首選列表而不是數組 )。

也可以看看


如果必須實現自己的排序,則需要arr[i].getId() < arr[indexMin].getId()代替arr[i] < arr[indexMin] 假定已將其聲明為Test2[] arr;

如果由於某種原因它被聲明為Object[] arr ,那么您只需要在調用getId()之前將它們Test2Test2即可。

((Test2) arr[i]).getId() < ((Test2) arr[indexMin]).getId()

您還需要聲明Test2 tmp而不是int tmp進行交換。


至於打印,可以使用for-each循環:

for (Test2 t : arr) {
   System.out.println(t);
}

這假定Test2具有@Override public String toString() ,這對於打印@Override ,但是否則您可以單獨訪問成員方法。

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM