2017-08-02 108 views
0

我被要求在Java中切换对象数组中的最大值和最小值。我写了我的代码,这似乎是合理的,但由于某些原因,值不切换?我不太清楚我的代码有什么问题,有人能指出我的方向吗?谢谢!!在Java中切换对象数组中的最小值和最大值

这是我的代码:

public class Measurables 
{ 
    /** 
     Swaps the values with the smallest and largest measure. 
     @param objects an array of objects of a class that implements the 
     Measurable interface. 
    */ 
    public static void swapMinAndMax(Measurable[] objects) 
    { 

     Measurable largest = objects[0]; 
     Measurable smallest = largest; 
     for (int i = 1 ; i < objects.length ; i++) 
     { 
     Measurable current = objects[i]; 
     if (largest.getMeasure() < current.getMeasure()) 
     { 
      largest = current; 
     } 
     if (smallest.getMeasure() < current.getMeasure()) 
     { 
      smallest = current; 
     } 
     Measurable temp = largest; 
     largest = smallest; 
     smallest = temp; 

     } 
     } 
} 

这是我所得到的,当我运行测试仪:

Testers 

Running Tester.java 

fail 
[Uruguay, Thailand, Belgium] 
Expected: [Uruguay, Belgium, Thailand] 
Running Tester2.java 

fail 
[BankAccount[balance=1000.0], BankAccount[balance=3000.0], BankAccount[balance=2000.0]] 
Expected: [BankAccount[balance=3000.0], BankAccount[balance=1000.0], BankAccount[balance=2000.0]] 
Running Tester3.java 

pass 
[Uruguay] 
Expected: [Uruguay] 
+2

您不保存交换的数组。 您正在测试每个值,但是不会按照您想要的方式返回数组排序 – sheplu

+0

要扩展sheplu的评论:不需要返回数组,您可以对其进行修改。但是你不会改变这些项目,只是你指向的局部变量。即最后做'objects [largest_index] =最小;对象[smallest_index] =最大;'。 (你还需要跟踪这些索引。) – user2478398

+0

我认为你可以使用[排列]方法[在Arrays类中](http://docs.oracle.com/javase/8/docs/api/的java/UTIL/Arrays.html#排序-T:A-java.util.Comparator-)。只需传递数组和一个lambda表达式,以指示值何时比其他值大 –

回答

1

可以储存您的元素的索引,以便您可以执行在之后交换您确定最小和最大的指数。另外,你似乎已经将最小值换成了对比值。类似的,

public static void swapMinAndMax(Measurable[] objects) { 
    int largest = 0, smallest = 0; 
    for (int i = 1; i < objects.length; i++) { 
     Measurable current = objects[i]; 
     if (objects[largest].getMeasure() < current.getMeasure()) { 
      largest = i; 
     } 
     if (objects[smallest].getMeasure() > current.getMeasure()) { 
      smallest = i; 
     } 
    } 
    // Now swap, we know the indexes. 
    Measurable temp = objects[largest]; 
    objects[largest] = objects[smallest]; 
    objects[smallest] = temp; 
} 
相关问题