2013-09-21 35 views
0

我想通过实现一个类似的算法来排序数组,我已经用来排序数组。我知道我可以使用Collects.sort,但由于我仍然是初学者,我宁愿写代码并学习它。比较存储在数组列表中的两个整数对象的值。这是我的代码,通过引用此方法将scores数组作为参数传递。此时此代码不能正确排序,而是在所有下标中插入数组中的最小数字。在一个侧面说明我很好奇,我如何比较索引j和索引最小的分数与compareTo()方法,因为我比较的是对象而不是基元,我觉得它比解决方案更好。谢谢!排序ArrayList与阵列相同Algo

 int smallest; 
    for (int i = 0; i < 5; i++) 
    { 
     smallest = i; 
     for (int j = i; j < scores.size(); j++) 
     { 
      if ((Integer) scores.get(j) < (Integer) scores.get(smallest)) 
       smallest = j; 
     } 

     int temp = (Integer) scores.get(i); 
     int swap = (Integer) scores.get(smallest); 
     scores.add(i, swap); 
     scores.add(smallest, temp); 

    } 
+0

排序使用集合接口列表中。 –

回答

0

眼下这个代码不正确排序,而是将所有标阵列中的最低数量。

您需要使用set()方法代替add()来替换元素。

在一个侧面说明我很好奇,因为我比较对象不是基元,我觉得这将是一个更好的解决方案比铸造

我能如何比较的指标j和指数最小与的compareTo()方法的分数

您可以通过为集合指定explit类型来避免轻松投射,如new ArrayList<Integer>

收集所有聚集在这里的更正后的代码:

ArrayList<Integer> scores = new ArrayList<Integer>(); 
    scores.add(5); 
    scores.add(4); 
    scores.add(2); 
    scores.add(1); 
    scores.add(3); 
    System.out.println(scores); 
    int smallest; 
    for (int i = 0; i < scores.size(); i++) 
    { 
     smallest = i; 
     for (int j = i; j < scores.size(); j++) 
     { 
      if (scores.get(j) < scores.get(smallest)) 
       smallest = j; 
     } 

     int temp = scores.get(i); 
     int swap = scores.get(smallest); 
     scores.set(i, swap); 
     scores.set(smallest, temp); 

    } 
    System.out.println(scores); 
+0

谢谢!非常感激。 – user2771729

+0

请将回答标为已接受 – Jk1