在单独的类中访问私有变量?

时间:2014-04-07 02:52:03

标签: java arrays sorting object

这是家庭作业,所以我不希望你为我做这件事。

我有一个程序可以根据学生的身份证号码对学生进行分类。问题是,创建学生的学生班级(由我的老师提供,无法更改)将ID设置为私人,因此我无法在呼叫功能中访问它们。 / p>

这是学生班:

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(),因为它试图为方法赋值。 / p>

谢谢。

3 个答案:

答案 0 :(得分:5)

使用getID类提供的Student方法,这就是它的用途(AKA a getter)

students[lastPlace].getID();

你将遇到的下一个问题是它没有设置器......所以你不能(也不应该)分配ID

相反,您应该交换实际的对象引用...

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

答案 1 :(得分:0)

学生班有一个&#34; getter&#34; ID变量的方法。这是需要其他类访问的私有变量的常见Java解决方法。而不是students[j].id,请致电students[j].getID()

答案 2 :(得分:0)

您根本不需要更改学生ID,以便对对象进行排序。如果你真的这样做,你必须为变量定义一个“setter”(就像你已经拥有的getter一样),但我的猜测是你应该重新考虑你的策略:排序对象通常应该涉及改变对象本身!相反,移动对象本身,例如students[maxLoc] = students[lastPlace]