package tutanloc;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.text.StyledEditorKit.BoldAction;
public class Bai2 {
public static void main(String[] args) {
// Nhập số vào ArrayList . Sắp xếp lại từ lớn tới nhỏ
ArrayList<Integer>ds=new ArrayList<Integer>();
Integer so;
Scanner sc=new Scanner(System.in);
// chạy vòng lặp for để nhập số,kết thúc nhập bằng số 0
for(int i=1;i>0;i=so)
{
System.out.print("Mời nhập số: ");
so=sc.nextInt();
if(so>0)
ds.add(so);
}
// suất ds khi chưa sắp xếp để dễ so sánh
System.out.println("ds khi chưa sắp xếp");
for(Integer data:ds)
{
System.out.print(data+"\t");
}
//quá trình sắp xếp
for(int j=0;j<ds.size()-1;j++)//cho j chạy từ đầu ds -> cúi ds
{
for(int i=ds.size()-1;i>j;i--)//cho i chạy từ cúi ds -> tới vị trí của j
//vd:j=7 thì i chỉ chạy từ cúi ds tới vị trí thứ 6 thì dừng
{
if(ds.get(i)<ds.get(j))//so sánh giá trị của vị trí i nếu lớn hơn giá trị ở vị trí j thì
{
int giatricu=ds.get(j);//b1:thì lưu lại giá trị của vị trí j để hoán đổi
ds.set(j, ds.get(i));//b2:tiếp theo dùng hàm set để thay vị trí giá trị của i thành vị trí của j
ds.set(i, giatricu);//b3:tiếp theo là dùng set để thay vị trí giá trị của j thành vị trí của i(giá trị của j đã dc lưu ở b1)
}
}
}
//Lưu ý : cách giải là gán 2 biến cho vị trí đầu và cúi của ArrayList
//rồi lấy biến vị trí đầu so sánh lần lượt vs biến vị trí cúi để tìm ra
//giá trị lớn nhất trong ArrayList.
//Nhớ rằng không được để biến vị trí cúi chạy vào những vị trí đã dc săp xếp
//bằng cách gán điều kiện cho nó lớn hơn biến vị trí đầu.
//Chỉ cần thay dấu lớn thành dấu bé sẽ sắp xếp theo vị trí từ nhỏ tới lớn.
System.out.println("\n ds sau khi sắp xếp");
for(Integer data:ds)
{
System.out.print(data+"\t");
}
}
}
Cho mình chút ý kiến về bài này, nó đã chạy đúng kq mong muốn rồi , nhưng mình thấy hơi dài thì phải và trình của mình củng nghỉ dc như vậy thôi nếu ai có thể làm code gọn hơn thì xin chỉ giáo .Mình chỉ cần ý tưởng ko cần viết code dùm .Thank!
Ah nếu có bài tập về ArrayList thì cho mình xin luôn nhé .Thank!