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 :
- Class So : chứa thông tin dãy số
- Class XuLySo : xử lý dãy số
- 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;
}
}
}
}
Bài liên quan
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.
Đâ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);
}
}}
phần nhập số bạn tự làm, chỉ cần add vào integerList là được.
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
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
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).
Tại sao phải làm dài dòng như vậy ạ?
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 ạ