2014-04-07 29 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]