[轉載] 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按照什么規則來比較兩個對象的大小。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540323.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

300GB*6 SCSI RAID5 LINUX服務器數據恢復手記

[摘要]某數碼沖印網站&#xff0c;采用DELL POWEREDGE2850服務器&#xff0c;存儲部分由6塊300G硬盤組成RAID5&#xff0c;LINUX平臺&#xff0c;1.5T邏輯磁盤中只包含一個卷&#xff0c;文件系統為EXT3&#xff0c;存儲所有客戶數碼照片&#xff0c;服務器的故障導致整個公司無…

[轉載] public static void main(String[] args) 隱含了什么?

參考鏈接&#xff1a; 了解Java中“ public static void main”中的“ static” public class TestSort { public static void main(String[] args) { // 需要分別用Javac和Java命令行編譯和運行 int[] arr; int temp 0; arr new int [9]; for (int i 0; i < arr.length…

在C#中創建DataTable

經常遇到對DataTable進行各種運算&#xff0c;這方面的資料經常散落在各處&#xff0c;使用起來不方面&#xff0c;我想還是把他們集中到博客中&#xff0c;下次要用到的時候可以直接查看。下面是創建一個空白的DataTable&#xff0c;并定義相關的字段&#xff1a;DataTable dt…

[轉載] Java中的靜態方法不能被子類重寫

參考鏈接&#xff1a; 可以在Java中重載或重寫靜態方法嗎 Java中的靜態方法不能被子類重寫 特點&#xff1a;靜態方法屬于類的方法&#xff0c;也屬于對象的方法&#xff0c;但是靜態方法隨類的存在。 結論&#xff1a;Java中的靜態方法不能被子類重寫&#xff0c;實際上&…

2015-03-19 create php alternative for myslq_result in mysqli(PHP)--PDO Tutorial for Mysql Developers

來源&#xff1a;http://www.bestwebframeworks.com/tutorials/php/152/create-php-alternative-for-mysql_result-in-mysqli/ 內容&#xff1a; If you are migrating from PHP 5.5 to a newer version of PHP - you might be interested in a MySQL to MySQLi/PDO migration …

[轉載] [OpenGL] shadow mapping(實時陰影映射)

參考鏈接&#xff1a; Java中靜態函數的陰影(方法隱藏) 轉載原創&#xff1a;ZJU_fish1996 http://blog.csdn.net/zju_fish1996/article/details/51932954 source:原文地址 code:點擊可以直接下載源代碼 1978年&#xff0c;Lance Williams在其發表的論文《Casting cur…

[轉載] java synchronized靜態同步方法與非靜態同步方法,同步語句塊

參考鏈接&#xff1a; Java中的靜態方法與實例方法 java synchronized靜態同步方法與非靜態同步方法&#xff0c;同步語句塊 并發編程 線程同步 靜態方法鎖 非靜態方法鎖 同步塊 進行多線程編程&#xff0c;同步控制是非常重要的&#xff0c;而同步控制就涉及到了鎖。 對代…

SpringBoot安裝和創建簡單的Web應用

SpringBoot安裝 方式一&#xff1a; Eclipese->Help->Eclipse Marketplace ->Finde STS -> Install 注意&#xff1a;安裝過程中挺慢&#xff0c;而且可能會報錯&#xff0c;報錯時需要重復以上步驟&#xff08;重新安裝STS后&#xff0c;安裝進度接之前的繼續進行…

[轉載] JAVA 堆棧 堆 方法區 靜態區 final static 內存分配 詳解

參考鏈接&#xff1a; 在Java中為靜態最終static final變量分配值 轉載來源&#xff1a;https://blog.csdn.net/peterwin1987/article/details/7571808 Java棧與堆 堆:順序隨意 棧:后進先出(Last-in/First-Out). Java的堆是一個運行時數據區,類的對象從中分配空間。這些…

android學習之-Style樣式的定義

這個例子主要是寫了配置文件&#xff0c;main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:orientation"vertical" android:lay…

