0

我试图将我的匿名对象从一个类添加到一个哈希表。我按照老师的要求创建了我的 Hashtable,但是有一个问题。我必须得到我的对象之一的 x 和 y 值。但是系统无论如何都找不到 x。

public class HashDatastructure{

  public static void main(String[] args){

    java.util.Hashtable kreise = new java.util.Hashtable();

    for(int i = 0; i < 6; i++){
      kreise.put(new Integer(i), new Kreis(120, 120, 60));
    }
    System.out.println(kreise.get(3).toString() + " is 4. Object
                       and this Object's X Value: "
                     + kreise.get(3).x + " || Y Value: ");
  }
}

这是我的 Kreis 课程:

public class Kreis extends Object{
    public int x; //Mittelpunkt-x
    public int y; // Mittelpunkt-y
    public int radius;
    public final double PI = 3.14159; //Constant Variable for pi
    public static int kreisCounter = kreisZaehler();
    public static int counter = 0;


    public Kreis(int x, int y, int radius){
      this.x = x;
      this.y = y;
      this.radius = radius;
      kreisCounter();
    }

    private static int kreisZaehler(){
      counter++;
      return counter;
    }
    public void setRadius(int wert){
      radius = wert;
    }

    public double getFlaeche(){
      return radius * radius * PI;
    }

    public double getUmfang(){
      return 2 * radius * PI;
    }

}

4

1 回答 1

0

我不知道您所说的“匿名对象”是什么意思,但是您使用的是raw types,这通常不是一个好主意。相反,告诉编译器kreis包含什么样的对象:

java.util.Hashtable<Kreise> kreise = new java.util.Hashtable<>();
// ----------------^^^^^^^^---------------------------------^^

然后,编译器就会知道get返回了一个Kreis对象,里面有什么x等等。(旁注:最好将其设为x私有并提供类似的访问器getX。)

更多内容可在泛型 Java 教程中探索。

如果由于某种原因您必须使用原始类型,则可以Kreis在检索时强制转换:

// NOT recommended
System.out.println(kreise.get(3).toString() + " is 4. Object and this Object's X Value: "
                 + (((Kreise)kreise.get(3)).getX() + " || Y Value: ");
// -----------------^^^^^^^^^-------------^-^^^^^^

(请注意,我假设您将x其设为私有并为其提供访问器。)

于 2019-03-30T14:39:50.927 回答