2013-06-11 50 views
0
幫助
import java.util.Scanner; 
import java.util.Arrays; 

class StudentScores { 
public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter the # of students"); 
    int numOfStudents = input.nextInt(); 
    int[] scores = new int[numOfStudents]; 
    String[] names = new String[numOfStudents]; 

    for (int i = 0; i < numOfStudents; i++) { 
     input.nextLine(); 
     System.out.print("Enter name: "); 
     names[i] = input.nextLine(); 
     System.out.print("Enter score: "); 
     scores[i] = input.nextInt(); 
    } 

        // This doesn't sort anything, it just prints out the result in unsorted way 
    /*for (int i = 0; i < numOfStudents; i++) { 
     System.out.println(names[i] + " " + scores[i]); 
    }*/ 

    Arrays.sort(scores); 
    reverse(scores); 


    for (int u: scores) { 
     System.out.println(u); 
    } 
} 

    public static int[] reverse(int[] array) { 
    for (int i = 0, j = array.length - 1; i < j; i++, j--) { 
     int temp = array[i]; 
     array[i] = array[j]; 
     array[j] = temp; 
    } 

    return array; 
    } 
} 

原來的問題是: 編寫提示用戶輸入學生,學生的姓名,以及他們的分數數量中的程序,並在打印學生姓名降低他們的分數的順序。學生的分數排序需要的Java

我的問題是如何顯示名稱與排序的分數列表?

你一定不必給我一個完整的解決方案,只是給我一個提示,所以我可以自己解決它。

回答

2

您可以將相關字段封裝到一個類中,例如, StudentRecord可封裝字段namescore

現在,您將根據第二個字段score對這些對象的集合進行排序。當需要打印排序結果時,您將遍歷該集合並打印第一個字段name

舉例說明:

public class StudentRecord implements Comparable<StudentRecord> { 

    private String name; 
    private int score; 

    public StudentRecord(String name, int score) { 
     this.name = name; 
     this.score = score; 
    } 

    @Override 
    public int compareTo(StudentRecord other) { 
     if (score == other.score) return 0; 
     else if (score < other.score) return -1; 
     else return 1; 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 


    public static void main(String[] args) { 

     StudentRecord stu1 = new StudentRecord("Matt", 50); 
     StudentRecord stu2 = new StudentRecord("John", 90); 

     if (stu1.compareTo(stu2) == 0) { 
      System.out.println(stu1.toString() + " has the same score with " + stu2.toString()); 
     } 
     else if (stu1.compareTo(stu2) < 0) { 
      System.out.println(stu1.toString() + " has a lower score than " + stu2.toString()); 
     } 
     else { 
      System.out.println(stu1.toString() + " has a higher score than " + stu2.toString()); 
     } 

     // output: 
     // Matt has a lower score than John 

    } 

} 

在很多的排序算法,實現Comparable界面給人的算法足夠的信息來進行排序實現此類對象的集合所述接口。

+3

要對它們進行排序,可以使類實現Comparable並正確實現compareTo(不要忘記重寫equals和hashCode)。或者,使用「比較器」。 – SJuan76

+0

此外,重寫'toString'方法也會簡化打印。 – Santa

+0

@Santa:是的,這個解決方案對我來說很好。 – JavaNoob

0

您不能使用Arrays.sort()解決此問題,因爲您需要將兩個數組排序在一起。編寫一個排序函數,按順序對分數進行排序,每次交換兩個分數時,也將這些分數交換給學生。

+0

是的!我只是想看看結果,但我解決不了。 – JavaNoob

+0

@丹尼爾:不,不這樣做。 Java是一種OOP語言。使用對象! – jlordo