30/09/2018, 20:36

[JAVA] Sắp xếp một ArrayList gồm các số kiểu Integer

chào anh chị em và các bạn trên diễn đàn, em có một bài tập java yêu cầu : " Nhập vào một dãy số, tìm giá trị max , giá trị min của dãy số "
Em muốn sử dụng ArrayList để làm bài này, Bài của em gồm 3 class :

  1. Class So : chứa thông tin dãy số
  2. Class XuLySo : xử lý dãy số
  3. Class Main

em đã làm được phần nhập các đối tượng chứa số vào trong ArrayList. Nay em muốn sắp xếp cái ArrayList để tìm max min thì em phải làm thế nào ạ ? Đây là 3 class của em

// class So

public class So {
    private int so;
    
    So(int so){
        this.so=so;
    }
    public int getSo(){
        return so;
    }
    
    public void setSo(int so){
        this.so=so;
    }
    
    @Override
    public String toString(){
        return "
"+ so;
    }
}

// Class XuLySo

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class XuLySo {
    ArrayList<So> arl = new ArrayList<>();
    Scanner scn = new Scanner(System.in);
    public void nhapDay(){
        System.out.println(" Nhap vao mot so : ");
        int number=Integer.parseInt(scn.nextLine());
        So s = new So(number);
        arl.add(s);
        System.out.println(" Da them so " + s.getSo() + "vao day");
    }
    
    public void inDay(){
        System.out.println("Day so ban da nhap vao la : ");
        for(int i=0;i<arl.size();i++){
            So s=arl.get(i);
            System.out.println(s.toString());
        }
    }
}

// Class Main

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        XuLySo xls = new XuLySo();
        Scanner scn = new Scanner(System.in);
        int luachon;
        while(true){
            System.out.println("1. Nhap day so");
            System.out.println("2. In day so");
            System.out.println("Lua chon cua ban la : ");
            luachon=Integer.parseInt(scn.nextLine());
            switch(luachon){
                case 1:xls.nhapDay();
                break;
            
                case 2:xls.inDay();
                break;
            }
            
        }
    }
}
Truong Pham viết 22:53 ngày 30/09/2018

Java cũng cấp sẵn class Integer rồi bạn có thể dùng nó mà không cần class So
Bạn có thể tìm Max và Min mà không cần sắp xếp ArrayList. Có thể thiết kế class với các static method truyền vào ArrayList và trả về giá trị Min hoặc Max.

Nha Trần viết 22:37 ngày 30/09/2018

Đây là bài tương tự mình đã làm ,bạn có thể sửa lại 1 tí là ra


package songuyen;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;

public class ListSoNguyen {
private ArrayList ListSoNguyen;
int stt=0;
public ListSoNguyen(){
ListSoNguyen =new ArrayList();
}
public void ThemSoNguyen(){
System.out.println("Nhap so thu “+(stt+1));
ListSoNguyen.add(new SoNguyen());
stt++;
}
public void XuatMangSoNguyen(){
for(int i=0;i<ListSoNguyen.size();i++){
System.out.print(ListSoNguyen.get(i).songuyen+” “);
}
}
public void SapXep(){
int tam=0;
for(int i=0;i<ListSoNguyen.size();i++)
for(int j =i+1;j<ListSoNguyen.size();j++){
if(ListSoNguyen.get(i).songuyen>ListSoNguyen.get(j).songuyen){
tam=ListSoNguyen.get(i).songuyen;
ListSoNguyen.get(i).songuyen=ListSoNguyen.get(j).songuyen;
ListSoNguyen.get(j).songuyen=tam;
}
}
}
public static void main(String[] args) {
ListSoNguyen list=new ListSoNguyen();
int chon;
Scanner sc=new Scanner(System.in);
while(true){
System.out.println(“1.Nhap so nguyen \n2.Xuat mang \n3.Sap xep mang \n0.Dung \nChon”);
chon=sc.nextInt();
if(chon==1)
list.ThemSoNguyen();
if(chon==2){
System.out.println(”===================\nMang so nguyen “);
list.XuatMangSoNguyen();System.out.println();
}
if(chon==3){
System.out.println(”===================\nMang so nguyen da sap xep ");
list.SapXep();
list.XuatMangSoNguyen();
System.out.println();
}
if(chon==0) System.exit(chon);
}

}}


Quân viết 22:45 ngày 30/09/2018

phần nhập số bạn tự làm, chỉ cần add vào integerList là được.

    List<Integer> integerList = new ArrayList<>();
    // nhập dữ liệu
    integerList.add(1);
    integerList.add(2);
    integerList.add(3);
    // xử lí dữ liệu
    int min = Collections.min(integerList);
    int max = Collections.max(integerList);
Việt Dũng Lê viết 22:50 ngày 30/09/2018

anh có thể cho em xin code của bài này được khôgn ạ ? em muốn tham khảo cái design pattern của anh ạ , em cám ơn anh

Tất Huân viết 22:49 ngày 30/09/2018

Mình không hiểu bạn tạo class số để làm gì nữa. Nhưng nếu bạn chỉ cần tìm max min thì bạn có thể dùng vòng for chạy đến list.size để duyệt mảng và tìm max min

cescnghia viết 22:43 ngày 30/09/2018

cách này là optimal nè bạn:

class XuLySo() {

private int max = Integer.MIN;
private int min = Integer.MAX;

}

=> mỗi khi add 1 số vào mảng, bạn chỉ cần so sánh và update giá trị min max. Sau đó hàm tìm max, min chỉ cần in ra với complexity O(1).

Mai Thế Nguyễn viết 22:44 ngày 30/09/2018

Tại sao phải làm dài dòng như vậy ạ?

Việt Dũng Lê viết 22:40 ngày 30/09/2018

cám ơn mọi người đã nhiệt tình giúp đỡ , em đã nhận ra sự thừa thãi và thiếu sót trong code của mình ạ , vấn đề của em đã được giải quyết , cám ơn anh em rất nhiều ạ

Bài liên quan
0