[英]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:首選列表而不是數組 )。
this.id - other.id
。 這種減法比較的技巧被打破了。 如果必須實現自己的排序,則需要arr[i].getId() < arr[indexMin].getId()
代替arr[i] < arr[indexMin]
。 假定已將其聲明為Test2[] arr;
如果由於某種原因它被聲明為Object[] arr
,那么您只需要在調用getId()
之前將它們Test2
為Test2
即可。
((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.