日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转载] java排序compareTo:降序输出学生成绩

發布時間:2025/3/11 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载] java排序compareTo:降序输出学生成绩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考鏈接: Java程序的輸出| 18(重寫Override)

一道簡單程序題:

編寫一個程序,輸入學生的姓名、分數信息,要求程序按照成績降序排序后并輸出。

實現方法有很多

?

方法一? ??

?

public class ScoreSort2?

{

? ? private String name;

? ? private long grade;

?

? ? public long getGrade()?

? ? {

? ? ? ? return grade;

? ? }

? ? public void setGrade(long grade)?

? ? {

? ? ? ? this.grade = grade;

? ? }

? ? public String getName()

? ? {

? ? ? ? return name;

? ? }

? ? public void setName(String name)

? ? {

? ? ? ? this.name = name;

? ? }

?

? ? public String toString()

? ? {

? ? ? ? return this.name;

? ? }

? ? public static void main(String[] args)?

? ? {

? ? ? ? Scanner sc = new Scanner(System.in);

? ? ? ? System.out.println("情輸入學生人數:");

? ? ? ? int num = sc.nextInt();? //學生個數

? ? ? ? ScoreSort2 message[] = new ScoreSort2[num]; //成績信息的條數

? ? ? ? for(int i = 0; i < message.length; i++)

? ? ? ? {

? ? ? ? ? ? message[i] = new ScoreSort2();

? ? ? ? ? ? System.out.println("請輸入第" + (i+1) + "個學生的姓名");

? ? ? ? ? ? String name = sc.next();

? ? ? ? ? ? message[i].setName(name);

? ? ? ? ? ? System.out.println("請輸入第" + (i+1) + "個學生的成績");

? ? ? ? ? ? long grade = sc.nextLong();

? ? ? ? ? ? message[i].setGrade(grade);

? ? ? ? }

? ? ? ? System.out.println("統計結果如下:");

? ? ? ? for(int i = 0; i < message.length; i++)

? ? ? ? {

? ? ? ? ? ? for(int j = i+1; j <message.length; j++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? if(message[i].getGrade() < message[j].getGrade())

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ScoreSort2 s = new ScoreSort2();

? ? ? ? ? ? ? ? ? ? s = message[i];

? ? ? ? ? ? ? ? ? ? message[i] = message[j];

? ? ? ? ? ? ? ? ? ? message[j] = s;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? for(int i=0; i < message.length; i++)

? ? ? ? {

? ? ? ? ? ? System.out.println("姓名:"+message[i].getName()+"成績:"+message[i].getGrade());

? ? ? ? }

? ? }

}

方法二

?

public class ScoreSort3?

{

?

? ? public static void main(String[] args)?

? ? {

? ? ? ? Scanner input = new Scanner(System.in);????????

? ? ? ? System.out.println("請輸入學生個數");

? ? ? ? int num = input.nextInt();

? ? ? ? scoreData[] arr = new scoreData[num];

? ??????

? ? ? ? for(int i=0;i<num;i++)

? ? ? ? {

? ? ? ? ? ? System.out.println("請輸入第" + (i+1) +"個學生的姓名:") ;

? ? ? ? ? ? String stuName = input.next();//將nextLine改為next nextline只讀入了數字 未讀入換行

? ? ? ? ? ? System.out.println("請輸入第" + (i+1) +"個學生的成績:");

? ? ? ? ? ? String stuScore = input.next();

? ? ? ? ? ? arr[i] = new scoreData(stuName,stuScore);

? ? ? ? }

? ? ? ? System.out.println("-----------------------");

? ??????

? ? ? ? System.out.println("降序排序結果輸出:");

? ? ? ? Arrays.sort(arr);

? ? ? ? for(int i=0;i<arr.length;i++)

? ? ? ? {

? ? ? ? ? ? System.out.println(arr[i]);

? ? ? ? }????????

? ? }

}

?

class? scoreData implements Comparable

{

? ? private String name;

? ? private String score;

? ??

? ? public scoreData(String name, String score)

? ? {

? ? ? ? this.name = name;

? ? ? ? this.score = score;

? ? }

? ??

? ? //降序排序

? ? public int compareTo(Object o)

? ? {

? ? ? ? scoreData s = (scoreData)o;

? ? ? ? if(this.score.compareTo(s.score)<0)//String類型的大小比較

? ? ? ? {

? ? ? ? ? ? return 1;

? ? ? ? }

? ? ? ? else if(this.score.compareTo(s.score)>0)

? ? ? ? {

? ? ? ? ? ? return -1;

? ? ? ? }

? ? ? ? return 0;

? ? }

? ??

? ? @Override

? ? public String toString(){//重寫toString方法

? ? ? ? return "姓名:" + this.name + " 成績:" + this.score;

? ? }

}

Arrays.sort

public static void sort(Object[] a)

?

?

? 根據元素的

? 自然順序對指定對象數組按升序進行排序。數組中的所有元素都必須實現

? Comparable 接口。此外,數組中的所有元素都必須是

? 可相互比較的(也就是說,對于數組中的任何

? e1 和?

? e2 元素而言,

? e1.compareTo(e2) 不得拋出?

? ClassCastException)。

? 保證此排序是穩定的:不會因調用 sort 方法而對相等的元素進行重新排序。

??

? 該排序算法是一個經過修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,則忽略合并)。此算法提供可保證的 n*log(n) 性能。

??

? ?

? ?

? ? 類型參數:

? ?

??

? T - 可以與此對象進行比較的那些對象的類型

?

?

?

接口 Comparable<T>

?

?

?

? 類型參數:

?

?

? T - 可以與此對象進行比較的那些對象的類型

?

?

public interface Comparable<T>

?

此接口強行對實現它的每個類的對象進行整體排序。這種排序被稱為類的自然排序,類的 compareTo 方法被稱為它的自然比較方法。

實現此接口的對象列表(和數組)可以通過 Collections.sort(和Arrays.sort)進行自動排序。實現此接口的對象可以用作有序映射中的鍵或有序集合中的元素,無需指定比較器。

對于類 C 的每一個 e1 和 e2 來說,當且僅當 e1.compareTo(e2) == 0 與e1.equals(e2) 具有相同的 boolean 值時,類 C 的自然排序才叫做與 equals 一致。注意,null 不是任何類的實例,即使e.equals(null) 返回 false,e.compareTo(null) 也將拋出 NullPointerException。

建議(雖然不是必需的)最好使自然排序與 equals 一致。這是因為在使用自然排序與 equals 不一致的元素(或鍵)時,沒有顯式比較器的有序集合(和有序映射表)行為表現“怪異”。尤其是,這樣的有序集合(或有序映射表)違背了根據equals 方法定義的集合(或映射表)的常規協定。

例如,如果將兩個鍵 a 和 b 添加到沒有使用顯式比較器的有序集合中,使 (!a.equals(b) && a.compareTo(b) == 0),那么第二個add 操作將返回 false(有序集合的大小沒有增加),因為從有序集合的角度來看,a 和 b 是相等的。

實際上,所有實現 Comparable 的 Java 核心類都具有與 equals 一致的自然排序。java.math.BigDecimal 是個例外,它的自然排序將值相等但精確度不同的BigDecimal 對象(比如 4.0 和 4.00)視為相等。

從數學上講,定義給定類 C 上自然排序的關系式 如下:

? ? ? {(x, y)|x.compareTo(y) <= 0}。

?

整體排序的

?是:

?

? ? ? {(x, y)|x.compareTo(y) == 0}。

?

它直接遵循?

compareTo

?的協定,商是?

C

?的

等價關系

,自然排序是?

C

?的

整體排序

。當說到類的自然排序

與 equals 一致

?時,是指自然排序的商是由類的

equals(Object)

?方法定義的等價關系。

?

? ? {(x, y)|x.equals(y)}。

此接口是 Java Collections Framework 的成員。

?

?

?

?

? 從以下版本開始:

?

?

? 1.2

?

?

? 另請參見:

?

?

? Comparator

?

?

?

?

?

?

方法摘要intcompareTo(T o)比較此對象與指定對象的順序。

方法詳細信息

?

?

compareTo

int compareTo(T o)

?

?

? 比較此對象與指定對象的順序。如果該對象小于、等于或大于指定對象,則分別返回負整數、零或正整數。

? 實現類必須確保對于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的關系。(這意味著如果y.compareTo(x)拋出一個異常,則 x.compareTo(y) 也要拋出一個異常。)

? 實現類還必須確保關系是可傳遞的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味著 x.compareTo(z)>0。

? 最后,實現者必須確保 x.compareTo(y)==0 意味著對于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 強烈推薦(x.compareTo(y)==0) == (x.equals(y)) 這種做法,但并不是 嚴格要求這樣做。一般來說,任何實現Comparable 接口和違背此條件的類都應該清楚地指出這一事實。推薦如此闡述:“注意:此類具有與 equals 不一致的自然排序。”

? 在前面的描述中,符號 sgn(expression) 指定 signum 數學函數,該函數根據expression 的值是負數、零還是正數,分別返回-1、0 或 1 中的一個值。

??

?

?

??

? ?

? ? 參數:

? ?

? ?

? ? o - 要比較的對象。

? ?

? ?

? ? 返回:

? ?

? ?

? ? 負整數、零或正整數,根據此對象是小于、等于還是大于指定對象。

? ?

? ?

? ? 拋出:

? ?

? ?

? ? ClassCastException - 如果指定對象的類型不允許它與此對象進行比較

? ?

??

?

?

?

?

另附上Arrays.sort用法:

? ? ? 1. 數字排序 int[] intArray = new int[] { 4, 1, 3, -23 };

  Arrays.sort(intArray);  輸出: [-23, 1, 3, 4]

  2. 字符串排序,先大寫后小寫 String[] strArray = new String[] { "z", "a", "C" };

  Arrays.sort(strArray);  輸出: [C, a, z]

  3. 嚴格按字母表順序排序,也就是忽略大小寫排序 Case-insensitive sort

  Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);  輸出: [a, C, z]

  4. 反向排序, Reverse-order sort

  Arrays.sort(strArray, Collections.reverseOrder());  輸出:[z, a, C]

  5. 忽略大小寫反向排序 Case-insensitive reverse-order sort

  Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);  Collections.reverse(Arrays.asList(strArray));  輸出: [z, C, a]

  6、對象數組排序

  要對一個對象數組排序 ,則要自己實現java.util.Comparator接口  例子:  Common_User[] userListTemp=new Common_User[temp.size()];  Arrays.sort(userListTemp, new PinyinComparator());  PinyinComparator 實現了Comparator接口,重寫了compare方法,來告訴Arrays按照什么規則來比較兩個對象的大小。

總結

以上是生活随笔為你收集整理的[转载] java排序compareTo:降序输出学生成绩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。