2014-04-07 31 views
1

這是家庭作業,所以我不指望你爲我做。在單獨的類中訪問私有變量?

我有一個程序,根據學生的ID號排列學生。問題在於創建學生的學生課程(由我的教師提供,無法更改)將ID設置爲私人,所以我無法在調用函數中訪問它們。

這是學生類:

public class StudentQ { 
    private String name; 
    private int id; 
    private double avg; 

    StudentQ(String sname, int sid, double average){ 
    name=sname; 
    id=sid; 
    avg=average; 
    } 

    // Note this uses the String static method format to produce a string 
    // in the same way that System.out.printf does 
    public String toString(){ 
    return String.format("%15s [%6d]:%7.2f", name,id,avg); 
    } 

    public String getName(){ 
    return name; 
    } 

    public int getID(){ 
    return id; 
    } 

    public double getAverage(){ 
    return avg; 
    } 

    public void setAverage(double newavg){ 
    avg=newavg; 
    } 
} 

,這是我的排序類:

static void sortByID(StudentQ[] students) { 


    for (int lastPlace = students.length-1; lastPlace > 0; lastPlace--) { 
    int maxLoc = 0; 
    for (int j = 1; j <= lastPlace; j++) { 
     if (students[j].getID() > students[maxLoc].getID()) { 
     maxLoc = j; 
     } 
    } 
    int temp = students[maxLoc].getID(); 
    *students[maxLoc].id = students[lastPlace].id; 
    students[lastPlace].id= temp;* 

    } 

} 

,現在是這樣的,它給了我和錯誤,指出該領域StudentQ.id是不可見,我不能使用.getID(),因爲它試圖給一個方法賦值。

謝謝。

+1

_and我不能使用.getID(),因爲它試圖給一個方法賦值._你是什麼意思,你爲什麼這麼認爲? –

+1

我認爲「that」指的是'students [maxLoc] .id = students [lastPlace] .id'部分,而不是getter。 – guest

+0

您是否允許使用Java Collections排序方法? – xagyg

回答

5

使用Student類的供應getID方法,這就是它的存在(AKA一個getter)

students[lastPlace].getID(); 

,你將有接下來的問題是,有沒有爲它制定者...所以你不能(也不應該)指定的ID

相反,你應該換的實際對象的引用......

StudentQ temp = students[maxLoc]; 
students[maxLoc] = students[lastPlace]; 
students[lastPlace] = temp; 
+0

在哪條線......? – MadProgrammer

0

學生類有ID變量的「getter」方法。對於需要由其他類訪問的私有變量,這是一種常見的Java解決方法。代替students[j].id,請致電students[j].getID()

0

您應該不必更改學生ID,以排序對象。如果你真的這樣做,你必須爲變量定義一個「setter」(比如你已經擁有的getter),但是我的猜測是你應該重新考慮你的策略:排序對象通常應該是而不是涉及改變對象本身!而是自己移動對象,例如students[maxLoc] = students[lastPlace]