[轉載] JAVA泛型雜談--擦除,協變,逆變,通配符等

參考鏈接&#xff1a; Java中的協變返回類型 在《JAVA核心思想》這本書里&#xff0c;關于泛型的章節意外的很多&#xff0c;小小的泛型里其實有很多可以學習的內容&#xff0c;我總結下最近看書的成果。 一. 泛型的好處和應用 最基礎的用到泛型的地方無非是在容器里 使用…

ASP.NET Session 詳解

[ASP.NET] Session 詳解 開發者在線 Builder.com.cn 更新時間:2008-03-23作者&#xff1a;黑暗凝聚力量&#xff0c;墮落方能自由 來源:CSDN 本文關鍵詞&#xff1a; Web開發 ASP session 詳解 本文僅代表作者個人觀點&#xff0c;正確與否請讀者自行研究&#xff01;閱讀本文…

[轉載] java給對象中的包裝類設置默認值

參考鏈接&#xff1a; Java中的對象類Object 處理方法如下 主要適用于&#xff0c;對象中使用了包裝類&#xff0c;但是不能給null需要有默認值的情況 /** * 處理對象中包裝類&#xff0c;因為快捷簽沒有用包裝類 * * param object 對象 */ public static void handlePara…

hadoop namenode管理元數據機制

一、簡要namenode管理元數據機制&#xff1a; 二、詳細namenode管理元數據機制&#xff1a; 三、secondary namenode 合并edits和fsimage&#xff1a; 四、namenode存儲元數據細節&#xff1a; 五、checkpoint觸發點&#xff1a; 本文轉自lzf0530377451CTO博客&#xff0c;原文…

[轉載] 多線程詳解java.util.concurrent

參考鏈接&#xff1a; java.lang.Object的靈活性 一、多線程 1、操作系統有兩個容易混淆的概念&#xff0c;進程和線程。 進程&#xff1a;一個計算機程序的運行實例&#xff0c;包含了需要執行的指令&#xff1b;有自己的獨立地址空間&#xff0c;包含程序內容和數據&#…

BABOK - 企業分析(Enterprise Analysis)概要

描述 企業分析描述我們如何捕捉、提煉并明晰業務需要&#xff0c;并定義一個可能實現這些業務需要的一個方案范圍&#xff0c;它包括問題定義和分析&#xff0c;業務案例開發&#xff0c;可行性研究和方案范圍定義 目的 明確業務戰略需要和目標&#xff0c;并建議方案范圍 任務…

6、EIGRP配置實驗之負載均衡

1、實驗拓撲 2、負載均衡原理 等價負載均衡&#xff1a;默認情況下EIGRP只支持等價負載均衡&#xff0c;默認支持4條線路的等價負載均衡&#xff0c;可以通過show ip protocols 查看&#xff0c;最大可以支持16條線路的等價負載均衡&#xff0c;可以在EIGRP路由進程下通過maxim…

[轉載] 詳解Java中靜態方法

參考鏈接&#xff1a; Java中的靜態類 定義&#xff1a; 在類中使用static修飾的靜態方法會隨著類的定義而被分配和裝載入內存中&#xff1b;而非靜態方法屬于對象的具體實例&#xff0c;只有在類的對象創建時在對象的內存中才有這個方法的代碼段。 注意&#xff1a; 非靜態…

[轉載] 向集合中添加自定義類型--建議在自定義類型的時候要重寫equals方法

參考鏈接&#xff1a; Java重寫equals方法 package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定義類型 */public class TestList04 { public static void main(String[] args) { ArrayList list new ArrayList(); Student s1 new Stude…

[轉載] java重寫toString()方法

參考鏈接&#xff1a; 在Java中重寫toString() 前言&#xff1a; 在你興高采烈的寫完一個類&#xff0c;創建測試類時&#xff0c;創建對象&#xff0c;傳入參數&#xff0c;調用對象&#xff0c;以為會得到參數值&#xff0c;但突然發現輸出的是“ 類名什么東東&#xff1f;&…