01/10/2018, 08:21
Giúp em sắp xếp tăng giảm trong java
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;
}
}
}
}
Bài liên quan
Cái gì được sắp xếp tăng giảm ?
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.
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é.
Output
Ở 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
Rồi sử dụng class anonymous cho method sort