Giúp Em Sắp Xếp Tăng Giảm Trong Java - Programming - Dạy Nhau Học Trang chủ » Hàm Sắp Xếp Giảm Dần Trong Java » Giúp Em Sắp Xếp Tăng Giảm Trong Java - Programming - Dạy Nhau Học Có thể bạn quan tâm Hàm Sắp Xếp Giảm Dần Trong Python Hàm Sắp Xếp Giảm Dần Trong Sql Hàm Sắp Xếp Java Hàm Sắp Xếp Mảng Java Hàm Sắp Xếp Mảng Trong Java Giúp em sắp xếp tăng giảm trong java programming java hunter (hunter) February 16, 2017, 10:41am #1 em làm sắp xếp tăng giảm nhưng lại lỗi, sữa mãi không biết chỗ nào, hi vọng mọi người giúp đỡ. Code e tự học nên mọi người góp ý để e hoàn thiện hơn ạ. Lỗi đoạn : Collections.sort(list); Collections.reverse(list); em chưa biết sữa thế nào cả Code e đây: package Test; import java.util.*; class HoTen{ String ten; void xem(){ System.out.println("Họ và Tên: "+ten); } } class danhsach{ ArrayList<HoTen> list = new ArrayList<>(); Scanner input = new Scanner(System.in); void nhapten(HoTen ht){ System.out.print("Mời bạn nhập họ tên: "); ht.ten = input.nextLine(); if(ht.ten.equals("")){ ht.ten=input.nextLine(); } list.add(ht); } void xuatht(){ if(list.size()==0){ System.out.println("Chưa có họ tên: "); } else{ for(int i=0;i<list.size();i++){ list.get(i).xem(); } } } void ngaunhien(){ if(list.size()==0){ System.out.println("Chưa có họ tên: "); } else{ for(int i=0;i<list.size();i++){ list.get(i).xem(); Collections.shuffle(list); } } } void dao(){ // Ý 4 e chưa làm được không biết code sai chỗ nào. if(list.size()==0){ System.out.println("Chưa có họ tên: "); } else{ for(int i=0;i<list.size();i++){ list.get(i).xem(); Collections.sort(list); Collections.reverse(list); } } } void tim(){ if(list.size()==0){ System.out.print("Không có tên trong danh sách"); } else{ System.out.print("Mời bạn nhập họ tên muốn xóa: "); String ht1 = input.nextLine(); boolean tim = false; for(HoTen ht: list){ if(ht.ten.equals(ht1)){ list.remove(ht); tim = true; break; } } } } } public class test2 { static void Menu(){ System.out.println("==============="); System.out.println("Nhập lựa chọn tương ứng với số"); System.out.println("1. Nhập danh sách Họ Tên"); System.out.println("2. Xuất danh sách vừa nhập"); System.out.println("3. Xuất danh sách ngẫu nhiên"); System.out.println("4. Sắp xếp giảm dần và xuất danh sách"); System.out.println("5. Tìm và xóa họ tên nhập và từ bàn phím"); System.out.println("6. Kết thúc"); System.out.println("==============="); } public static void main(String[] args){ int chon; danhsach ds = new danhsach(); Scanner input = new Scanner(System.in); Menu(); while(true){ System.out.print("Mời bạn chọn 1 mục: "); chon= input.nextInt(); switch(chon){ case 1: ds.nhapten(new HoTen()); break; case 2: ds.xuatht(); break; case 3: ds.ngaunhien(); break; case 4: ds.ngaunhien(); break; case 5: ds.tim(); break; case 6: return; } } } } masoivn (vũ xuân quân) February 17, 2017, 2:23am #2 Cái gì được sắp xếp tăng giảm ? hunter: for(int i=0;i<list.size();i++){ list.get(i).xem(); Collections.sort(list); Collections.reverse(list); } Xem ví dụ https://www.tutorialspoint.com/java/util/collections_sort_comparable.htm Dự trên ví dụ trên thì hàm sort này chỉ sắp xếp được chuỗi. Còn hiện tại em cho sắp xếp object. Mình nghĩ là không được. Muốn sắp xếp thì for cái list đó rồi mang đi so sánh tên của từng object hoTen. 1 Like qtd (Đỗ Trung Quân) February 17, 2017, 4:18am #3 Nếu em sắp xếp 1 list các số nguyên thì làm như vậy là đúng. Nhưng hiện tại em đang sắp xếp 1 list các object. Vì vậy cần implement Comparable và override lại method CompareTo. Vì code của em chưa clear nên anh lấy cái này làm ví dụ nhé. public class Name implements Comparable<Name> { private final String firstName, lastName; public Name(String firstName, String lastName) { if (firstName == null || lastName == null) throw new NullPointerException(); this.firstName = firstName; this.lastName = lastName; } //Bắt buộc class phải có setter và getter. Class HoTen ở trên của em chưa có setter + Constructor public String firstName() { return firstName; } public String lastName() { return lastName; } public boolean equals(Object o) { if (!(o instanceof Name)) return false; Name n = (Name) o; return n.firstName.equals(firstName) && n.lastName.equals(lastName); } public int hashCode() { return 31*firstName.hashCode() + lastName.hashCode(); } public String toString() { return firstName + " " + lastName; } public int compareTo(Name n) { int lastCmp = lastName.compareTo(n.lastName); return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName)); } } public class NameSort { public static void main(String[] args) { Name nameArray[] = { new Name("John", "Smith"), new Name("Karl", "Ng"), new Name("Jeff", "Smith"), new Name("Tom", "Rich") }; List<Name> names = Arrays.asList(nameArray); Collections.sort(names); System.out.println(names); } } Output [Karl Ng, Tom Rich, Jeff Smith, John Smith] Ở trên là sort theo natural sorting. (Sắp xếp tự nhiên - thông thường) Trong trường hợp em muốn sort theo ý riêng của mình cần override lại comperator. Muốn giải quyết ngắn gọn đoạn code của em thì đơn giản nhất là sử dụng class anonymous Đầu tiên thêm Constructor và get set cho class HoTen public HoTen() { public HoTen(String ten) { this.ten = ten; } public String getTen() { return ten; } public void setTen(String ten) { this.ten = ten; } Rồi sử dụng class anonymous cho method sort Collections.sort(list,new Comparator<HoTen>(){ public int compare(HoTen s1,HoTen s2){ return s1.getTen().compareTo(s2.getTen()); }}); 2 Likes DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » Hàm Sắp Xếp Giảm Dần Trong Java Sắp Xếp Mảng Trong Java Bài Tập Java - Sắp Xếp Mảng Theo Thứ Tự Giảm Dần - VietTuts Sắp Xếp Tăng Dần Và Giảm Dần Trong Java - Freetuts Sắp Xếp Tăng Dần Và Giảm Dần Trong Java - Bài Tập Java Có Lời Giải ... Sort Tăng Và Giảm Dần Trong ArrayList - Deft Blog Cách Sắp Xếp Một Mảng Trong Java - TutorialCup Bài Tập Java Cơ Bản: Sắp Xếp Mảng Theo Thứ Tự Tăng Dần | Codelearn Java - Sắp Xếp Danh Sách Sinh Viên Theo điểm Giảm Dần, Họ, Tên ... Sắp Xếp Mảng Tăng Dần Java Sắp Xếp Mảng Số Nguyên Trong Java | Tìm ở đây Sắp Xếp Các Phần Tử Trong Mảng Tăng Dần? - Tạo Website [Update] Sắp Xếp Mảng Một Chiều Tăng Dần, Giảm Dần Trong C/C++ Bài 45. Sắp Xếp Dãy Số Giảm Dần, Tăng Dần - Lập Trình Không Khó