从其他类中的其他方法调用数组

时间:2010-05-06 13:19:21

标签: java arrays

我需要帮助处理我的java程序中的数组。在我的第一堂课“测试”中,我设置了4个变量然后将它们发送到我的其他类(test2)。

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

此时,变量已设置,然后我想返回这些变量。所以在test2类中,我有一个严格返回其中一个变量的方法

public int getId(){
return id;
}

我明白这有点愚蠢,但教授得到教授想要的东西。我现在要做的是在我的主要方法“test”中我想要检索该变量并根据该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;
  }

我感谢任何人都能提供的任何帮助。 谢谢

2 个答案:

答案 0 :(得分:2)

所以有一些评论:

- 你的循环看起来像这样:

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

你应该宣布

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

要么你还没有声明我,这会给你一个编译错误,或者你之前声明我不理想...你通过尽可能在本地声明变量来避免错误。

- 在这一行中你直接比较对象:

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;

这将帮助您更快地了解在您的计划中发生的事情,并且不要害怕添加更多类似的东西。

答案 1 :(得分:0)

制作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> Effective Java 2nd Edition:第25项:首选列表到数组)。

另见


如果您必须实施自己的排序,则需要arr[i] < arr[indexMin]代替arr[i].getId() < arr[indexMin].getId()。这假设它被声明为Test2[] arr;

如果出于某种原因将其声明为Object[] arr,那么您只需要将它们转换为Test2,然后才能调用getId()

((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(),但您可以单独访问成员方法。

另见