2016-01-17 24 views
2

嗨,大家好,我是編碼方面的新手,我在排序過去的幾天中遇到了一些小問題。如果我有3個元素,讓我們說1-3-2,排序工作正常,但是當我有最大數量(2-1-3)時,它根本不起作用。我找不到任何解決方案,我已經閱讀了大量的問題和材料,但是當我擁有最大的元素時,我仍然無法找到解決方案。我希望有些代碼能夠找到這個錯誤。當最後一個元素是Java中最大的元素時,沒有按升序排序

import java.util.ArrayList; 
import java.util.Comparator; 
public class MainClass { 

private static void printArrayList(ArrayList<Human> arr){ 
    arr.forEach(x -> x.printInfo()); 
}// end 

private static ArrayList<Human> sortComparator(ArrayList<Human> arr){ 

    Object[] sortedHumans = arr.stream().sorted(new Comparator<Human>(){ 
     @Override 
     public int compare(Human h1, Human h2){ 
      return Float.compare(h1.salary, h2.salary); 
     } 
    }).toArray(); 

    ArrayList<Human> sortedArr = new ArrayList<Human>(); 


    for(int i=0;i<sortedHumans.length;i++){ 
     sortedArr.add((Human)sortedHumans[i]); 
    } 


    return sortedArr; 
}// end 

private static ArrayList<Human> sortArrayList(ArrayList<Human> arr){ 
    ArrayList<Human> result = new ArrayList<Human>(); 

    if(arr.size()>0){ 
     result.add(arr.get(0)); 
    } 
    else{ 
     return null; 
    } 
    boolean flag = false; 

    for(int i=1;i<arr.size();i++){ 

     for(int j=0;j<result.size();j++){ 
      if(arr.get(i).salary < result.get(j).salary){ 
       result.add(j,arr.get(i)); 
       flag = true; 
       break; 
      }// end for j 
      else; 
     }//end for j 
     if(!flag){ 
      result.add(arr.get(i)); 
      flag = false; 
     } 
     else; 
    }// end for i 
    return result; 
}// end sort 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    ArrayList<Human> myList = new ArrayList<Human>(); 
    Human h1 = new Human("Ivan","Ivanov", 33, 1000); 
    Human h2 = new Human("Petyr","Petrov", 53, 800); 
    Human h3 = new Human("Georgi","Georgiev", 23, 1548); 

    myList.add(h1); 
    myList.add(h2); 
    myList.add(h3); 
    printArrayList(sortArrayList(myList)); 
    System.out.println("--------------"); 
    printArrayList(sortComparator(myList)); 
}// end main 

}// end MainClass 

當最後一個元素最大時有輸出。

Petyr - Petrov - 53 - 800.0 
    Ivan - Ivanov - 33 - 1000.0 

還有就是輸出時的最後一個元素是不是最大的,排序 作品...

Georgi - Georgiev - 23 - 548.0 
    Petyr - Petrov - 53 - 800.0 
    Ivan - Ivanov - 33 - 1000.0 

回答

0

在你的第二個sortArrayList方法的問題是,你不進行重置flag變量在正確的位置,所以如果最後一個元素最大,if(!flag)條件不會將最後一個元素添加到排序列表中。

flag應在內循環的每次迭代開始時爲false

修復建議:

for(int i=1;i<arr.size();i++){ 
    boolean flag = false; 
    for(int j=0;j<result.size();j++){ 
     if(arr.get(i).salary < result.get(j).salary){ 
      result.add(j,arr.get(i)); 
      flag = true; 
      break; 
     }// end for j 
    }//end for j 
    if(!flag){ 
     result.add(arr.get(i)); 
     flag = false; 
    } 
}// end for i 
+0

這真是一個無賴......我知道這將是一件小事,因爲一切都看起來很完美。我的老師也說過旗幟出了問題,但我不知道我必須把它放到內部循環中。非常非常感謝你的男人。你剛剛救了一天。現在它工作,因爲它應該工作。非常感謝!! –

+0

@KostadinLoparski不客氣! – Eran

0
private static ArrayList<Human> sortArrayList(ArrayList<Human> arr){ 
    ArrayList<Human> result = new ArrayList<Human>(); 
    Map<Double, Human> map = new HashMap<Double, Human>(); 
    for (Human human : arr) 
     map.put(human.salary, human); 
    List<Double> salaries = new ArrayList<Double>(); 
    for (double salary : map.keySet()) 
     salaries.add(salary); 
    Collections.sort(salaries); 
    for (int i = 0; i < salaries.size(); i++) 
     result.add(map.get(salaries.get(i))); 
    return result; 
} 

這是未經測試,但它應該工作,假設.salary是雙(它可能不是)

+0

可能它有效,我現在不能檢查,因爲它顯示了你的方法的一些錯誤,我太累了,不能處理更多的代碼,因爲我試圖解決這個問題幾天,我讀了很多文章和東西,但我學到了很多東西。謝謝你的回答,但我很感激! –

0

我看到你的問題有已經解決了,但不管這是我怎麼會想到這樣做。

private static ArrayList<Human> sortArrayList(ArrayList<Human> arr){ 
    if(arr.size()==0){ 
     return null; 
    } 
    else{ 
     ArrayList<Human> result = new ArrayList<Human>(); 
     for(Human h : arr){ 
      result.add(h); 
     } 
     Human temp; 
     for(int i=0; i<result.size()-1; i++){ 
      for(int j=i+1; j<result.size(); j++){ 
       if(result.get(j).salary < result.get(i).salary){ 
        temp = result.get(j); 
        result.remove(j); 
        result.add(i, temp); 
       } 
      }//end for j 
     }//end for i 
     return result; 
    }//end else 
}// end sort 
+0

是的,我試過這種方法,它的工作原理,但條件是不要觸摸算法,並找到我張貼的代碼中的錯誤。儘管謝謝你的回答! –

+0

啊我明白了。很公平 :) –

相關問題