Sắp xếp với phương thức CompareTo()

Dạ anh chị và các bạn cho em hỏi phương thức CompareTo() của class XeDap , em muốn nó sort ra từ lớn đến nhỏ nhưng nó lại sort ra từ nhỏ đến lớn thì phải làm sao ạ, mong anh chị và các bạn giải đáp.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace XeDap
{
    class Xe
    {
        public string hoTen;
        public string ID;
        public int soGioThue;
        public int soTienThue;

        public void Info()
        {
            Console.Write("Nhap ho va ten :");
            hoTen = Convert.ToString(Console.ReadLine());
            Console.Write("Nhap ID:");
            ID = Convert.ToString(Console.ReadLine());
            Console.Write("Nhap so gio thue xe :");
            soGioThue = Convert.ToInt32(Console.ReadLine());
        }
        public void Xuat()
        {
            Console.WriteLine("Sau khi nhap thong tin thue xe");
            Console.WriteLine("Ho ten: " + hoTen);
            Console.WriteLine("ID: " + ID);
            Console.WriteLine("So gio thue xe la: " + soGioThue);
        }

    }
    class XeDap : Xe, IComparable
    {
        public int CompareTo(object xe)
        {
            XeDap xe1 = xe as XeDap;
            if (this.soGioThue > xe1.soGioThue)
                return -1;
            else if (this.soGioThue < xe1.soGioThue)
                return 1;
            else
                return 0;
        }
        public void inFoXeDap()
        {
            base.Info();
            if (soGioThue == 0)
                soTienThue = 0;

            else
                soTienThue = 10000 * (soGioThue - (soGioThue - 1)) + 8000 * (soGioThue - 1);

        }
        public void xuatThongTinXeDap()
        {
            base.Xuat();
            Console.WriteLine("So tien thue xe dap la:" + soTienThue);
            Console.WriteLine("-----------------------------");

        }
        public override string ToString()
        {
            return "Ho ten: " + hoTen + " va so tien thue xe la:" + soTienThue;
        }
    }
    class Program
    {
            static void Main(string[] args)
        { 
            int soLuongKhachHang, i;
            Console.Write("Nhap so luong khach hang: ");
            soLuongKhachHang = Convert.ToInt32(Console.ReadLine());
            XeDap[] dap = new XeDap[soLuongKhachHang];
            ArrayList SortXe = new ArrayList();
            for (i = 0; i < soLuongKhachHang; i++)
            {
                dap[i] = new XeDap();
                dap[i].inFoXeDap();
                dap[i].xuatThongTinXeDap();
            }
            for (i = 0; i < soLuongKhachHang; i++)
            {
                SortXe.Add(dap[i]);
            }
            SortXe.Sort();
            Console.WriteLine("Sau khi sap xep:");
            for (i = 0; i < soLuongKhachHang; i++)
            {
                Console.WriteLine(dap[i].ToString());
            }

            Console.ReadKey();
        }

    }
}

Đảo giữa hai giá trị trả về 1-1.

3 Likes

dạ em có chuyển lại rồi ạ nhưng nó vẫn vậy

Đảo kiểu gì mà “vẫn vậy”???
Đừng nói là đảo luôn biểu thức trong if - else nhé.

4 Likes

dạ không ,em đảo cái return thôi ạ

à em biết chỗ em sai rồi ,cảm ơn anh ạ

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?